Grigory Kalabin [
https://community.jboss.org/people/gkalabin] created the discussion
"Human Task Service transactions fail"
To view the discussion, visit:
https://community.jboss.org/message/762559#762559
--------------------------------------------------------------
Hi everybody!
I'm using jBPM 5.3.0.Final (except jbpm-human-task which version is 5.3.0.CR1, because
something is wrong with my pom.xml or maven repo) 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):
20:04:37,710 ERROR [stderr] (NioProcessor-4) Caused by: java.lang.NullPointerException
20:04:37,715 ERROR [stderr] (NioProcessor-4) at
org.jbpm.task.service.persistence.TaskJTATransactionManager.getStatus(TaskJTATransactionManager.java:70)
20:04:37,726 ERROR [stderr] (NioProcessor-4) at
org.jbpm.task.service.persistence.TaskJTATransactionManager.ownsTransaction(TaskJTATransactionManager.java:28)
20:04:37,737 ERROR [stderr] (NioProcessor-4) at
org.jbpm.task.service.persistence.TaskPersistenceManager.beginTransaction(TaskPersistenceManager.java:50)
20:04:37,749 ERROR [stderr] (NioProcessor-4) at
org.jbpm.task.service.TaskServiceSession.doOperationInTransaction(TaskServiceSession.java:887)
20:04:37,754 ERROR [stderr] (NioProcessor-4) ... 28 more
I init HumanTaskService and jBPM like:
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
CommandBasedWSHumanTaskHandler(session));
And my persistence.xml looks like:
<?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!
--------------------------------------------------------------
Reply to this message by going to Community
[
https://community.jboss.org/message/762559#762559]
Start a new discussion in jBPM at Community
[
https://community.jboss.org/choose-container!input.jspa?contentType=1&...]