Hi,
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?
Here my camel context
<?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(a)gmail.com>:
Thank you in advance.
2014-06-04 18:29 GMT+02:00 Charles Moulliard <ch007m(a)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 component
>
>
> On Wed, Jun 4, 2014 at 6:02 PM, s b <scerquido(a)gmail.com> wrote:
>
>> I'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).
>>
>> This is my camel-context
>>
>> <?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>
>>
>> As you can see it is an scenario where Drools is in an stateful session
>> with persistence configured.
>>
>> 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"/>
>>
>>
>>
>> Questions:
>>
>> Is it possible to have a stateful fireUntilHalt drools session that
>> keeps using the same knowledge session in subsequent camel route executions?
>>
>> 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 )?
>>
>> 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?
>>
>> Kind Regards,
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users(a)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(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>