As we transition to the new Hyland Community, some post links may be temporarily disrupted as we finalize redirects. We apologize for the inconvenience and are working to resolve this as quickly as possible. Details.
Caused by: org.activiti.engine.ActivitiException: Entity does not exist: erp.model.test.TestErp - 801 at org.activiti.engine.impl.variable.JPAEntityMappings.findEntity(JPAEntityMappings.java:130) at org.activiti.engine.impl.variable.JPAEntityMappings.getJPAEntity(JPAEntityMappings.java:119) at org.activiti.engine.impl.variable.JPAEntityVariableType.getValue(JPAEntityVariableType.java:77) at org.activiti.engine.impl.persistence.entity.VariableInstanceEntity.getValue(VariableInstanceEntity.java:158) at org.activiti.engine.impl.persistence.entity.VariableScopeImpl.getVariable(VariableScopeImpl.java:93) at erp.domain.activiti.tasks.service.SecondTask.execute(SecondTask.java:29)
<br> <jee:jndi-lookup jndi-name="jdbc/MysqlErp" id="dataSource" /><br> <jee:jndi-lookup jndi-name="java:appserver/TransactionManager" id="transactionManager" /><br> <bean id="processEngineConfiguration"<br> class="org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration"><br> <property name="dataSource" ref="dataSource" /><br> <property name="transactionManager" ref="transactionManager"/><br> <property name="transactionsExternallyManaged" value="true" /><br> <property name="databaseSchemaUpdate" value="true" /><br> <property name="databaseType" value="mysql" /><br> <property name="jobExecutorActivate" value="false" /><br> </bean><br>
<br>@Named<br>@RequestScoped<br>public class SimpleStartBean {<br><br> @EJB ActivitiServiceEJB activiti;<br><br> @EJB TestErpBean testErp;<br><br> private String processDefinitionId;<br> private String column;<br><br> // setters and getters removed…<br><br> public String startProcess() throws NamingException, NotSupportedException {<br><br> TestErpBean testErpBean = (TestErpBean) new InitialContext()<br> .lookup("java:global/<a href="http://erp.web/TestErpBean" rel="nofollow noopener noreferrer">erp.web/TestErpBean</a>");<br> TestErp entity = testErpBean.createTestErp();<br> entity.setCol(column);<br> testErpBean.saveTestErp(entity);<br><br> Map<String, Object> variables = new HashMap<String, Object>();<br> variables.put("entity", entity);<br><br> activiti.getProcessEngine().getRuntimeService()<br> .startProcessInstanceById(processDefinitionId, variables);<br> return "owntasklist";<br> }<br>}<br>
<br>@Stateless<br>@LocalBean<br>public class TestErpBean {<br> <br> @PersistenceUnit(unitName="erp.web")<br> EntityManagerFactory emf;<br><br> public TestErpBean() {<br> }<br> <br> public TestErp createTestErp() {<br> EntityManager em = emf.createEntityManager();<br> TestErp erp = new TestErp();<br> em.persist(erp);<br> return erp;<br> }<br> <br> public void saveTestErp(TestErp testErp) {<br> EntityManager em = emf.createEntityManager();<br> em.persist(em.merge(testErp));<br> }<br> <br> public TestErp findTestErp(final int id) {<br> EntityManager em = emf.createEntityManager();<br> return em.find(TestErp.class, new Integer(id));<br> }<br>}<br>
<br>public class FirstTask extends BaseTask implements JavaDelegate {<br> @Override<br> public void execute(DelegateExecution execution) throws Exception {<br><br> TestErp entity = (TestErp) execution.getVariable("entity");<br> entity.setCol(entity.getCol() + " FIRST");<br><br> logger.log(Level.FINE, "FirstTask.execute: entity.id = {0} entity.col = {1}", new Object[] {new Integer(entity.getId()), entity.getCol()});<br> }<br>}<br>
<br>public class SecondTask extends BaseTask implements JavaDelegate {<br> @Override<br> public void execute(DelegateExecution execution) throws Exception {<br><br> TestErp entity = (TestErp) execution.getVariable("entity");<br> entity.setCol(entity.getCol()+ " SECOND");<br> <br> logger.log(Level.FINE, "SecondTask.execute: entity.id = {0} entity.col = {1}", new Object[] {new Integer(entity.getId()), entity.getCol()});<br> }<br>}<br>
<br>java.lang.NullPointerException<br> at com.sun.enterprise.resource.ConnectorXAResource.getResourceHandle(ConnectorXAResource.java:246)<br> at com.sun.enterprise.resource.ConnectorXAResource.start(ConnectorXAResource.java:136)<br> at com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.enlistResource(JavaEETransactionManagerSimplified.java:375)<br> at com.sun.enterprise.resource.rm.ResourceManagerImpl.registerResource(ResourceManagerImpl.java:152)<br> at com.sun.enterprise.resource.rm.ResourceManagerImpl.enlistResource(ResourceManagerImpl.java:112)<br> at com.sun.enterprise.resource.pool.PoolManagerImpl.getResource(PoolManagerImpl.java:208)<br> at com.sun.enterprise.connectors.ConnectionManagerImpl.getResource(ConnectionManagerImpl.java:338)<br> at com.sun.enterprise.connectors.ConnectionManagerImpl.internalGetConnection(ConnectionManagerImpl.java:301)<br> at com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:190)<br> at com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:165)<br> at com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:160)<br> at com.sun.gjc.spi.base.DataSource.getConnection(DataSource.java:113)<br> at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSessionFromDataSource(DefaultSqlSessionFactory.java:72)<br> at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSession(DefaultSqlSessionFactory.java:32)<br> at org.activiti.engine.impl.db.DbSqlSession.<init>(DbSqlSession.java:86)<br> at org.activiti.engine.impl.db.DbSqlSessionFactory.openSession(DbSqlSessionFactory.java:77)<br> at org.activiti.engine.impl.interceptor.CommandContext.getSession(CommandContext.java:177)<br> at org.activiti.engine.impl.cfg.standalone.StandaloneMybatisTransactionContext.getDbSqlSession(StandaloneMybatisTransactionContext.java:77)<br> at org.activiti.engine.impl.cfg.standalone.StandaloneMybatisTransactionContext.rollback(StandaloneMybatisTransactionContext.java:91)<br> at org.activiti.engine.impl.interceptor.CommandContext.close(CommandContext.java:120)<br> at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:49)<br> at org.activiti.engine.impl.interceptor.JtaTransactionInterceptor.execute(JtaTransactionInterceptor.java:59)<br> at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33)<br> at org.activiti.engine.impl.AbstractQuery.list(AbstractQuery.java:112)<br> at erp.web.faces.beans.activiti.TaskList.getOwnTasks(TaskList.java:62)<br>
<br>@Singleton<br>@LocalBean<br>@Startup<br>public class ActivitiServiceEJB {<br> <br> /** the reference to the application wide Activiti process engine. */<br> ProcessEngine processEngine = null;<br> <br> private static Logger logger = Logger.getLogger(ActivitiServiceEJB.class.getName());<br><br> public ActivitiServiceEJB() {<br> }<br> <br> @PostConstruct<br> void initEngine() {<br> ProcessEngines.init();<br> setProcessEngine(ProcessEngines.getDefaultProcessEngine());<br> logger.log(Level.INFO, "Process engine {0} created and initialized.", getProcessEngine());<br> createActivitiUserData();<br> }<br> <br> @PreRemove<br> void destructEngines() {<br> ProcessEngines.destroy();<br> logger.log(Level.INFO, "Process engines destroyed.");<br> }<br><br> public ProcessEngine getProcessEngine() {<br> return processEngine;<br> }<br><br> public void setProcessEngine(ProcessEngine processEngine) {<br> this.processEngine = processEngine;<br> }<br> <br> // removed createActivitiUserData() …<br>}<br>
<br>@ManagedBean<br>@RequestScoped<br>public class TaskList {<br><br> @EJB<br> ActivitiServiceEJB activiti;<br><br> @ManagedProperty(value = "#{userSession}")<br> UserSession userSession;<br><br> public UserSession getUserSession() {<br> return userSession;<br> }<br><br> public void setUserSession(UserSession userSession) {<br> this.userSession = userSession;<br> }<br><br> public List<Task> getOwnTasks() {<br><br> List<Task> tasks = null;<br><br> if (userSession.isAdmin()) {<br> tasks = activiti.getProcessEngine().getTaskService()<br> .createTaskQuery().orderByTaskCreateTime().asc().list();<br> } else {<br> tasks = activiti.getProcessEngine().getTaskService()<br> .createTaskQuery()<br> .taskAssignee(userSession.getUser().getUsername())<br> .orderByTaskCreateTime().asc().list();<br> }<br><br> return tasks;<br> }<br><br> public String getFormKey(String taskId) {<br> String formKey = activiti.getProcessEngine().getFormService()<br> .getTaskFormData(taskId).getFormKey();<br> return formKey;<br> }<br>
From the stack trace i saw during my debugging sessions i have the impression that a process instance is executed the whole execution path all the way through tillthe process instance arrives at a wait state? E.g. a userTask? Is this the momentthe process variables are persisted to the database? And is this the moment a transaction in the Activiti world ends? At least i think so, but i dont know ityet.