Help

Controls

PermLinkWikiLink

Built with Seam

You can find the full source code for this website in the Seam package in the directory /examples/wiki. It is licensed under the LGPL.

Forum: Seam Users Forum ListTopic List
29. May 2008, 16:45 CET | Link

Hi,

we are using JBPM in our application and there is a timer-related state:

  <state name="WaitingForReversal">
    <event type="node-enter">
			<action name="sendAnswerMessage" expression="#{jbpmPaymentProcessor.sendAnswerMessage}"></action>
		</event>
		<timer duedate="60 seconds" name="waitingForReversalTimer" transition="bookingCompleted"></timer>
    <transition to="isReversalRequestValid" name="reversalRequest"></transition>
    <transition to="BookingSuccessfullyCompleted" name="bookingCompleted"></transition>
  </state>

However, the transition does not fire automatically. The JBPM job executor/scheduler needs to started.

What is the recommended way to do this with Seam? Can you use Seam/EJB timers and configure it somewhere in components.xml or jbpm.cfg.xml?

I found some other posts about this topic, but none seemed to have a definite answer.

What we are currently doing is to add the Job Executor Servlet to our web.xml:

<servlet>
    <servlet-name>JobExecutorServlet</servlet-name>
    <servlet-class>org.jbpm.job.executor.JobExecutorServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>JobExecutorServlet</servlet-name>
    <url-pattern>/jobs</url-pattern>
  </servlet-mapping>

This works, but produces the following log output:

6:29:41,921 JbpmJobExector:192.168.10.212:1 WARN  [ProxyWarnLog] Narrowing proxy to class org.jbpm.job.Timer - this operation breaks ==
16:29:42,000 JbpmJobExector:192.168.10.212:1 ERROR [JobSession] org.hibernate.TransactionException: could not register synchronization
16:29:42,218 JbpmJobExector:192.168.10.212:1 WARN  [ProxyWarnLog] Narrowing proxy to class org.jbpm.job.Timer - this operation breaks ==
16:29:42,234 JbpmJobExector:192.168.10.212:1 ERROR [JobSession] org.hibernate.TransactionException: could not register synchronization

I guess that it wants to synchronize itself with EJB transaction manager...? So what is the best solution in your opinion?

Thanks in advance Markus

2 Replies:
01. Jun 2008, 22:28 CET | Link

You can also configure jBPM to use ejb timers. The 'could not register sychronization' is most often caused by having configured hibernate or jBPM to use a jee specific transactionmanager and not using an xa datasource (afaik).

The warnings van be ignored (also afaik)

 

Regards,

Ronald

A kind jBPM user and forum addict

03. Jun 2008, 09:52 CET | Link

Is there an example or a documentation about how to use an EJB-timer for the job scheduler?

BTW, is it not a little bit strange, that the servlet actually works? The jBpm process starts actions on Seam method, thus, the executor thread needs an initialized Seam context. With EJB it would get it via the Seam-EJB interceptor. But I would assume that a usual servlet does not get a Seam context.

Best regards,

Torsten