I am having some trouble with jBPM timers and Seam.
I have a basic jBPM timer stubbed up to call a method in a SLSB - here is the XML that
binds the timer to a node:
| <task-node name="User Manager Approve-Reject Request">
|
| <!-- User Manager Escalation Timer -->
| <timer name="Escalate User Manager Approval" duedate="1
minute" repeat="3 minutes">
| <action
class="com.evergreen.accesscontrol.jbpmaction.EscalateUserManagerTimer"
async="true">
| <customProperty>customValue</customProperty>
|
<jndiPathToHandler>access-control-1.0/WorkFlowManagerBean/local</jndiPathToHandler>
| </action>
| </timer>
|
| <task name="Approve/Reject" description="User Manager approve or
reject this access request.">
| <assignment actor-id="#{accessRequest.userManagerId}"/>
| </task>
| <transition name="reject" to="end approval request" />
| <transition name="approve" to="User Manager Approved"
/>
| </task-node>
|
Here is the impl of the timer action:
| public class EscalateUserManagerTimer implements ActionHandler {
|
| private Log log = LogFactory.getLog(EscalateUserManagerTimer.class);
|
| private String customProperty;
|
| private String jndiPathToHandler;
|
| public void execute(ExecutionContext exeCtx) {
| if (log.isDebugEnabled()) {
| log.info("---------------------> EscalateUserManagerTimer: "
+ exeCtx);
| log.info("customProperty -> "+customProperty);
| log.info("jndiPathToHandler -> "+jndiPathToHandler);
| }
| try {
| // First - resolve a handle to a WorkFlowManager(Bean)
| InitialContext context = new InitialContext();
| WorkFlowManager workFlowManager = (WorkFlowManager)context.lookup(
jndiPathToHandler );
|
| if (workFlowManager == null) {
| log.error("Unable to lookup handler using
'"+jndiPathToHandler+"'.");
| } else {
| // Process the task using the work flow manager bean
| Token token = exeCtx.getToken();
| workFlowManager.escalateAccessRequest(token.getId());
|
| }
| } catch (NamingException e) {
| log.error(e,e);
| log.error("TODO - implement some kind of error handling for this
");
| }
| }
| }
|
and here is the relevant code in workFlowManager:
|
| @In(create = true)
| private JbpmContext jbpmContext;
|
| public void escalateAccessRequest(long tokenId) {
| // TODO : implement me
| log.info("escalateAccessRequest( tokenId="+tokenId+" )");
| }
|
|
| 16:03:50,002 DEBUG org.jbpm.JbpmContext - creating JbpmContext
| 16:03:50,002 DEBUG org.jbpm.persistence.db.DbPersistenceServiceFactory - creating
persistence service
| 16:03:50,002 DEBUG org.jbpm.persistence.db.DbPersistenceService - creating hibernate
session
| 16:03:50,002 DEBUG org.jbpm.scheduler.impl.SchedulerThread - checking for timers
| 16:03:50,017 DEBUG org.jbpm.scheduler.impl.SchedulerThread - found timer
timer(Escalate User Manager
Approval,com.evergreen.accesscontrol.jbpmaction.EscalateUserManagerTimer,16:03:50,000)
| 16:03:50,017 DEBUG org.jbpm.scheduler.impl.SchedulerThread - executing timer
'timer(Escalate User Manager
Approval,com.evergreen.accesscontrol.jbpmaction.EscalateUserManagerTimer,16:03:50,000)'
| 16:03:50,049 DEBUG org.jbpm.scheduler.exe.Timer - executing timer 'timer(Escalate
User Manager
Approval,com.evergreen.accesscontrol.jbpmaction.EscalateUserManagerTimer,16:03:50,000)'
| 16:03:50,064 INFO com.evergreen.accesscontrol.jbpmaction.EscalateUserManagerTimer -
---------------------> EscalateUserManagerTimer: ExecutionContext[Token(/)]
| 16:03:50,064 INFO com.evergreen.accesscontrol.jbpmaction.EscalateUserManagerTimer -
customProperty -> customValue
| 16:03:50,064 INFO com.evergreen.accesscontrol.jbpmaction.EscalateUserManagerTimer -
jndiPathToHandler -> access-control-1.0/WorkFlowManagerBean/local
| 16:03:50,111 DEBUG org.jbpm.configuration.JbpmContextInfo - creating jbpm context with
service factories '[message, scheduler, logging, persistence, authentication]'
| 16:03:50,111 DEBUG org.jbpm.JbpmContext - creating JbpmContext
| 16:03:50,111 DEBUG org.jbpm.JbpmContext - closing JbpmContext
| 16:03:50,111 DEBUG org.jbpm.configuration.JbpmContextInfo - creating jbpm context with
service factories '[message, scheduler, logging, persistence, authentication]'
| 16:03:50,111 DEBUG org.jbpm.JbpmContext - creating JbpmContext
| 16:03:50,111 DEBUG org.jbpm.configuration.JbpmContextInfo - creating jbpm context with
service factories '[message, scheduler, logging, persistence, authentication]'
| 16:03:50,111 DEBUG org.jbpm.JbpmContext - creating JbpmContext
| 16:03:50,111 DEBUG org.jbpm.JbpmContext - closing JbpmContext
| 16:03:50,111 DEBUG org.jboss.seam.core.ManagedJbpmContext - created seam managed jBPM
context
| 16:03:50,111 DEBUG org.jbpm.persistence.db.DbPersistenceServiceFactory - creating
persistence service
| 16:03:50,111 DEBUG org.jbpm.persistence.db.DbPersistenceService - creating hibernate
session
| 16:03:50,111 DEBUG org.jboss.mx.loading.RepositoryClassLoader - setRepository,
repository=org.jboss.mx.loading.HeirarchicalLoaderRepository3@1cc0d67,
cl=org.jboss.mx.loading.HeirarchicalLoaderRepository3$CacheClassLoader@1df427e{ url=null
,addedOrder=0}
| 16:03:50,127 INFO com.evergreen.accesscontrol.impl.WorkFlowManagerBean -
escalateAccessRequest( tokenId=42527 )
| 16:03:50,158 DEBUG org.jboss.mx.loading.RepositoryClassLoader - setRepository,
repository=org.jboss.mx.loading.HeirarchicalLoaderRepository3@1cc0d67,
cl=org.jboss.mx.loading.HeirarchicalLoaderRepository3$CacheClassLoader@16a0d22{ url=null
,addedOrder=0}
| 16:03:50,158 DEBUG org.jboss.seam.core.ManagedJbpmContext - destroying seam managed
jBPM context
| 16:03:50,158 DEBUG org.jbpm.JbpmContext - closing JbpmContext
| 16:03:50,158 DEBUG org.jbpm.svc.Services - closing service 'persistence':
org.jbpm.persistence.db.DbPersistenceService@1843e29
| 16:03:50,158 DEBUG org.jbpm.persistence.db.DbPersistenceService - flushing hibernate
session
| 16:03:50,158 DEBUG org.jbpm.persistence.db.DbPersistenceService - closing hibernate
session
| 16:03:50,158 DEBUG org.jboss.seam.core.ManagedJbpmContext - done destroying seam
managed jBPM context
| 16:03:50,158 DEBUG org.jboss.seam.core.ManagedJbpmContext - flushing seam managed jBPM
context
| 16:03:50,158 WARN org.jbpm.scheduler.exe.Timer - timer action threw exception
| 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:585)
| at
org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:208)
| at org.jbpm.graph.def.Action_$$_javassist_180.execute(Action_$$_javassist_180.java)
| at org.jbpm.scheduler.exe.Timer.execute(Timer.java:84)
| at org.jbpm.scheduler.impl.SchedulerThread.executeTimers(SchedulerThread.java:119)
| at org.jbpm.scheduler.impl.SchedulerThread.run(SchedulerThread.java:71)
| Caused by: java.lang.RuntimeException: org.jboss.tm.JBossRollbackException: Unable to
commit, tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=DEIBKST-6KZFT61/47, BranchQual=,
localId=47] status=STATUS_NO_TRANSACTION; - nested throwable:
(java.lang.NullPointerException)
| at org.jboss.aspects.tx.TxPolicy.handleEndTransactionException(TxPolicy.java:198)
| at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:180)
| at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87)
| at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:197)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at
org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at
org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at
org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at
org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at
org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at
org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:181)
| at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:79)
| at $Proxy430.escalateAccessRequest(Unknown Source)
| at
com.evergreen.accesscontrol.jbpmaction.EscalateUserManagerTimer.execute(EscalateUserManagerTimer.java:61)
| at org.jbpm.graph.def.Action.execute(Action.java:123)
| ... 9 more
| Caused by: org.jboss.tm.JBossRollbackException: Unable to commit,
tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=DEIBKST-6KZFT61/47, BranchQual=,
localId=47] status=STATUS_NO_TRANSACTION; - nested throwable:
(java.lang.NullPointerException)
| at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:372)
| at org.jboss.tm.TxManager.commit(TxManager.java:240)
| at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:175)
| ... 27 more
| Caused by: java.lang.NullPointerException
| at
org.jboss.seam.core.ManagedJbpmContext.beforeCompletion(ManagedJbpmContext.java:94)
| at org.jboss.tm.TransactionImpl.doBeforeCompletion(TransactionImpl.java:1491)
| at org.jboss.tm.TransactionImpl.beforePrepare(TransactionImpl.java:1110)
| at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:324)
| ... 29 more
| 16:03:50,205 ERROR org.jbpm.scheduler.exe.Timer - unhandled timer exception
| 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:585)
| at
org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:208)
| at
org.jbpm.graph.node.TaskNode_$$_javassist_135.raiseException(TaskNode_$$_javassist_135.java)
| at org.jbpm.scheduler.exe.Timer.execute(Timer.java:94)
| at org.jbpm.scheduler.impl.SchedulerThread.executeTimers(SchedulerThread.java:119)
| at org.jbpm.scheduler.impl.SchedulerThread.run(SchedulerThread.java:71)
| 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:585)
| at
org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:208)
| at
org.jbpm.graph.def.ProcessDefinition_$$_javassist_138.raiseException(ProcessDefinition_$$_javassist_138.java)
| at org.jbpm.graph.def.GraphElement.raiseException(GraphElement.java:346)
| ... 9 more
| Caused by: org.jbpm.graph.def.DelegationException
| at org.jbpm.graph.def.GraphElement.raiseException(GraphElement.java:352)
| ... 16 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:585)
| at
org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:208)
| at org.jbpm.graph.def.Action_$$_javassist_180.execute(Action_$$_javassist_180.java)
| at org.jbpm.scheduler.exe.Timer.execute(Timer.java:84)
| ... 2 more
| Caused by: java.lang.RuntimeException: org.jboss.tm.JBossRollbackException: Unable to
commit, tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=DEIBKST-6KZFT61/47, BranchQual=,
localId=47] status=STATUS_NO_TRANSACTION; - nested throwable:
(java.lang.NullPointerException)
| at org.jboss.aspects.tx.TxPolicy.handleEndTransactionException(TxPolicy.java:198)
| at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:180)
| at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87)
| at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:197)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at
org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at
org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at
org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at
org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at
org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at
org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:181)
| at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:79)
| at $Proxy430.escalateAccessRequest(Unknown Source)
| at
com.evergreen.accesscontrol.jbpmaction.EscalateUserManagerTimer.execute(EscalateUserManagerTimer.java:61)
| at org.jbpm.graph.def.Action.execute(Action.java:123)
| ... 9 more
| Caused by: org.jboss.tm.JBossRollbackException: Unable to commit,
tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=DEIBKST-6KZFT61/47, BranchQual=,
localId=47] status=STATUS_NO_TRANSACTION; - nested throwable:
(java.lang.NullPointerException)
| at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:372)
| at org.jboss.tm.TxManager.commit(TxManager.java:240)
| at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:175)
| ... 27 more
| Caused by: java.lang.NullPointerException
| at
org.jboss.seam.core.ManagedJbpmContext.beforeCompletion(ManagedJbpmContext.java:94)
| at org.jboss.tm.TransactionImpl.doBeforeCompletion(TransactionImpl.java:1491)
| at org.jboss.tm.TransactionImpl.beforePrepare(TransactionImpl.java:1110)
| at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:324)
| ... 29 more
|
|
It looks to me like several jBPM contexts get created in the execution of this timer. And
I can imagine that when jBPM 'wakes' up for execution of the task, it's not
necessarily doing so with all the context that Seam components have...
Does anyone have knowledge or practice using jBPM timers that call SLSB's that are
Seam components?
Thanks,
Brad Smith
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4022686#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...