1 Reply Latest reply on Jun 15, 2011 11:38 PM by wwweeii

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

    houxiaojun

      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!!!

        • 1. Re: java.lang.IllegalArgumentException: attempt to create merge event with null entity
          wwweeii

          I met some problems like these .But i met these wrongs when i start a process twice in a ksession.I don't know how to solve the problem.

          These are my codes:

           

          public class ProcessTest {



          public static final void main(String[] args) {
            /*
             * Start local h2 datbase
             * This is not required if the application connects to a remote database
             */
            /*try {
             DeleteDbFiles.execute("", "JPADroolsFlow", true);
              Server h2Server = Server.createTcpServer(new String[0]);
             h2Server.start();
            } catch (SQLException e) {
             throw new RuntimeException("can't start h2 server db",e);
            }*/
             
           
            try {
            
             UserTransaction ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
                      ut.begin();
               
                      PoolingDataSource  ds1 = new PoolingDataSource();
                   ds1.setUniqueName( "jdbc/testDS1" );
                   ds1.setClassName( "com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" );
                   
                   ds1.setMaxPoolSize( 3 );
                   ds1.setAllowLocalTransactions( true );
                   ds1.getDriverProperties().put( "user","root" );
                   ds1.getDriverProperties().put( "password","1979927" );
                   ds1.getDriverProperties().put( "URL",
                                                 "jdbc:mysql://localhost:3306/jbpm5db" );               
                   ds1.init();    
             KnowledgeBase kbase = readKnowledgeBase("Helloprocess.bpmn");
             StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
            
                   /*Create the knowledge base for HelloProcss.bpmn */
                 
             ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new CommandBasedWSHumanTaskHandler(ksession));
             JPAWorkingMemoryDbLogger logger = new JPAWorkingMemoryDbLogger(ksession);
            
             System.out.println(" started the humantask");
             ksession.startProcess("Hello");
             ksession.startProcess("Hello");
             ksession.fireAllRules();
           
             ut.commit();
             logger.dispose();
            } catch (Throwable t) {
             t.printStackTrace();
            }