Hi,Here my camel context
I have seen that in the drools version 6.1.0.Beta4, the command fire-until-halt is developed using persistence but drools doesn't let me test it because this command implement the interface "UnpersistableCommand" so I have eliminated this interface and I have tested this configuration.
Surprisingly, Drools works as I expected and doesn't throw any exception, ¿Where is the problem in this configuration?
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:kie="http://drools.org/schema/kie-spring"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://drools.org/schema/kie-spring http://drools.org/schema/kie-spring.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<kie:kmodule id="kModule">
<kie:kbase name="rules" packages="rules">
<kie:ksession name="ksession1" type="stateful">
<kie:batch>
<kie:fire-until-halt/>
</kie:batch>
<kie:configuration>
<kie:jpa-persistence>
<kie:transaction-manager ref="txManager"/>
<kie:entity-manager-factory ref="myEmf"/>
</kie:jpa-persistence>
</kie:configuration>
</kie:ksession>
</kie:kbase>
</kie:kmodule>
<kie:environment id="env">
<kie:entity-manager-factory ref="myEmf"/>
<kie:transaction-manager ref="txManager"/>
</kie:environment>
<bean class="org.postgresql.ds.PGPoolingDataSource" id="jbpm-ds">
<property name="serverName" value="localhost"></property>
<property name="databaseName" value="drools"></property>
<property name="portNumber" value="5432"></property>
<property name="user" value="DWP"></property>
<property name="password" value="DWP"></property>
</bean>
<bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="jbpm-ds"/>
<property name="persistenceUnitName" value="org.jbpm.persistence.jpa.local"/>
</bean>
<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="myEmf"/>
</bean>
<bean id="kiePostProcessor" class="org.drools.osgi.spring.OsgiKModuleBeanFactoryPostProcessor"/>
<bean id="fireALlRulesCommand" class="com.execute.command.FireAllRules"/>
<bean id="fireUntilHaltCommand" class="com.execute.command.FireUntilHalt"/>
<bean id="factStudent" class="com.test.facts.Student"/>
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route trace="false" id="testRoute">
<from uri="timer:testRoute?period=10s"/>
<to uri="log:message"/>
<bean method="initStudent" ref="factStudent"/>
<to uri="kie:ksession1?action=insertBody" id="AgeVerification"/>
<!--
<bean method="fireUntilHalt" ref="fireUntilHaltCommand"/>
<to uri="kie:ksession1?action=execute"/>
-->
</route>
</camelContext>
</beans>PD: I have attached my example , it's a maven project
2014-06-04 19:04 GMT+02:00 Sergio Besada <scerquido@gmail.com>:
Thank you in advance.2014-06-04 18:29 GMT+02:00 Charles Moulliard <ch007m@gmail.com>:
I will have a look to your use case as it is not yet covered and will perhaps require that we modify the kie-camel componentOn Wed, Jun 4, 2014 at 6:02 PM, s b <scerquido@gmail.com> wrote:
_______________________________________________Kind Regards,I've deep dived into the web looking for examples or documentation of this scenario both in Spring and Blueprint. Does anyone of you have any pointers to documentation on the matter?If it is not possible, Can I have a stateful ( persisted )drools session and invoke "fireAllRules" whenever I make changes in the knowledge session ( new Facts are inserted )?Is it possible to have a stateful fireUntilHalt drools session that keeps using the same knowledge session in subsequent camel route executions?Questions:As you can see it is an scenario where Drools is in an stateful session with persistence configured.This is my camel-contextI'm testing the drools new version (6.1.0.Beta4) but I have a problem with the Stateful Drools Session.I have deployed in JBoss Fuse ESB the last versión of the drools (drools camel, jbpm, spring, etc), I have atached my camel context bundle (It's a maven project).
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:kie="http://drools.org/schema/kie-spring"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://drools.org/schema/kie-spring http://drools.org/schema/kie-spring.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<kie:kmodule id="kModule">
<kie:kbase name="rules" packages="rules">
<kie:ksession name="ksession1" type="stateful">
<!--<kie:batch>
<kie:fire-all-rules/>
</kie:batch> -->
<kie:configuration>
<kie:jpa-persistence>
<kie:transaction-manager ref="txManager"/>
<kie:entity-manager-factory ref="myEmf"/>
</kie:jpa-persistence>
</kie:configuration>
</kie:ksession>
</kie:kbase>
</kie:kmodule>
<kie:environment id="env">
<kie:entity-manager-factory ref="myEmf"/>
<kie:transaction-manager ref="txManager"/>
</kie:environment>
<bean class="org.postgresql.ds.PGPoolingDataSource" id="jbpm-ds">
<property name="serverName" value="localhost"></property>
<property name="databaseName" value="drools"></property>
<property name="portNumber" value="5432"></property>
<property name="user" value="DWP"></property>
<property name="password" value="DWP"></property>
</bean>
<bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="jbpm-ds"/>
<property name="persistenceUnitName" value="org.jbpm.persistence.jpa.local"/>
</bean>
<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="myEmf"/>
</bean>
<bean id="kiePostProcessor" class="org.drools.osgi.spring.OsgiKModuleBeanFactoryPostProcessor"/>
<bean id="fireALlRulesCommand" class="com.execute.command.FireAllRules"/>
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route trace="false" id="testRoute">
<from uri="timer:testRoute?period=10s"/>
<to uri="log:message"/>
<to uri="kie:ksession1?action=insertBody" id="AgeVerification"/>
<bean method="fireAllRules" ref="fireALlRulesCommand"/>
<to uri="kie:ksession1?action=execute"/>
</route>
</camelContext>
</beans>
The bundle is executed without errors but I want that Drools executes my rules each time that the route is executed ( fireUntilHalt mode but I wasn't able as seems that this command is not availble in a persisted environment ), for this reason I've created a bean with the command: fireAllRules and I use <to uri="kie:ksession1?action=execute"/> to execute the rules but the problem is that the rules are only executed the first time, only the first time and never in subsequents executions of the route.
The persistece seems to work well ( I can see the datamodel created and populated as expeted in the DB ).
However if I change to use stateless mode ( no persistence then ), the rules are executed each time that route is executed ( as expected ), and therefore I don´t need the command fireAllRules
<bean method="fireAllRules" ref="fireALlRulesCommand"/>
<to uri="kie:ksession1?action=execute"/>
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
--Charles MoulliardApache Committer / Architect @RedHatTwitter : @cmoulliard | Blog : http://cmoulliard.github.io
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users