admin管理员组

文章数量:1401626

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
Add a comment  | 

2 Answers 2

Reset to default 0

The 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.

本文标签: Spring Boot 32xDrools 773JDK 21 javalangClassNotFoundException javalangCompilerStack Overflow