JBoss Community

java.lang.IllegalArgumentException: attempt to create merge event with null entity

created by Xiaojun Hou in jBPM - View the full discussion

In my project,i use the code below to configure the persistence:

 

try {

            PoolingDataSource ds = new PoolingDataSource();

            ds.setUniqueName("jdbc/testDS");

            ds.setClassName("com.mysql.jdbc.jdbc2.optional.MysqlXADataSource");

            ds.setMaxPoolSize(3);

            ds.setAllowLocalTransactions(true);

            ds.getDriverProperties().put("user", "root");

            ds.getDriverProperties().put("password", "root");

            ds.getDriverProperties().put("URL", "jdbc:mysql://localhost:3306/jbpm5");

            ds.init();

            // load up the knowledge base

            KnowledgeBase kbase = readKnowledgeBase();

            // start a new process instance

            EntityManagerFactory emf = Persistence

                    .createEntityManagerFactory("org.jbpm.persistence.jpa");

            Environment env = KnowledgeBaseFactory.newEnvironment();

            env.set(EnvironmentName.ENTITY_MANAGER_FACTORY,

                    emf);

            env.set(EnvironmentName.TRANSACTION_MANAGER,

                    TransactionManagerServices.getTransactionManager());

           

            // create a new knowledge session that uses JPA to store the runtime

            // state

            StatefulKnowledgeSession ksession=null;

            ksession= JPAKnowledgeService.newStatefulKnowledgeSession(

                    kbase,

                    null,

                    env);

           

            JPAWorkingMemoryDbLogger logger = new JPAWorkingMemoryDbLogger(ksession);

            ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new WSHumanTaskHandler());

            // start a new process instance

            Map<String, Object> params = new HashMap<String, Object>();

            params.put("employee", "krisv");

            ksession.startProcess("com.sample.evaluation",params);

           

            logger.dispose();

} catch (Throwable t) {

            t.printStackTrace();

        }

 

However,when i start a new processinstance and try to complete the first task,exception happens just like this:

 

Registered human task listener

[2011:06:167 10:06:520:debug] Message receieved on client : AddTaskResponse

[2011:06:167 10:06:520:debug] Arguments : [1]

[2011:06:167 10:06:324:debug] Message receieved on client : EventTriggerResponse

[2011:06:167 10:06:324:debug] Arguments : [org.jbpm.task.event.EventPayload@b98a06]

Task completed 1

[2011:06:167 10:06:609:debug] Message receieved on client : GetTaskResponse

[2011:06:167 10:06:609:debug] Arguments : [org.jbpm.task.Task@2a7159ce]

[2011:06:167 10:06:610:exception] Uncaught exception on client

java.lang.IllegalArgumentException: attempt to create merge event with null entity

    at org.hibernate.event.MergeEvent.<init>(MergeEvent.java:60)

    at org.hibernate.event.MergeEvent.<init>(MergeEvent.java:43)

    at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:688)

    at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:692)

    at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:235)

    at org.drools.persistence.jpa.JpaPersistenceContext.merge(JpaPersistenceContext.java:49)

    at org.drools.persistence.jpa.processinstance.JPAWorkItemManager.abortWorkItem(JPAWorkItemManager.java:136)

    at org.jbpm.process.workitem.wsht.WSHumanTaskHandler$GetCompletedTaskResponseHandler.execute(WSHumanTaskHandler.java:249)

    at org.jbpm.task.service.TaskClientHandler.messageReceived(TaskClientHandler.java:81)

    at org.jbpm.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(ThreadPoolExecutor.java:886)

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)

    at java.lang.Thread.run(Thread.java:619)

 

after the exception,the task stored in the database has a "completed" status,Can somebody help me to solve the problem?

By the way,If i run the code above twice,exception will also happen just like this:

javax.persistence.PersistenceException: [PersistenceUnit: org.jbpm.persistence.jpa] Unable to build EntityManagerFactory

    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)

    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)

    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)

    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60)

    at com.sample.ProcessTest.main(ProcessTest.java:71)

Caused by: org.hibernate.HibernateException: Could not obtain BTM transaction manager instance

    at org.hibernate.transaction.BTMTransactionManagerLookup.getTransactionManager(BTMTransactionManagerLookup.java:50)

    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:357)

    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1327)

    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)

    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)

    ... 4 more

Caused by: java.lang.reflect.InvocationTargetException

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    at java.lang.reflect.Method.invoke(Method.java:597)

    at org.hibernate.transaction.BTMTransactionManagerLookup.getTransactionManager(BTMTransactionManagerLookup.java:47)

    ... 8 more

Caused by: bitronix.tm.utils.InitializationException: cannot open disk journal

    at bitronix.tm.BitronixTransactionManager.<init>(BitronixTransactionManager.java:59)

    at bitronix.tm.TransactionManagerServices.getTransactionManager(TransactionManagerServices.java:43)

    ... 13 more

Caused by: java.io.IOException: The process cannot access the file because another process has locked a portion of the file

    at java.io.RandomAccessFile.read(Native Method)

    at java.io.RandomAccessFile.readInt(RandomAccessFile.java:720)

    at bitronix.tm.journal.TransactionLogHeader.<init>(TransactionLogHeader.java:77)

    at bitronix.tm.journal.TransactionLogAppender.<init>(TransactionLogAppender.java:50)

    at bitronix.tm.journal.DiskJournal.open(DiskJournal.java:132)

    at bitronix.tm.BitronixTransactionManager.<init>(BitronixTransactionManager.java:46)

    ... 14 more

 

Hope someone can help me out here!!!

Reply to this message by going to Community

Start a new discussion in jBPM at Community