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

Alexander Filipchik afilipchik at gmail.com
Fri Feb 10 14:41:34 EST 2012


Hello!

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
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
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>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>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> 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>
>> >>
>> >> 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
>> >> 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
>> >>
>> >
>> >
>> > _______________________________________________
>> > rules-dev mailing list
>> > 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
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20120210/d14638ab/attachment.html 


More information about the rules-users mailing list