I am trying to create a generic code to initialize a Kie container per BPMN business process.
I have stored the process in DB as XML. Need to enable the deploy functionality of BPMN to Kie container to execute that specific business process instances.
I am using Spring Boot 3.2.x and Gradle with Java 21. Here are the settings:
Gradle Dependencies:
implementation '.kie:kie-api:7.73.0.Final'
implementation '.kie:kie-dmn-api:7.73.0.Final'
implementation '.drools:drools-core:7.73.0.Final'
implementation '.jbpm:jbpm-flow:7.73.0.Final'
implementation(".jbpm:jbpm-bpmn2:7.73.0.Final")
implementation(".drools:drools-compiler:7.73.0.Final")
implementation '.jbpm:jbpm-flow-builder:7.73.0.Final'
implementation '.kie:kie-spring:7.73.0.Final'
Sample Code:
BpmnProcess process = bpmnProcessRepository.findByProcessId(processId);
if (process != null) {
String bpmnProcess = StringEscapeUtils.unescapeCsv(process.getBpmnXml());
BPMN2ProcessProvider provider = BPMN2ProcessFactory.getBPMN2ProcessProvider();
if (provider == null) {
throw new IllegalStateException("BPMN2ProcessProvider is not initialized. Ensure jbpm-flow-builder is on the classpath.");
} else {
System.out.println("BPMN2ProcessProvider is properly initialized.");
}
KieServices kieServices = KieServices.Factory.get();
String groupId = "com.example.kie";
String artifactId = "dynamic-process";
String version = "1.0.0";
ReleaseId releaseId = kieServices.newReleaseId(groupId, artifactId, version);
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
kieFileSystem.write("src/main/resources/process.bpmn", bpmnProcess);
kieServices.newKieBuilder(kieFileSystem).buildAll();
kieContainer = kieServices.newKieContainer(releaseId);
}
Problem is: BPMN2ProcessProvider is always initialized as null and I couldn't find any clear documentation about it. Please share any working sample to use dynamic BPMN formats with JBPM
Error log:
2025-03-24T12:21:26.365+05:30 ERROR 22008 --- [workflow-engine-core] [nio-8080-exec-1] o.k.a.i.utils.ServiceDiscoveryImpl : Loading failed because Cannot create instance of class: .jbpm.bpmn2.BPMN2ProcessProviderImpl
2025-03-24T12:21:36.310+05:30 ERROR 22008 --- [workflow-engine-core] [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed: java.lang.ExceptionInInitializerError] with root cause
java.lang.ClassNotFoundException: java.lang.Compiler
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:528) ~[na:na]
at .mvel2piler.AbstractParser.setupParser(AbstractParser.java:215) ~[mvel2-2.4.14.Final.jar:na]
at .mvel2piler.AbstractParser.<clinit>(AbstractParser.java:153) ~[mvel2-2.4.14.Final.jar:na]
at .mvel2.MVELpileExpression(MVEL.java:831) ~[mvel2-2.4.14.Final.jar:na]
at .mvel2.templates.res.CompiledDeclareNode.<init>(CompiledDeclareNode.java:42) ~[mvel2-2.4.14.Final.jar:na]
at .mvel2.templates.TemplateCompilerpileFrom(TemplateCompiler.java:185) ~[mvel2-2.4.14.Final.jar:na]
at .mvel2.templates.TemplateCompilerpile(TemplateCompiler.java:82) ~[mvel2-2.4.14.Final.jar:na]
at .mvel2.templates.TemplateCompilerpileTemplate(TemplateCompiler.java:414) ~[mvel2-2.4.14.Final.jar:na]
at .mvel2.templates.TemplateCompilerpileTemplate(TemplateCompiler.java:405) ~[mvel2-2.4.14.Final.jar:na]
at .mvel2.templates.TemplateCompilerpileTemplate(TemplateCompiler.java:401) ~[mvel2-2.4.14.Final.jar:na]
at .jbpm.process.builder.dialect.java.AbstractJavaProcessBuilder.<clinit>(AbstractJavaProcessBuilder.java:46) ~[jbpm-flow-builder-7.73.0.Final.jar:7.73.0.Final]
at .jbpm.process.builder.dialect.java.JavaProcessDialect.<clinit>(JavaProcessDialect.java:38) ~[jbpm-flow-builder-7.73.0.Final.jar:7.73.0.Final]
at .jbpm.process.builder.dialect.ProcessDialectRegistry.<clinit>(ProcessDialectRegistry.java:35) ~[jbpm-flow-builder-7.73.0.Final.jar:7.73.0.Final]
at .jbpm.bpmn2.BPMN2ProcessProviderImpl.<clinit>(BPMN2ProcessProviderImpl.java:32) ~[jbpm-bpmn2-7.73.0.Final.jar:7.73.0.Final]
at java.base/java.lang.Class.forName0(Native Method) ~[na:na]
at java.base/java.lang.Class.forName(Class.java:578) ~[na:na]
at java.base/java.lang.Class.forName(Class.java:557) ~[na:na]
at .kie.api.internal.utils.ServiceDiscoveryImpl.newInstance(ServiceDiscoveryImpl.java:162) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at .kie.api.internal.utils.ServiceDiscoveryImpl.processKieService(ServiceDiscoveryImpl.java:146) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at .kie.api.internal.utils.ServiceDiscoveryImpl.registerConfs(ServiceDiscoveryImpl.java:123) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at .kie.api.internal.utils.ServiceDiscoveryImpl.lambda$getServices$1(ServiceDiscoveryImpl.java:105) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at java.base/java.util.Optional.ifPresent(Optional.java:178) ~[na:na]
at .kie.api.internal.utils.ServiceDiscoveryImpl.getServices(ServiceDiscoveryImpl.java:103) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at .kie.api.internal.utils.ServiceRegistry$Impl.<init>(ServiceRegistry.java:62) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at .drools.dynamic.DynamicServiceRegistrySupplier$LazyHolder.<clinit>(DynamicServiceRegistrySupplier.java:27) ~[drools-core-dynamic-7.73.0.Final.jar:7.73.0.Final]
at .drools.dynamic.DynamicServiceRegistrySupplier.get(DynamicServiceRegistrySupplier.java:32) ~[drools-core-dynamic-7.73.0.Final.jar:7.73.0.Final]
at .drools.dynamic.DynamicServiceRegistrySupplier.get(DynamicServiceRegistrySupplier.java:23) ~[drools-core-dynamic-7.73.0.Final.jar:7.73.0.Final]
at .kie.api.internal.utils.ServiceRegistry$Impl.getServiceRegistry(ServiceRegistry.java:90) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at .kie.api.internal.utils.ServiceRegistry$ServiceRegistryHolder.<clinit>(ServiceRegistry.java:49) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at .kie.api.internal.utils.ServiceRegistry.getInstance(ServiceRegistry.java:41) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at .kie.api.internal.utils.ServiceRegistry.getService(ServiceRegistry.java:37) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at .droolspilerpiler.BPMN2ProcessFactory$LazyHolder.<clinit>(BPMN2ProcessFactory.java:25) ~[drools-compiler-7.73.0.Final.jar:7.73.0.Final]
at .droolspilerpiler.BPMN2ProcessFactory.getBPMN2ProcessProvider(BPMN2ProcessFactory.java:33) ~[drools-compiler-7.73.0.Final.jar:7.73.0.Final]
at com.ram.m.suite.workflow_engine.kie.Kie.kieBase(Kie.java:61) ~[main/:na]
at com.ram.m.suite.workflow_engine.controller.BpmnProcessController.deployProcess(BpmnProcessController.java:54) ~[main/:na]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
at .springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:257) ~[spring-web-6.2.2.jar:6.2.2]
at .springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:190) ~[spring-web-6.2.2.jar:6.2.2]
at .springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.2.2.jar:6.2.2]
at .springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) ~[spring-webmvc-6.2.2.jar:6.2.2]
at .springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) ~[spring-webmvc-6.2.2.jar:6.2.2]
at .springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.2.2.jar:6.2.2]
at .springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1088) ~[spring-webmvc-6.2.2.jar:6.2.2]
at .springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:978) ~[spring-webmvc-6.2.2.jar:6.2.2]
at .springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.2.2.jar:6.2.2]
at .springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) ~[spring-webmvc-6.2.2.jar:6.2.2]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) ~[tomcat-embed-core-10.1.34.jar:6.0]
at .springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.2.2.jar:6.2.2]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.34.jar:6.0]
at .apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.34.jar:10.1.34]
at .apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.2.2.jar:6.2.2]
at .springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.2.jar:6.2.2]
at .apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.2.2.jar:6.2.2]
at .springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.2.jar:6.2.2]
at .apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.2.2.jar:6.2.2]
at .springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.2.jar:6.2.2]
at .apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.coyote.http11.Http11Processor.service(Http11Processor.java:397) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.tomcat.util.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.tomcat.util.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at java.base/java.lang.Thread.run(Thread.java:1575) ~[na:na]
I am trying to create a generic code to initialize a Kie container per BPMN business process.
I have stored the process in DB as XML. Need to enable the deploy functionality of BPMN to Kie container to execute that specific business process instances.
I am using Spring Boot 3.2.x and Gradle with Java 21. Here are the settings:
Gradle Dependencies:
implementation '.kie:kie-api:7.73.0.Final'
implementation '.kie:kie-dmn-api:7.73.0.Final'
implementation '.drools:drools-core:7.73.0.Final'
implementation '.jbpm:jbpm-flow:7.73.0.Final'
implementation(".jbpm:jbpm-bpmn2:7.73.0.Final")
implementation(".drools:drools-compiler:7.73.0.Final")
implementation '.jbpm:jbpm-flow-builder:7.73.0.Final'
implementation '.kie:kie-spring:7.73.0.Final'
Sample Code:
BpmnProcess process = bpmnProcessRepository.findByProcessId(processId);
if (process != null) {
String bpmnProcess = StringEscapeUtils.unescapeCsv(process.getBpmnXml());
BPMN2ProcessProvider provider = BPMN2ProcessFactory.getBPMN2ProcessProvider();
if (provider == null) {
throw new IllegalStateException("BPMN2ProcessProvider is not initialized. Ensure jbpm-flow-builder is on the classpath.");
} else {
System.out.println("BPMN2ProcessProvider is properly initialized.");
}
KieServices kieServices = KieServices.Factory.get();
String groupId = "com.example.kie";
String artifactId = "dynamic-process";
String version = "1.0.0";
ReleaseId releaseId = kieServices.newReleaseId(groupId, artifactId, version);
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
kieFileSystem.write("src/main/resources/process.bpmn", bpmnProcess);
kieServices.newKieBuilder(kieFileSystem).buildAll();
kieContainer = kieServices.newKieContainer(releaseId);
}
Problem is: BPMN2ProcessProvider is always initialized as null and I couldn't find any clear documentation about it. Please share any working sample to use dynamic BPMN formats with JBPM
Error log:
2025-03-24T12:21:26.365+05:30 ERROR 22008 --- [workflow-engine-core] [nio-8080-exec-1] o.k.a.i.utils.ServiceDiscoveryImpl : Loading failed because Cannot create instance of class: .jbpm.bpmn2.BPMN2ProcessProviderImpl
2025-03-24T12:21:36.310+05:30 ERROR 22008 --- [workflow-engine-core] [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed: java.lang.ExceptionInInitializerError] with root cause
java.lang.ClassNotFoundException: java.lang.Compiler
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:528) ~[na:na]
at .mvel2piler.AbstractParser.setupParser(AbstractParser.java:215) ~[mvel2-2.4.14.Final.jar:na]
at .mvel2piler.AbstractParser.<clinit>(AbstractParser.java:153) ~[mvel2-2.4.14.Final.jar:na]
at .mvel2.MVELpileExpression(MVEL.java:831) ~[mvel2-2.4.14.Final.jar:na]
at .mvel2.templates.res.CompiledDeclareNode.<init>(CompiledDeclareNode.java:42) ~[mvel2-2.4.14.Final.jar:na]
at .mvel2.templates.TemplateCompilerpileFrom(TemplateCompiler.java:185) ~[mvel2-2.4.14.Final.jar:na]
at .mvel2.templates.TemplateCompilerpile(TemplateCompiler.java:82) ~[mvel2-2.4.14.Final.jar:na]
at .mvel2.templates.TemplateCompilerpileTemplate(TemplateCompiler.java:414) ~[mvel2-2.4.14.Final.jar:na]
at .mvel2.templates.TemplateCompilerpileTemplate(TemplateCompiler.java:405) ~[mvel2-2.4.14.Final.jar:na]
at .mvel2.templates.TemplateCompilerpileTemplate(TemplateCompiler.java:401) ~[mvel2-2.4.14.Final.jar:na]
at .jbpm.process.builder.dialect.java.AbstractJavaProcessBuilder.<clinit>(AbstractJavaProcessBuilder.java:46) ~[jbpm-flow-builder-7.73.0.Final.jar:7.73.0.Final]
at .jbpm.process.builder.dialect.java.JavaProcessDialect.<clinit>(JavaProcessDialect.java:38) ~[jbpm-flow-builder-7.73.0.Final.jar:7.73.0.Final]
at .jbpm.process.builder.dialect.ProcessDialectRegistry.<clinit>(ProcessDialectRegistry.java:35) ~[jbpm-flow-builder-7.73.0.Final.jar:7.73.0.Final]
at .jbpm.bpmn2.BPMN2ProcessProviderImpl.<clinit>(BPMN2ProcessProviderImpl.java:32) ~[jbpm-bpmn2-7.73.0.Final.jar:7.73.0.Final]
at java.base/java.lang.Class.forName0(Native Method) ~[na:na]
at java.base/java.lang.Class.forName(Class.java:578) ~[na:na]
at java.base/java.lang.Class.forName(Class.java:557) ~[na:na]
at .kie.api.internal.utils.ServiceDiscoveryImpl.newInstance(ServiceDiscoveryImpl.java:162) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at .kie.api.internal.utils.ServiceDiscoveryImpl.processKieService(ServiceDiscoveryImpl.java:146) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at .kie.api.internal.utils.ServiceDiscoveryImpl.registerConfs(ServiceDiscoveryImpl.java:123) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at .kie.api.internal.utils.ServiceDiscoveryImpl.lambda$getServices$1(ServiceDiscoveryImpl.java:105) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at java.base/java.util.Optional.ifPresent(Optional.java:178) ~[na:na]
at .kie.api.internal.utils.ServiceDiscoveryImpl.getServices(ServiceDiscoveryImpl.java:103) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at .kie.api.internal.utils.ServiceRegistry$Impl.<init>(ServiceRegistry.java:62) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at .drools.dynamic.DynamicServiceRegistrySupplier$LazyHolder.<clinit>(DynamicServiceRegistrySupplier.java:27) ~[drools-core-dynamic-7.73.0.Final.jar:7.73.0.Final]
at .drools.dynamic.DynamicServiceRegistrySupplier.get(DynamicServiceRegistrySupplier.java:32) ~[drools-core-dynamic-7.73.0.Final.jar:7.73.0.Final]
at .drools.dynamic.DynamicServiceRegistrySupplier.get(DynamicServiceRegistrySupplier.java:23) ~[drools-core-dynamic-7.73.0.Final.jar:7.73.0.Final]
at .kie.api.internal.utils.ServiceRegistry$Impl.getServiceRegistry(ServiceRegistry.java:90) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at .kie.api.internal.utils.ServiceRegistry$ServiceRegistryHolder.<clinit>(ServiceRegistry.java:49) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at .kie.api.internal.utils.ServiceRegistry.getInstance(ServiceRegistry.java:41) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at .kie.api.internal.utils.ServiceRegistry.getService(ServiceRegistry.java:37) ~[kie-api-7.73.0.Final.jar:7.73.0.Final]
at .droolspilerpiler.BPMN2ProcessFactory$LazyHolder.<clinit>(BPMN2ProcessFactory.java:25) ~[drools-compiler-7.73.0.Final.jar:7.73.0.Final]
at .droolspilerpiler.BPMN2ProcessFactory.getBPMN2ProcessProvider(BPMN2ProcessFactory.java:33) ~[drools-compiler-7.73.0.Final.jar:7.73.0.Final]
at com.ram.m.suite.workflow_engine.kie.Kie.kieBase(Kie.java:61) ~[main/:na]
at com.ram.m.suite.workflow_engine.controller.BpmnProcessController.deployProcess(BpmnProcessController.java:54) ~[main/:na]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
at .springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:257) ~[spring-web-6.2.2.jar:6.2.2]
at .springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:190) ~[spring-web-6.2.2.jar:6.2.2]
at .springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.2.2.jar:6.2.2]
at .springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) ~[spring-webmvc-6.2.2.jar:6.2.2]
at .springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) ~[spring-webmvc-6.2.2.jar:6.2.2]
at .springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.2.2.jar:6.2.2]
at .springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1088) ~[spring-webmvc-6.2.2.jar:6.2.2]
at .springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:978) ~[spring-webmvc-6.2.2.jar:6.2.2]
at .springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.2.2.jar:6.2.2]
at .springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) ~[spring-webmvc-6.2.2.jar:6.2.2]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) ~[tomcat-embed-core-10.1.34.jar:6.0]
at .springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.2.2.jar:6.2.2]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.34.jar:6.0]
at .apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.34.jar:10.1.34]
at .apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.2.2.jar:6.2.2]
at .springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.2.jar:6.2.2]
at .apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.2.2.jar:6.2.2]
at .springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.2.jar:6.2.2]
at .apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.2.2.jar:6.2.2]
at .springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.2.jar:6.2.2]
at .apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.coyote.http11.Http11Processor.service(Http11Processor.java:397) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.tomcat.util.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.tomcat.util.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at .apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at java.base/java.lang.Thread.run(Thread.java:1575) ~[na:na]
Share
Improve this question
edited Mar 24 at 7:49
Nitish Bhardwaj
asked Mar 24 at 6:31
Nitish BhardwajNitish Bhardwaj
1,19313 silver badges31 bronze badges
2 Answers
Reset to default 0The thing is that java.lang.Compiler
class was completely removed from JDK 21
. Also, it was deprecated in JDK 9
.
Workaround: Try with JDK 17
as Spring Boot 3.x supports JDK 17
version minimum. It still has the deprecated java.lang.Compiler
class.
Also, you are using Drools 7.x
version. I was reading this thread
. I guess you are not alone who is facing this issue with 7.73.0.Final
. Try the higher version of Drools to see if it works.
Link this enhancement story: https://bugs.openjdk./browse/JDK-8205129
See if this helps.
Since I can't comment yet, I'll add an answer, which might be helpful. I ran into "java.lang.Compiler" error too, but was using Maven. Wanted to build app with older Java version (Java 8) than my CI system runtime (Java 21) and had to wrap kie-maven-plugin execution into exec-maven-plugin with specific executable and arguments to get it working.