[rules-users] Problems with persistence of drools-flow
Ševčík Martin
MaSevcik at cpoj.cz
Thu Jul 16 05:33:07 EDT 2009
I have a simple flow with human task and I want to persist it into database. I'm using MSSQL DB.
My code is like this:
KnowledgeBase kbase = readKnowledgeBase();
// create the entity manager factory and register it in the environment
EntityManagerFactory emf =
Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
Environment env = KnowledgeBaseFactory.newEnvironment();
env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf );
BitronixTransactionManager btm = TransactionManagerServices.getTransactionManager();
env.set( EnvironmentName.TRANSACTION_MANAGER, btm);
StatefulKnowledgeSession ksession =
JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new WSHumanTaskHandler());
// start a new process instance
Map<String,Object> data = new HashMap<String,Object>();
data.put("data3", new MyTask(1,"This is taks 1"));
ProcessInstance pi = ksession.startProcess("com.sample.ruleflow",data);
logger.close();
But when i run it, it end up with this error and there is nothing in the database (the tables were created, but there are all empty):
java.lang.NullPointerException
at org.drools.persistence.processinstance.ProcessInstanceInfo.getId(ProcessInstanceInfo.java:70)
at org.drools.persistence.processinstance.JPAProcessInstanceManager.addProcessInstance(JPAProcessInstanceManager.java:34)
at org.drools.common.AbstractWorkingMemory.startProcess(AbstractWorkingMemory.java:1620)
at org.drools.process.command.StartProcessCommand.execute(StartProcessCommand.java:46)
at org.drools.process.command.StartProcessCommand.execute(StartProcessCommand.java:10)
at org.drools.persistence.session.SingleSessionCommandService.execute(SingleSessionCommandService.java:229)
at org.drools.process.command.impl.CommandBasedStatefulKnowledgeSession.startProcess(CommandBasedStatefulKnowledgeSession.java:163)
at com.sample.RuleFlowPersistenceTest.main(RuleFlowPersistenceTest.java:74)
java.lang.RuntimeException: Could not rollback transaction
at org.drools.persistence.session.SingleSessionCommandService.execute(SingleSessionCommandService.java:258)
at org.drools.process.command.impl.CommandBasedStatefulKnowledgeSession.startProcess(CommandBasedStatefulKnowledgeSession.java:163)
at com.sample.RuleFlowPersistenceTest.main(RuleFlowPersistenceTest.java:74)
Caused by: java.lang.RuntimeException: Could not execute command
at org.drools.persistence.session.SingleSessionCommandService.execute(SingleSessionCommandService.java:255)
... 2 more
Caused by: java.lang.NullPointerException
at org.drools.persistence.processinstance.ProcessInstanceInfo.getId(ProcessInstanceInfo.java:70)
at org.drools.persistence.processinstance.JPAProcessInstanceManager.addProcessInstance(JPAProcessInstanceManager.java:34)
at org.drools.common.AbstractWorkingMemory.startProcess(AbstractWorkingMemory.java:1620)
at org.drools.process.command.StartProcessCommand.execute(StartProcessCommand.java:46)
at org.drools.process.command.StartProcessCommand.execute(StartProcessCommand.java:10)
at org.drools.persistence.session.SingleSessionCommandService.execute(SingleSessionCommandService.java:229)
... 2 more
In JPAProcessInstanceManager.java there this method is called:
public void addProcessInstance(ProcessInstance processInstance) {
ProcessInstanceInfo processInstanceInfo = new ProcessInstanceInfo( processInstance );
EntityManager em = (EntityManager) this.workingMemory.getEnvironment().get( EnvironmentName.ENTITY_MANAGER );
em.persist( processInstanceInfo );
((ProcessInstance) processInstance).setId( processInstanceInfo.getId() );
processInstanceInfo.updateLastReadDate();
internalAddProcessInstance(processInstance);
}
But em.persist does nothing, no connection do DB is called. And then the next line will fail.
Can anybody help me.
Thanks
Martin Sevcik
More information about the rules-users
mailing list