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

Alexander Filipchik afilipchik at gmail.com
Thu Feb 16 13:36:37 EST 2012


Here the links:
Jira issue - https://issues.jboss.org/browse/JBRULES-3389
Pull requests - https://github.com/droolsjbpm/droolsjbpm-integration/pull/13
, https://github.com/droolsjbpm/droolsjbpm-build-distribution/pull/1,
https://github.com/droolsjbpm/drools/pull/99

Alex

On Wed, Feb 15, 2012 at 2:04 PM, Alexander Filipchik
<afilipchik at gmail.com>wrote:

> Hi,
>
> I created 3 pull requests. Here are repos:
>
>    - droolsjbpm / drools
>    - droolsjbpm / droolsjbpm-build-distribution
>    - droolsjbpm / droolsjbpm-integration
>
> Alex
>
> On Wed, Feb 15, 2012 at 11:02 AM, Mark Proctor <mproctor at codehaus.org>wrote:
>
>>  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>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
>>>  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
>>>>>
>>>>
>>>>
>>>
>>>
>>> _______________________________________________
>>> rules-users mailing listrules-users at lists.jboss.orghttps://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
>>>
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20120216/620fe987/attachment-0001.html 


More information about the rules-dev mailing list