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

_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
http://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to