jbpm 与 OSGi、Maven 等的集成

问题描述

我正在开发基于 Osgi (apache Felix) 和 maven 的微服务。 我正在学习jbpm。 我创建了一个决策表,我需要从我的 Osgi Java 项目中调用它。 下面是我在 bpmn 的 javadoc 中使用的代码,但似乎它不起作用,因为虽然我从 maven 导入了一堆依赖项,但仍然有很多其他依赖项,例如

KNowledgeBaseConfiguration
ResourceFactoryService
ResourceFactoryService
KNowledgeBase

保持悬而未决。

<drools.version>7.0.0.Final</drools.version>
  
  <dependency>
    <groupId>org.jbpm</groupId>
    <artifactId>jbpm-bpmn2</artifactId>
    <version>${drools.version}</version>
  </dependency><!-- https://mvnrepository.com/artifact/org.drools/drools-core -->
  <dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-core</artifactId>
    <version>${drools.version}</version>
  </dependency><!-- https://mvnrepository.com/artifact/org.drools/drools-osgi-integration --><!-- https://mvnrepository.com/artifact/org.drools/drools-decisiontables -->
  <dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-decisiontables</artifactId>
    <version>${drools.version}</version>
  </dependency><!-- https://mvnrepository.com/artifact/org.drools/drools-api -->
  <dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-compiler</artifactId>
    <version>${drools.version}</version>
  </dependency>
  <dependency>
    <groupId>org.kie</groupId>
    <artifactId>kie-api</artifactId>
    <version>${drools.version}</version>
  </dependency>

这是我在jbpm的文档中与Osgi集成部分找到的逻辑

    ServiceReference serviceRef = bundleContext.getServiceReference( ServiceRegistry.class.getName() );
    ServiceRegistry registry = (ServiceRegistry) bundleContext.getService( serviceRef );

    KNowledgeBuilderFactoryService kNowledgeBuilderFactoryService = registry.get( KNowledgeBuilderFactoryService.class );
    KNowledgeBaseFactoryService kNowledgeBaseFactoryService = registry.get( KNowledgeBaseFactoryService.class );
    ResourceFactoryService resourceFactoryService = registry.get( ResourceFactoryService.class );

    KNowledgeBaseConfiguration kbaseConf = kNowledgeBaseFactoryService.newKNowledgeBaseConfiguration( null,getClass().getClassLoader() );

    KNowledgeBuilderConfiguration kbConf = kNowledgeBuilderFactoryService.newKNowledgeBuilderConfiguration( null,getClass().getClassLoader() );
    KNowledgeBuilder kbuilder = kNowledgeBuilderFactoryService.newKNowledgeBuilder( kbConf );
    kbuilder.add( resourceFactoryService.newClassPathResource( "MyProcess.bpmn",Dummy.class ),ResourceType.BPMN2 );

    kbaseConf = kNowledgeBaseFactoryService.newKNowledgeBaseConfiguration( null,getClass().getClassLoader() );
    KNowledgeBase kbase = kNowledgeBaseFactoryService.newKNowledgeBase( kbaseConf );
    kbase.addKNowledgePackages( kbuilder.getKNowledgePackages() );

    StatefulKNowledgeSession ksession = kbase.newStatefulKNowledgeSession();
    return Optional.empty();

我的问题是:

  1. 如何集成 jbpm 和 Osgi java 来调用和执行 bpmn 或决策表?
  2. 为什么这些依赖关系没有解决?我也尝试了最新的 7.46.0.FINAL 版本的 drools?

解决方法

对于问题 1,您需要来自组 org.kie.server 的 kie-server-client。

您可能使用的其他依赖项是 apis(问题 2)中的定义:来自 org.jbpm 组的 jbpm-kie-services 和来自 org.kie 组的 kie-api、kie-internal。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...