Drools 8 OSGi support

32 Views Asked by At

I understand from the Drools documentation that OSGi support has been dropped from Drools in version 8.

We've been using Drools for several years in our Apache Karaf application, but now it seems we cannot upgrade, as I've not been able to get version 8.44.0Final working.

Does anybody have any tips on how to get Drools 8 working in an OSGi-environment?

I tried Apache Aries SPI Fly to enable the ServiceLoader mechanism used in Drools, which seems to help.

But now I get the error below, allthough I did provision the drools-mvel bundle.

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)

1

There are 1 best solutions below

0
Steven Huypens On

For the record, this is how I got it working in the end. The Drools 7 feature

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

had to be replaced by

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