[rules-dev] [rules-users] Need Camel + drools (OSGI) integration help

Mark Proctor mproctor at codehaus.org
Fri Feb 10 14:44:41 EST 2012


On 10/02/2012 19:41, Alexander Filipchik wrote:
> Hello!
Can you submit a pull request over at github? Don't forget to update the 
docs too, so they remain up to date.

Mark
>
> I finally managed to get it working, but it required some changes in 
> the existent stuff...
> Here is a diff:
>
> git://github.com/droolsjbpm/drools.git 
> <http://github.com/droolsjbpm/drools.git>
> diff --git a/drools-compiler/pom.xml b/drools-compiler/pom.xml
> index 708a5b2..4b1dc98 100644
> --- a/drools-compiler/pom.xml
> +++ b/drools-compiler/pom.xml
> @@ -244,7 +244,7 @@
> <_removeheaders>Ignore-Package</_removeheaders>
> <Bundle-SymbolicName>org.drools.compiler;singleton:=true</Bundle-SymbolicName>
> <Require-Bundle>org.drools.core;visibility:=reexport;bundle-version="${drools.osgi.version}"</Require-Bundle>
> - <Import-Package>!org.drools.*,
> + <Import-Package>org.antlr.*;version="3.4",!org.drools.*,
> <!-- java compilers are optional: only need one at most -->
>               
>  org.codehaus.janino.*;resolution:=optional,org.eclipse.jdt.*;resolution:=optional,
>                *</Import-Package>
>
> git://github.com/droolsjbpm/droolsjbpm-integration.git 
> <http://github.com/droolsjbpm/droolsjbpm-integration.git>
> diff --git a/drools-camel/pom.xml b/drools-camel/pom.xml
> index a5a6b3d..273bfaa 100644
> --- a/drools-camel/pom.xml
> +++ b/drools-camel/pom.xml
> @@ -23,7 +23,7 @@
> <dependency>
> <groupId>org.drools</groupId>
> <artifactId>knowledge-internal-api</artifactId>
> - </dependency>
> + </dependency>
> <dependency>
> <groupId>org.drools</groupId>
> <artifactId>drools-core</artifactId>
> @@ -186,5 +186,44 @@
> <scope>provided</scope>
> </dependency>
> </dependencies>
> -
> + <build>
> + <plugins>
> + <plugin>
> + <artifactId>maven-jar-plugin</artifactId>
> + <configuration>
> + <archive>
> + <manifestFile>META-INF/MANIFEST.MF</manifestFile>
> + </archive>
> + </configuration>
> + </plugin>
> + <plugin>
> + <groupId>org.apache.felix</groupId>
> + <artifactId>maven-bundle-plugin</artifactId>
> + <extensions>true</extensions>
> + <executions>
> + <execution>
> + <id>manifest</id>
> + <phase>process-classes</phase>
> + <goals>
> + <goal>manifest</goal>
> + </goals>
> + </execution>
> + </executions>
> + <configuration>
> + <manifestLocation>META-INF</manifestLocation>
> + <instructions>
> + 
> <Bundle-SymbolicName>org.drools.camel;singleton:=true</Bundle-SymbolicName>
> + <_removeheaders>Ignore-Package</_removeheaders>
> + <Require-Bundle>
> +              org.drools.core;bundle-version="${drools.osgi.version}",
> +              org.drools.spring;bundle-version="${drools.osgi.version}"
> + </Require-Bundle>
> + <Import-Package>!org.drools.*, *</Import-Package>
> + <Export-Package>!org.drools.grid, org.drools.camel.*, 
> org.drools.camel.jax</Export-Package>
> + <DynamicImport-Package>org.drools.*</DynamicImport-Package>
> + </instructions>
> + </configuration>
> + </plugin>
> + </plugins>
> + </build>
> </project>
> diff --git a/drools-container/drools-spring/pom.xml 
> b/drools-container/drools-spring/pom.xml
> index b6be52c..f83a457 100644
> --- a/drools-container/drools-spring/pom.xml
> +++ b/drools-container/drools-spring/pom.xml
> @@ -126,7 +126,45 @@
> <groupId>org.antlr</groupId>
> <artifactId>antlr-runtime</artifactId>
> <scope>test</scope>
> - </dependency>
> + </dependency>
> </dependencies>
> -
> + <build>
> + <plugins>
> + <plugin>
> + <artifactId>maven-jar-plugin</artifactId>
> + <configuration>
> + <archive>
> + <manifestFile>META-INF/MANIFEST.MF</manifestFile>
> + </archive>
> + </configuration>
> + </plugin>
> + <plugin>
> + <groupId>org.apache.felix</groupId>
> + <artifactId>maven-bundle-plugin</artifactId>
> + <extensions>true</extensions>
> + <executions>
> + <execution>
> + <id>manifest</id>
> + <phase>process-classes</phase>
> + <goals>
> + <goal>manifest</goal>
> + </goals>
> + </execution>
> + </executions>
> + <configuration>
> + <manifestLocation>META-INF</manifestLocation>
> + <instructions>
> + 
> <Bundle-SymbolicName>org.drools.spring;singleton:=true</Bundle-SymbolicName>
> + <_removeheaders>Ignore-Package</_removeheaders>
> + 
> <Require-Bundle>org.drools.core;bundle-version="${drools.osgi.version}"</Require-Bundle>
> + <Import-Package>!org.drools.*, *</Import-Package>
> + <Export-Package>
> +             
>  org.drools.grid,org.drools.grid.impl,org.drools.container.spring
> + </Export-Package>
> + <DynamicImport-Package>org.drools.*</DynamicImport-Package>
> + </instructions>
> + </configuration>
> + </plugin>
> + </plugins>
> + </build>
> </project>
>
> Alex
>
> On Tue, Feb 7, 2012 at 6:01 PM, Alexander Filipchik 
> <afilipchik at gmail.com <mailto:afilipchik at gmail.com>> wrote:
>
>     Thank you! But didn't help.
>     Actually I see some weird behavior. I decided to try referring
>     drools-core using Require-Bundle from my bundle, so I added
>     <Bundle-SymbolicName>org.drools.core</Bundle-SymbolicName> to a
>     drools-core package, recompiled it and got
>     NullPointerException (still without stacktrace) when I tried to
>     deploy new core bundle to a karaf container.
>
>     I was able to deploy it after I removed Bundle-SymbolicName and
>     recompiled again.
>
>     Thanks,
>     Alex
>
>     On Tue, Feb 7, 2012 at 4:42 PM, Mauricio Salatino
>     <salaboy at gmail.com <mailto:salaboy at gmail.com>> wrote:
>
>         I've already answer a similar question here.. try including
>         inside the
>         application that is using the bundles the file called:
>         drools.packagebuilder.conf
>
>         which contains:
>         drools.dialect.default = java
>         drools.dialect.java =
>         org.drools.rule.builder.dialect.java.JavaDialectConfiguration
>         drools.dialect.java.compiler = ECLIPSE
>
>         drools.dialect.mvel =
>         org.drools.rule.builder.dialect.mvel.MVELDialectConfiguration
>         drools.dialect.mvel.strict = true
>         drools.dialect.mvel.langLevel = 4
>
>         drools.accumulate.function.average =
>         org.drools.base.accumulators.AverageAccumulateFunction
>         drools.accumulate.function.max =
>         org.drools.base.accumulators.MaxAccumulateFunction
>         drools.accumulate.function.min =
>         org.drools.base.accumulators.MinAccumulateFunction
>         drools.accumulate.function.count =
>         org.drools.base.accumulators.CountAccumulateFunction
>         drools.accumulate.function.sum =
>         org.drools.base.accumulators.SumAccumulateFunction
>         drools.accumulate.function.collectList =
>         org.drools.base.accumulators.CollectListAccumulateFunction
>         drools.accumulate.function.collectSet =
>         org.drools.base.accumulators.CollectSetAccumulateFunction
>
>         drools.evaluator.coincides =
>         org.drools.base.evaluators.CoincidesEvaluatorDefinition
>         drools.evaluator.before =
>         org.drools.base.evaluators.BeforeEvaluatorDefinition
>         drools.evaluator.after =
>         org.drools.base.evaluators.AfterEvaluatorDefinition
>         drools.evaluator.meets =
>         org.drools.base.evaluators.MeetsEvaluatorDefinition
>         drools.evaluator.metby =
>         org.drools.base.evaluators.MetByEvaluatorDefinition
>         drools.evaluator.overlaps =
>         org.drools.base.evaluators.OverlapsEvaluatorDefinition
>         drools.evaluator.overlappedby =
>         org.drools.base.evaluators.OverlappedByEvaluatorDefinition
>         drools.evaluator.during =
>         org.drools.base.evaluators.DuringEvaluatorDefinition
>         drools.evaluator.includes =
>         org.drools.base.evaluators.IncludesEvaluatorDefinition
>         drools.evaluator.starts =
>         org.drools.base.evaluators.StartsEvaluatorDefinition
>         drools.evaluator.startedby =
>         org.drools.base.evaluators.StartedByEvaluatorDefinition
>         drools.evaluator.finishes =
>         org.drools.base.evaluators.FinishesEvaluatorDefinition
>         drools.evaluator.finishedby =
>         org.drools.base.evaluators.FinishedByEvaluatorDefinition
>         drools.evaluator.equality =
>         org.drools.base.evaluators.EqualityEvaluatorsDefinition
>         drools.evaluator.comparable =
>         org.drools.base.evaluators.ComparableEvaluatorsDefinition
>         drools.evaluator.set =
>         org.drools.base.evaluators.SetEvaluatorsDefinition
>         drools.evaluator.matches =
>         org.drools.base.evaluators.MatchesEvaluatorsDefinition
>         drools.evaluator.soundslike =
>         org.drools.base.evaluators.SoundslikeEvaluatorsDefinition
>
>         Cheers
>
>
>         On Tue, Feb 7, 2012 at 9:03 PM, Alexander Filipchik
>         <afilipchik at gmail.com <mailto:afilipchik at gmail.com>> wrote:
>         > It's not an obvious how to OSGI-fy something :)
>         >
>         > I did some homework - now I have OSGi-ified versions of
>         drools-spring and
>         > drools-camel.
>         > Also I created own bundle and tried to import
>         KnowledgeBaseFactoryService,
>         > ServiceRegistry and KnowledgeBaseFactoryService as described in
>         > http://docs.jboss.org/jbpm/v5.2/userguide/ch18.html#d0e4308.
>         > All what I got - NullPointerException from karaf core
>         (haven't gotten full
>         > staketrace yet. For some reason it is just:
>         > 15:11:34,484 | INFO  | l Console Thread | Console          
>                        |
>         > ?                                   ? | 34 -
>         org.apache.karaf.shell.console
>         > - 2.2.2.fuse-02-13 | Exception caught while executing command
>         > java.lang.NullPointerException
>         > )
>         >
>         > So, I spent some time randomly adding and removing
>         configuration params and
>         > I found - NPE occurs when I'm trying to import
>         > org.drools.KnowledgeBaseFactoryService.
>         > I guess (i'm not OSGI expert) it could be because org.drools
>         package is
>         > exported in 2! bundles. It is in drools-core and
>         knowledge-api bundles. And
>         > I guess, karaf container just can't link my bundle with both
>         core and api,
>         > only first bundle which contains requested package
>         (org.drools) wins.
>         >
>         > Any ideas on how to make it work?
>         > I actually have one - every bundle should export own
>         package. For
>         > knowledge-api it should be org.drools.api,
>         and org.drools.core for
>         > drools-core.
>         >
>         > Here is full log of similar packages:
>         > WARNING: multiple bundles are exporting package
>         org.drools.command
>         > - org.drools.core [218]
>         > - org.drools.api [216]
>         > - org.drools.internalapi [217]
>         >
>         > WARNING: multiple bundles are exporting package
>         org.drools.runtime.process
>         > - org.drools.core [218]
>         > - org.drools.api [216]
>         >
>         > WARNING: multiple bundles are exporting package org.drools.time
>         > - org.drools.core [218]
>         > - org.drools.api [216]
>         >
>         > WARNING: multiple bundles are exporting package
>         > org.apache.geronimo.transaction
>         > - org.apache.aries.transaction.manager [123]
>         > - org.apache.aries.transaction.manager [51]
>         >
>         > WARNING: multiple bundles are exporting package org.drools
>         > - org.drools.core [218]
>         > - org.drools.api [216]
>         >
>         > WARNING: multiple bundles are exporting package
>         > org.apache.geronimo.transaction.manager
>         > - org.apache.aries.transaction.manager [123]
>         > - org.apache.aries.transaction.manager [51]
>         >
>         > WARNING: multiple bundles are exporting package org.drools.grid
>         > - org.drools.core [218]
>         > - org.drools.spring [220]
>         >
>         > WARNING: multiple bundles are exporting package jline
>         > - org.apache.servicemix.bundles.jruby [210]
>         > - org.apache.karaf.shell.console [34]
>         >
>         > WARNING: multiple bundles are exporting package
>         > org.apache.geronimo.transaction.log
>         > - org.apache.aries.transaction.manager [123]
>         > - org.apache.aries.transaction.manager [51]
>         >
>         > WARNING: multiple bundles are exporting package
>         org.drools.management
>         > - org.drools.core [218]
>         > - org.drools.api [216]
>         >
>         > WARNING: multiple bundles are exporting package org.drools.agent
>         > - org.drools.core [218]
>         > - org.drools.api [216]
>         >
>         > WARNING: multiple bundles are exporting package org.drools.event
>         > - org.drools.core [218]
>         > - org.drools.api [216]
>         >
>         > 2012/2/3 Mark Proctor <mproctor at codehaus.org
>         <mailto:mproctor at codehaus.org>>
>         >>
>         >> neither spring or camel have been OSGi-ified. only api,
>         core, compiler,
>         >> templates, decision-tables and flow have.
>         >>
>         >> If someone wants to OSGi-ify those and contribute back they
>         are very
>         >> welcome:
>         >> 1) update the pom.xml to use the osgi bundle plugin, see
>         other existing
>         >> poms.
>         >>
>         >>
>         https://github.com/droolsjbpm/drools/blob/master/drools-decisiontables/pom.xml
>         >> 2) create an Activator to register the module, again see
>         Activator's for
>         >> core, compiler etc.
>         >>
>         >>
>         https://github.com/droolsjbpm/drools/blob/master/drools-decisiontables/src/main/java/org/drools/osgi/decisiontables/Activator.java
>         >> 3) update the osgi bundle's pom with new dependencies, make
>         sure to pull
>         >> in the spring ones, unless the actual project provides osgi
>         ready jars.
>         >>
>         >>
>         https://github.com/droolsjbpm/droolsjbpm-build-distribution/tree/master/drools-osgi-bundles
>         >> 4) Update the boot-bundles.properties so that Spring DM
>         loads the OSGi
>         >> dependencies
>         >>
>         >>
>         https://github.com/droolsjbpm/droolsjbpm-build-distribution/blob/master/drools-osgi-bundles/org.drools.osgi.test/src/test/filtered-resources/boot-bundles.properties
>         >> 5) write unit tests for spring and camel.
>         >>
>         >> Mark
>         >> On 03/02/2012 03:47, Alexander Filipchik wrote:
>         >>
>         >> Hello all!
>         >>
>         >> Don't know if it is right list to ask, but I'm trying to
>         make drools +
>         >> camel running on Fuse (ServiceMix container).
>         >> I couldn't even install OSGI drools artifacts for 5.3.1
>         version (because
>         >> of weird dependency on drools.core Snapshot),
>         >> but did it with v5.2.1. I used:
>         >>
>         >> mvel2/2.1.0,
>         >>
>         org.drools/drools-core/5.2.1.Final, org.drools/drools-compiler/5.2.1.Final,
>         >> org.drools/knowledge-api/5.2.1.Final
>         >> and org.drools/drools-camel/5.2.1.Final.
>         >>
>         >> All are installed and active. Part of log:
>         >>
>         >> [ 162] [Active     ] [            ] [       ] [   60]
>         Drools :: Compiler
>         >> (5.2.1.Final)
>         >>
>         >> [ 163] [Active     ] [            ] [       ] [   60] mvel2
>         >> (2.1.0.drools4)
>         >>
>         >> [ 164] [Active     ] [            ] [       ] [   60]
>         Drools :: Core
>         >> (5.2.1.Final)
>         >>
>         >> [ 165] [Active     ] [            ] [       ] [   60]
>         Knowledge API
>         >> (5.2.1.Final)
>         >>
>         >> [ 172] [Active     ] [            ] [       ] [   60]
>         >> mvn:org.drools/drools-camel/5.2.1.Final
>         >>
>         >> Then I tried to add my own camel-drools router (I created
>         OSGI bundle for
>         >> it). It depends on:
>         >>
>         >> Import-Package:
>         >>
>         org.apache.activemq,org.apache.activemq.camel.component,org.apache.activemq.pool,org.apache.camel;version="[2.8,3)",org.apache.camel.builder;version="[2.8,3)",org.apache.camel.component.jms;version="[2.8,3)",org.apache.camel.model;version="[2.8,3)",org.drools.camel.component,org.osgi.service.blueprint;version="[1.0.0,2.0.0)",org.springframework.transaction;version="[3,4)"
>         >>
>         >> It tried to install it to a container but all I got -
>         >>
>         >> Error executing command: Unresolved constraint in bundle
>         >> com.betfair.drools [170]: Unable to resolve 170.0: missing
>         requirement
>         >> [170.0] package; (package=org.drools.camel.component)
>         >>
>         >> I even tried to put drools-camel.jar
>         with org.drools.camel.component in a
>         >> lib folder and add package to
>         org.osgi.framework.system.packages.extra, but
>         >> got same result.
>         >>
>         >> Do you have any idea, blog posts, samples which could help me?
>         >> I'm completely stuck.
>         >>
>         >> Thanks,
>         >> Alex
>         >>
>         >>
>         >> _______________________________________________
>         >> rules-users mailing list
>         >> rules-users at lists.jboss.org
>         <mailto:rules-users at lists.jboss.org>
>         >> https://lists.jboss.org/mailman/listinfo/rules-users
>         >>
>         >>
>         >>
>         >> _______________________________________________
>         >> rules-users mailing list
>         >> rules-users at lists.jboss.org
>         <mailto:rules-users at lists.jboss.org>
>         >> https://lists.jboss.org/mailman/listinfo/rules-users
>         >>
>         >
>         >
>         > _______________________________________________
>         > rules-dev mailing list
>         > rules-dev at lists.jboss.org <mailto:rules-dev at lists.jboss.org>
>         > https://lists.jboss.org/mailman/listinfo/rules-dev
>         >
>
>
>
>         --
>          - CTO @ http://www.plugtree.com
>          - MyJourney @ http://salaboy.wordpress.com
>          - Co-Founder @ http://www.jugargentina.org
>          - Co-Founder @ http://www.jbug.com.ar
>
>          - Salatino "Salaboy" Mauricio -
>
>         _______________________________________________
>         rules-users mailing list
>         rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
>         https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20120210/5a99e0a7/attachment-0001.html 


More information about the rules-dev mailing list