Human Task Service transactions fail
gkalabin Oct 3, 2012 4:45 AMHi everybody!
I'm using jBPM 5.3.0.Final and JBoss 7.1.1.
I'm trying to run jbpm with human task service.
When I start processes without human tasks everything works fine. But when I try to run process with human task I get the following exception (see full error log in attachments):
Caused by: java.lang.NullPointerException at org.drools.persistence.jta.JtaTransactionManager.getStatus(JtaTransactionManager.java:205) [drools-persistence-jpa-5.4.0.Final.jar:5.4.0.Final] at org.jbpm.task.service.persistence.TaskJTATransactionManager.getStatus(TaskJTATransactionManager.java:63) [jbpm-human-task-core-5.3.0.Final.jar:5.3.0.Final] at org.jbpm.task.service.persistence.TaskJTATransactionManager.begin(TaskJTATransactionManager.java:36) [jbpm-human-task-core-5.3.0.Final.jar:5.3.0.Final] at org.jbpm.task.service.persistence.TaskPersistenceManager.beginTransaction(TaskPersistenceManager.java:79) [jbpm-human-task-core-5.3.0.Final.jar:5.3.0.Final] at org.jbpm.task.service.TaskServiceSession.doOperationInTransaction(TaskServiceSession.java:976) [jbpm-human-task-core-5.3.0.Final.jar:5.3.0.Final] ... 28 more
I init HumanTaskService and jBPM in following way:
Environment JBPM_ENVIRONMENT = KnowledgeBaseFactory.newEnvironment(); JBPM_ENVIRONMENT.set(EnvironmentName.ENTITY_MANAGER_FACTORY, Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa")); JBPM_ENVIRONMENT.set(EnvironmentName.TRANSACTION_MANAGER, TransactionManagerServices.getTransactionManager()); JBPM_ENVIRONMENT.set(EnvironmentName.GLOBALS, new MapGlobalResolver()); Properties properties = new Properties(); properties.put("drools.processInstanceManagerFactory", "org.jbpm.persistence.processinstance.JPAProcessInstanceManagerFactory"); properties.put("drools.processSignalManagerFactory", "org.jbpm.persistence.processinstance.JPASignalManagerFactory"); KnowledgeSessionConfiguration JBPM_CONFIG = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(properties); EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.jbpm.task"); TaskService taskService = new TaskService(emf, SystemEventListenerFactory.getSystemEventListener()); MinaTaskServer taskServer = new MinaTaskServer(taskService); // start the server Thread thread = new Thread(taskServer); thread.start(); TaskClient taskClient = new TaskClient(new MinaTaskClientConnector("myHtsClient", new MinaTaskClientHandler(SystemEventListenerFactory.getSystemEventListener()))); if (!taskClient.connect(TASK_CLIENT_SERVER_ADDRESS, TASK_CLIENT_SERVER_PORT)) { logger.error("Could not connect task client"); } StatefulKnowledgeSession session = JPAKnowledgeService.newStatefulKnowledgeSession(readKnowledgeBase(), JBPM_CONFIG, JBPM_ENVIRONMENT); session.getWorkItemManager().registerWorkItemHandler("Human Task", new MinaHTWorkItemHandler(session));
And my persistence.xml:
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 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_2_0.xsd"> <persistence-unit name="org.jbpm.persistence.jpa" transaction-type="JTA"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:jboss/datasources/jbpmDS</jta-data-source> <mapping-file>META-INF/JBPMorm-JPA2.xml</mapping-file> <class>org.drools.persistence.info.SessionInfo</class> <class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class> <class>org.drools.persistence.info.WorkItemInfo</class> </persistence-unit> <persistence-unit name="org.jbpm.task"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:jboss/datasources/jbpmDS</jta-data-source> <mapping-file>META-INF/Taskorm.xml</mapping-file> <class>org.jbpm.task.Attachment</class> <class>org.jbpm.task.Content</class> <class>org.jbpm.task.BooleanExpression</class> <class>org.jbpm.task.Comment</class> <class>org.jbpm.task.Deadline</class> <class>org.jbpm.task.Comment</class> <class>org.jbpm.task.Deadline</class> <class>org.jbpm.task.Delegation</class> <class>org.jbpm.task.Escalation</class> <class>org.jbpm.task.Group</class> <class>org.jbpm.task.I18NText</class> <class>org.jbpm.task.Notification</class> <class>org.jbpm.task.EmailNotification</class> <class>org.jbpm.task.EmailNotificationHeader</class> <class>org.jbpm.task.PeopleAssignments</class> <class>org.jbpm.task.Reassignment</class> <class>org.jbpm.task.Status</class> <class>org.jbpm.task.Task</class> <class>org.jbpm.task.TaskData</class> <class>org.jbpm.task.SubTasksStrategy</class> <class>org.jbpm.task.OnParentAbortAllSubTasksEndStrategy</class> <class>org.jbpm.task.OnAllSubTasksEndParentEndStrategy</class> <class>org.jbpm.task.User</class> </persistence-unit> </persistence>
Also I'm using custom TransactionManagerLookup class (it's specifyed in hibernate.properties):
public class TransactionManagerLookup extends JNDITransactionManagerLookup { @Override protected String getName() { return "java:jboss/TransactionManager"; } @Override public String getUserTransactionName() { return "java:comp/UserTransaction"; } }
I even tried to rebind UserTransaction (which Task service looks up) to BitronixTransactionManager, but it not helps. I checked that there is UserTransaction object which TaskService looks up.
Thank you for your attention. Have a good day!
-
error_log.txt.zip 1.5 KB