Drools 8 OSGi 支持

问题描述 投票:0回答:1

我从 Drools 文档了解到 OSGi 支持已从版本 8 中的 Drools 中删除。

我们已经在 Apache Karaf 应用程序中使用 Drools 好几年了,但现在看来我们无法升级,因为我无法让版本 8.44.0Final 正常工作。

有人对如何让 Drools 8 在 OSGi 环境中工作有任何建议吗?

我尝试了 Apache Aries SPI Fly 来启用 Drools 中使用的 ServiceLoader 机制,这似乎有帮助。

但是现在我得到了下面的错误,尽管我确实提供了 drools-mvel 包。

java.lang.RuntimeException: Unable to load Dialect 'mvel'. Please add drools-mvel among your dependencies
        at org.drools.compiler.rule.builder.PackageBuildContext.initContext(PackageBuildContext.java:99)
        at org.drools.compiler.rule.builder.RuleBuildContext.<init>(RuleBuildContext.java:83)
        at org.drools.compiler.builder.impl.processors.ImmutableRuleCompilationPhase.buildRuleBuilderContext(ImmutableRuleCompilationPhase.java:259)
        at org.drools.compiler.builder.impl.processors.ImmutableRuleCompilationPhase.compileRulesLevel(ImmutableRuleCompilationPhase.java:297)
        at org.drools.compiler.builder.impl.processors.ImmutableRuleCompilationPhase.process(ImmutableRuleCompilationPhase.java:82)
        at java.base/java.util.Arrays$ArrayList.forEach(Arrays.java:4204)
        at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.compileKnowledgePackages(KnowledgeBuilderImpl.java:461)
        at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.buildRules(KnowledgeBuilderImpl.java:1020)
        at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.doFirstBuildStep(KnowledgeBuilderImpl.java:994)
        at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:114)
        at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:104)
        at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:270)
        at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:216)
        at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:80)
        at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:282)
        at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:248)
        at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:195)

osgi drools mvel
1个回答
0
投票

郑重声明,这就是我最终让它发挥作用的方式。 Drools 7 功能

<feature name="csf-common-drools-modules-feature" version="${project.version}">
    <bundle>mvn:org.drools/drools-compiler/7.74.1.Final</bundle>
    <bundle>mvn:org.drools/drools-core/7.74.1.Final</bundle>
    <bundle>mvn:org.drools/drools-core-reflective/7.74.1.Final</bundle>
    <bundle>mvn:org.drools/drools-core-dynamic/7.74.1.Final</bundle>
    <bundle>mvn:org.drools/drools-mvel/7.74.1.Final</bundle>

    <bundle>mvn:org.kie/kie-api/7.74.1.Final</bundle>
    <bundle>mvn:org.kie/kie-internal/7.74.1.Final</bundle>
    <bundle>mvn:org.kie/kie-memory-compiler/7.74.1.Final</bundle>
    <bundle>mvn:org.kie.soup/kie-soup-maven-support/7.74.1.Final</bundle>
    <bundle>mvn:org.kie.soup/kie-soup-project-datamodel-api/7.74.1.Final</bundle>
    <bundle>mvn:org.kie.soup/kie-soup-project-datamodel-commons/7.74.1.Final</bundle>
    <bundle>mvn:org.kie.soup/kie-soup-commons/7.74.1.Final</bundle>
    <bundle>mvn:org.kie.soup/kie-soup-xstream/7.74.1.Final</bundle>

    <bundle>mvn:org.mvel/mvel2/2.4.14.Final</bundle>
    <bundle>mvn:com.thoughtworks.xstream/xstream/${csf.bom.xstream.version}</bundle>
</feature>

必须更换为

<feature name="drools-feature" version="${project.version}">
    <bundle start-level="20">mvn:org.apache.aries.spifly/org.apache.aries.spifly.dynamic.bundle/1.3.4</bundle>

    <!-- SPI Providers -->
    <bundle>wrap:mvn:org.drools/drools-compiler/8.44.0.Final$SPI-Provider=*&amp;DynamicImport-Package=*</bundle>
    <bundle>wrap:mvn:org.drools/drools-mvel/8.44.0.Final$SPI-Provider=*</bundle>
    <bundle>wrap:mvn:org.drools/drools-kiesession/8.44.0.Final$SPI-Provider=*</bundle>
    <bundle>wrap:mvn:org.drools/drools-wiring-dynamic/8.44.0.Final$SPI-Provider=*</bundle>
    <bundle>wrap:mvn:org.drools/drools-core/8.44.0.Final$SPI-Provider=*</bundle>

    <!-- SPI Consumer -->
    <bundle>wrap:mvn:org.kie/kie-api/8.44.0.Final$SPI-Consumer=*</bundle>

    <!-- All other required Drools bundles -->
    <bundle>wrap:mvn:org.drools/drools-base/8.44.0.Final</bundle>
    <bundle>wrap:mvn:org.drools/drools-util/8.44.0.Final</bundle>
    <bundle>wrap:mvn:org.drools/drools-io/8.44.0.Final</bundle>
    <bundle>wrap:mvn:org.drools/drools-drl-ast/8.44.0.Final</bundle>
    <bundle>wrap:mvn:org.drools/drools-drl-parser/8.44.0.Final</bundle>
    <bundle>wrap:mvn:org.drools/drools-wiring-api/8.44.0.Final</bundle>
    <bundle>wrap:mvn:org.kie/kie-internal/8.44.0.Final</bundle>
    <bundle>wrap:mvn:org.kie/kie-memory-compiler/8.44.0.Final</bundle>
    <bundle>wrap:mvn:org.kie/kie-util-maven-support/8.44.0.Final</bundle>

    <bundle>mvn:org.mvel/mvel2/2.5.2.Final</bundle>
</feature>
© www.soinside.com 2019 - 2024. All rights reserved.