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

Mark Proctor mproctor at codehaus.org
Wed Feb 15 14:02:34 EST 2012


On 15/02/2012 00:44, Alexander Filipchik wrote:
> Updated tests. Diff is attached.
saw your msg on irc, great news :)
>
> >> Don't forget to update the docs too, so they remain up to date.
> Where can I find the docs?
https://github.com/droolsjbpm/droolsjbpm-integration/tree/master/droolsjbpm-integration-docs/src/main/docbook/en-US/Chapter-OSGI
>
> Alex
>
> On Fri, Feb 10, 2012 at 11:44 AM, Mark Proctor <mproctor at codehaus.org 
> <mailto:mproctor at codehaus.org>> wrote:
>
>     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  <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
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20120215/603df1ec/attachment-0001.html 


More information about the rules-dev mailing list