【问题标题】:Integration of jbpm with OSGi, Maven, etcjbpm 与 OSGi、Maven 等的集成
【发布时间】:2021-03-29 13:10:55
【问题描述】:

我正在开发基于 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?

【问题讨论】:

    标签: java maven osgi jbpm dmn


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。 org.kie.server 是单独的服务器吗?我需要在我的微服务的 OSGi 容器中部署和调用决策表。我只需要决策表来从我的 java 程序中提供输入并从决策表中获取输出。对此问题的任何帮助表示赞赏。
    • 不,kie-server 不是单独的服务器。它是您执行在 kjar 中编译的 dmn、bpmn 和 drools 文件的服务器。决策表也是一种drool/dmn形式。您在 kie-server 上部署您的 kjar(带有决策表的 jar)以执行。你能接受适当的答案吗?谢谢(如果您找不到路,请联系我以获得更多帮助)
    • 谢谢。我的需要是 - 将我现有的 java OSGi 微服务放在 docker 上运行,我想在其中包含决策表,导入 maven 依赖项,我的 java 程序应该能够将输入传递给决策表并从中获取输出返回进入java。我不认为我希望将另一个 kjar 包含在我的微服务中。我需要所有东西都在同一个容器上运行。有可能吗?
    • 是的,这是可能的。不仅仅是使用启用 ISGi 的:docs.jboss.org/jbpm/release/7.46.0.Final/jbpm-docs/html_single/…
    • 谢谢。我了解 jBPM 与 OSGi 兼容。有没有我可以参考的示例,其中在现有容器中仅使用 jbpm 决策表并且不使用 kserver 执行服务器。我试图找到但没有运气,我看到一个 jbpm 项目是从头开始创建的,或者它在它自己的 kie 容器或服务器中运行。
    猜你喜欢
    • 2019-11-21
    • 2016-07-25
    • 2018-11-07
    • 2011-12-26
    • 2015-01-17
    • 2020-07-04
    • 2016-10-13
    • 2015-04-25
    • 2016-03-19
    相关资源
    最近更新 更多