[rules-users] Persistence in Drools 6
Charles Moulliard
ch007m at gmail.com
Wed May 28 02:42:13 EDT 2014
Hi Jean-Philippe,
To pickup new updates, then you should use KieScanner (part of kie-ci
project) which allows you to do incremental build if a new kjar has been
published/released. Here is an example :
https://github.com/droolsjbpm/drools/blob/master/kie-ci/src/test/java/org/kie/scanner/KieScannerIncrementalCompilationTest.java
Regards,
On Tue, May 27, 2014 at 7:38 PM, Steinmetz, Jean-Philippe <
jpsteinmetz at theworkshop.us.com> wrote:
> Hi Charles,
>
> Thanks for your reference. I had tried using kie-spring but was unable to
> use it as it currently does not support creating sessions from a release id
> and container. I did this in order to be able to pick up on updates to the
> kjar from maven while the application is running the same way it used to
> work in Drools 5. Has anyone else with similar needs to mine gotten
> persistence working?
>
> Jean-Philippe
>
>
> On Thu, May 22, 2014 at 11:23 PM, Charles Moulliard <ch007m at gmail.com>wrote:
>
>> Hi Jean Philippe,
>>
>> I have recently created a project to persist bpmn process using Spring &
>> JPA / Hibernate. This config is working using kie-spring
>>
>>
>> https://github.com/cmoulliard/droolsjbpm-osgi-examples/blob/master/spring-jbpm-persistence/src/main/resources/META-INF/spring/context.xml
>>
>> Regards,
>>
>> Charles
>>
>>
>> On Thu, May 22, 2014 at 8:00 PM, Steinmetz, Jean-Philippe <
>> jpsteinmetz at theworkshop.us.com> wrote:
>>
>>> Hello All,
>>>
>>> I am trying to set up persistence for a standalone Drools (6.0.1.Final)
>>> application that uses JPA, Hibernate (4.3.5.Final) and Bitronix (2.1.4) via
>>> Spring (4.0.3.RELEASE).
>>>
>>> On the persistence side everything appears to be set up correctly. For
>>> my Drools session I use a KieContainer to create a new stateful session
>>> using an environment set up with the EntityManagerFactory and
>>> TransactionManager set. The problem that I am experiencing however is that
>>> nothing is getting persisted to the database. I have poured over the docs
>>> at least two dozen times and searched the net for anything related.
>>>
>>> Here is what my Spring context file looks like when creating the Drools
>>> session...
>>>
>>> <bean id="kReleaseId" factory-bean="kieServices"
>>> factory-method="newReleaseId">
>>> <constructor-arg index="0" value="groupId"/>
>>> <constructor-arg index="1" value="artifactId"/>
>>> <constructor-arg index="2" value="1.0-SNAPSHOT"/>
>>> </bean>
>>> <bean id="kContainer" factory-bean="kieServices"
>>> factory-method="newKieContainer">
>>> <constructor-arg index="0" ref="kReleaseId"/>
>>> </bean>
>>> <bean id="kEnvironment" factory-bean="kieServices"
>>> factory-method="newEnvironment">
>>> <constructor-arg index="0">
>>> <map>
>>> <entry>
>>> <key><util:constant
>>> static-field="org.kie.api.runtime.EnvironmentName.ENTITY_MANAGER_FACTORY"/></key>
>>> <ref bean="entityManagerFactory"/>
>>> </entry>
>>> <entry>
>>> <key><util:constant
>>> static-field="org.kie.api.runtime.EnvironmentName.TRANSACTION_MANAGER"/></key>
>>> <ref bean="jtaTransactionManager"/>
>>> </entry>
>>> </map>
>>> </constructor-arg>
>>> </bean>
>>> <bean id="kSession" factory-bean="kContainer"
>>> factory-method="newKieSession">
>>> <constructor-arg index="0" ref="kEnvironment"/>
>>> </bean>
>>>
>>> Since the application is standalone I execute fireAllRules on the
>>> session at a regular interval (I use this instead of fireUntilHalt as it
>>> dramatically reduces the CPU load on the machine). With each call I wrap it
>>> in a transaction. Thus, the code looks as follows:
>>>
>>> while (!Thread.currentThread().isInterrupted()) {
>>> // Start a new transaction
>>> UserTransaction utx = utx = (UserTransaction)new
>>> InitialContext().lookup("java:comp/UserTransaction");
>>> utx.begin();
>>>
>>> // Tick the session
>>> kSession.fireAllRules();
>>>
>>> // Close the transaction
>>> utx.commit();
>>>
>>> // Sleep so that other applications can use the CPU
>>> try {
>>> Thread.sleep(1);
>>> } catch (InterruptedException e) {
>>> // When our sleep is interrupted it's because the
>>> executor wants us to shut down.
>>> Thread.currentThread().interrupt();
>>> }
>>> }
>>>
>>> When I inspect kSession in the debugger I can see the environment is
>>> properly set. I have tried digging down into the execute a bit but can't
>>> find any point at which the TransactionManager or EntityManagerFactory are
>>> used. As I said above I know Hibernate is set up correctly as well as
>>> Bitronix. I can see them working just fine in the logs and they definitely
>>> are hitting the database (and create tables for sessioninfo and
>>> workingmemory as they should). I just get nothing actually in the database
>>> stored, ever.
>>>
>>> Any help here is appreciated. It seems like it should work but it just
>>> doesn't.
>>>
>>> Thanks in advance,
>>>
>>> Jean-Philippe Steinmetz
>>>
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>
>>
>>
>> --
>> Charles Moulliard
>> Apache Committer / Architect @RedHat
>> Twitter : @cmoulliard | Blog : http://cmoulliard.github.io
>>
>>
>> _______________________________________________
>> 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
>
--
Charles Moulliard
Apache Committer / Architect @RedHat
Twitter : @cmoulliard | Blog : http://cmoulliard.github.io
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20140528/c627ca81/attachment.html
More information about the rules-users
mailing list