[rules-users] Problem persisting human tasks

raic agomezcom at gmail.com
Tue Nov 23 12:38:54 EST 2010


Hi,

I'm having problems using drools flow persistance with human tasks. I'm
using drools server.

On one hand, I have my test application, which starts a MinaTaskServer for
registering human tasks, and then, the application generates JSON commands
for executing a flow with human tasks on the execution server.

Without using flow persistence, this is working ok, i'm able to retrieve the
pending tasks and completing them without problems.

When I try to configure flow persistence on the execution server, i can
start the process, the tasks are registered ok and drools flow tables are
generated in my database (processinstanceinfo,sessioninfo,workiteminfo...)
with the correct flow information. The problem appears when i retrieve a
pending task, and then, i want to complete it. It seems that the
communication between MinaTaskServer and ExecutionServer is not ok.

The error i'm getting is the following:


[2010:11:327 18:11:661:debug] Message receieved on client :
EventTriggerResponse

[2010:11:327 18:11:661:debug] Arguments :
[org.drools.task.event.EventPayload at 1b2df13]
Task completed 1
[2010:11:327 18:11:661:debug] Message receieved on client :
EventTriggerResponse
[2010:11:327 18:11:661:debug] Arguments :
[org.drools.task.event.EventPayload at 1f7c6e1]
Task completed 1
[2010:11:327 18:11:770:debug] Message receieved on client : GetTaskResponse
[2010:11:327 18:11:770:debug] Arguments : [org.drools.task.Task at d17fbb51]
[2010:11:327 18:11:770:exception] Uncaught exception on client
java.lang.IllegalStateException: EntityManager is closed 
at org.hibernate.ejb.EntityManagerImpl.getSession(EntityManagerImpl.java
:66)
        at
org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:182)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at
org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:358)
        at $Proxy132.find(Unknown Source)
        at
org.drools.persistence.processinstance.JPAWorkItemManager.completeWorkItem(JPAWorkItemManager.java:88)
        at
org.drools.process.workitem.wsht.WSHumanTaskHandler$GetCompletedTaskResponseHandler.execute(WSHumanTaskHandler.java:250)
        at
org.drools.task.service.TaskClientHandler.messageReceived(TaskClientHandler.java:80)
        at
org.drools.task.service.mina.MinaTaskClientHandler.messageReceived(MinaTaskClientHandler.java:47)
        at
org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:713)
        at
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
        at
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
        at
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:793)
        at
org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:375)
        at
org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:229)
        at
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
        at
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
        at
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:793)
        at
org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:119)
        at
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
        at
org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:426)
        at
org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:638)
        at
org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:598)
        at
org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:587)
        at
org.apache.mina.core.polling.AbstractPollingIoProcessor.access$400(AbstractPollingIoProcessor.java:61)
        at
org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:969)
        at
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown
Source
)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
Source)
        at java.lang.Thread.run(Unknown Source)




And here is my configuration:


knowledge-services.xml  (spring 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:drools="http://drools.org/schema/drools-spring"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                        http://drools.org/schema/drools-spring
http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring-1.0.0.xsd">

	<bean id="ds"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/drools_flow" />
		<property name="username" value="user" />
		<property name="password" value="pass" />
		
      
	</bean>

	<drools:connection id="connection1" type="local" />
	<drools:execution-node id="node1" connection="connection1" />

	<drools:kbase id="kbProcessWorkItems" node="node1">
	    <drools:resources>
			            <drools:resource  type="CHANGE_SET"
source="classpath:changeset.xml"/>
		</drools:resources>
	</drools:kbase>
	
	<bean id="myEmf"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="dataSource" ref="ds" />
		<property name="persistenceUnitName"
value="org.drools.persistence.jpa.local" />
	</bean>

	<bean id="txManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="myEmf" />
	</bean>

	<drools:kstore id="kstore1" />	
	    
	<drools:ksession id="ksession1" type="stateful"  kbase="kbProcessWorkItems"
node="node1">
	    <drools:configuration>
			<drools:jpa-persistence>
	            <drools:transaction-manager ref="txManager" />
	            <drools:entity-manager-factory ref="myEmf" />   	   
				<drools:variable-persisters>
					<drools:persister for-class="javax.persistence.Entity"
implementation="org.drools.persistence.processinstance.persisters.JPAVariablePersister"/>
				</drools:variable-persisters>          				
		    </drools:jpa-persistence>
	    </drools:configuration>		    
	</drools:ksession>
	
</beans>



And here my persistence.xml:


<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" 
		xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="
				http://java.sun.com/xml/ns/persistence		
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
				http://java.sun.com/xml/ns/persistence/orm	
http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">

	<persistence-unit name="org.drools.persistence.jpa.local"
transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>

		<class>org.drools.persistence.session.SessionInfo</class>
	 	<class>org.drools.persistence.processinstance.ProcessInstanceInfo</class>
               
<class>org.drools.persistence.processinstance.WorkItemInfo</class>
	
<class>org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo</class>    
	
<class>org.drools.persistence.processinstance.variabletypes.JPAPersistedVariable</class>
		
		<!-- my persistent variables -->
		<class>com.sample.bussiness.model.ClientModel</class>
		<properties>
			<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQL5Dialect"/>
			<property name="hibernate.max_fetch_depth" value="3" />
			<property name="hibernate.hbm2ddl.auto" value="create" />
			<property name="hibernate.show_sql" value="false" />
		</properties>
	</persistence-unit>
</persistence>



I've seen some examples that uses bitronix but i'm not using it, i don't
know if that is the problem...


Some ideas?

Thanks







-- 
View this message in context: http://drools-java-rules-engine.46999.n3.nabble.com/Problem-persisting-human-tasks-tp1954934p1954934.html
Sent from the Drools - User mailing list archive at Nabble.com.



More information about the rules-users mailing list