Hi Alex
> Could you open a Jira issue for this bug?
Ok. I try to add a sample project for this.
> Second, you're running on ode-trunk which is currently
> unstable. If you
> want something more stable for load testing, I'd suggest using the
> ode-1.1branch. With
> 1.1, you can also control whether JBI calls are made
> synchronously (same
> thread) or asynchronously (with callback) via the "
> org.apache.ode.jbi.sendSynch" system property. The default
> is "false",
> meaning that calls use DeliveryChannel.send() instead of
> sendSync().
You're right this was with ode_trunk. My first test was with version 1.1 which
resulted in the following error. I will now test with the sendSynch property.
Thanks!
Kristian
--- 8< ---
14:51:19,018 ERROR [JacobVPU] Method "run" in class
"org.apache.ode.bpel.runtime.INVOKE" threw an unexpected exception.
org.apache.ode.bpel.iapi.ContextException: Unable to register synchronizer.
at
org.apache.ode.scheduler.simple.SimpleScheduler.registerSynchronizer(SimpleScheduler.java:200)
at org.apache.ode.jbi.OdeConsumer.invokePartner(OdeConsumer.java:119)
at
org.apache.ode.jbi.MessageExchangeContextImpl.invokePartner(MessageExchangeContextImpl.java:60)
at
org.apache.ode.bpel.engine.BpelRuntimeContextImpl.invoke(BpelRuntimeContextImpl.java:794)
at org.apache.ode.bpel.runtime.INVOKE.run(INVOKE.java:96)
at sun.reflect.GeneratedMethodAccessor147.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.apache.ode.jacob.vpu.JacobVPU$JacobThreadImpl.run(JacobVPU.java:451)
at org.apache.ode.jacob.vpu.JacobVPU.execute(JacobVPU.java:139)
at
org.apache.ode.bpel.engine.BpelRuntimeContextImpl.execute(BpelRuntimeContextImpl.java:836)
at
org.apache.ode.bpel.engine.PartnerLinkMyRoleImpl.invokeMyRole(PartnerLinkMyRoleImpl.java:193)
at
org.apache.ode.bpel.engine.BpelProcess.invokeProcess(BpelProcess.java:169)
at
org.apache.ode.bpel.engine.BpelProcess.handleWorkEvent(BpelProcess.java:306)
at
org.apache.ode.bpel.engine.BpelEngineImpl.onScheduledJob(BpelEngineImpl.java:318)
at
org.apache.ode.bpel.engine.BpelServerImpl.onScheduledJob(BpelServerImpl.java:364)
at
org.apache.ode.scheduler.simple.SimpleScheduler$4$1.call(SimpleScheduler.java:335)
at
org.apache.ode.scheduler.simple.SimpleScheduler$4$1.call(SimpleScheduler.java:334)
at
org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(SimpleScheduler.java:173)
at
org.apache.ode.scheduler.simple.SimpleScheduler$4.call(SimpleScheduler.java:333)
at
org.apache.ode.scheduler.simple.SimpleScheduler$4.call(SimpleScheduler.java:330)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269)
at java.util.concurrent.FutureTask.run(FutureTask.java:123)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.NullPointerException
at
org.apache.ode.scheduler.simple.SimpleScheduler.registerSynchronizer(SimpleScheduler.java:188)
... 25 more
--- 8< ---
> experience so far is that sendSync() leads to better performance and
> stability under load, provided you have sufficient number of
> threads (but
> not too much).
>
> regards,
> alex
>
>
> On 11/2/07, Kristian Köhler <[EMAIL PROTECTED]> wrote:
> >
> > Hi
> >
> > I encountered problems calling ode processes from multiple
> threads. I'm
> > using ODE deployed as JBI component to servicemix running
> within Geronimo.
> >
> > My sample is a simple BPEL process which calls a remote
> service, also
> > deployed as JBI component to Servicemix, and returning a
> value. I set up a
> > JMeter test which is sending SOAP requests "to" my process.
> Running one
> > thread is no problem. Calling the process from 4 or more
> threads results in
> > "Internal Error"s returned from ODE (not every call of course ;-) ).
> >
> > ---- 8< (start) ----
> > 09:39:45,406 FATAL [BpelServerImpl] Internal Error
> > org.apache.ode.bpel.iapi.BpelEngineException:
> > org.apache.ode.bpel.iapi.BpelEngineException: MUST RUN IN
> TRANSACTION!
> > at org.apache.ode.bpel.engine.BpelProcess.doInstanceWork(
> > BpelProcess.java:423)
> > at org.apache.ode.bpel.engine.BpelProcess.invokeProcess(
> > BpelProcess.java:259)
> > at
> org.apache.ode.bpel.engine.MyRoleMessageExchangeImpl.doInvoke(
> > MyRoleMessageExchangeImpl.java:132)
> > at
> >
> org.apache.ode.bpel.engine.UnreliableMyRoleMessageExchangeImpl$1.call(
> > UnreliableMyRoleMessageExchangeImpl.java:48
> > at
> >
> org.apache.ode.bpel.engine.UnreliableMyRoleMessageExchangeImpl$1.call(
> > UnreliableMyRoleMessageExchangeImpl.java:47
> > at
> org.apache.ode.bpel.engine.BpelProcess$ProcessCallable.call(
> > BpelProcess.java:1122)
> > at org.apache.ode.bpel.engine.Contexts.execTransaction(
> > Contexts.java:118)
> > at
> > org.apache.ode.bpel.engine.BpelServerImpl$TransactedCallable.call(
> > BpelServerImpl.java:833)
> > at
> org.apache.ode.bpel.engine.BpelServerImpl$ServerCallable.call(
> > BpelServerImpl.java:811)
> > at
> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java
> > :269)
> > at java.util.concurrent.FutureTask.run(FutureTask.java:123)
> > at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(
> > ThreadPoolExecutor.java:650)
> > at java.util.concurrent.ThreadPoolExecutor$Worker.run(
> > ThreadPoolExecutor.java:675)
> > at java.lang.Thread.run(Thread.java:595)
> > Caused by: org.apache.ode.bpel.iapi.BpelEngineException: MUST RUN IN
> > TRANSACTION!
> > at
> org.apache.ode.bpel.engine.BpelRuntimeContextImpl.execute(
> > BpelRuntimeContextImpl.java:758)
> > at
> org.apache.ode.bpel.engine.BpelProcess.executeCreateInstance(
> > BpelProcess.java:314)
> > at
> org.apache.ode.bpel.engine.BpelProcess$2.call(BpelProcess.java
> > :261)
> > at
> org.apache.ode.bpel.engine.BpelProcess$2.call(BpelProcess.java
> > :260)
> > at
> org.apache.ode.bpel.engine.BpelProcess$ProcessCallable.call(
> > BpelProcess.java:1122)
> > at
> org.apache.ode.bpel.engine.BpelInstanceWorker.doInstanceWork(
> > BpelInstanceWorker.java:174)
> > at
> > org.apache.ode.bpel.engine.BpelInstanceWorker.execInCurrentThread(
> > BpelInstanceWorker.java:108)
> > at org.apache.ode.bpel.engine.BpelProcess.doInstanceWork(
> > BpelProcess.java:420)
> > ... 13 more
> >
> > ---- 8< (stop) ----
> >
> > One thing i tried was to mark the '
> > org.apache.ode.bpel.engine.Contexts#execTransaction' method with the
> > synchronized keyword.
> > This worked fine but was a bit slow ;-)
> >
> > --- 8< (start) ---
> > public synchronized <T> T execTransaction(Callable<T>
> transaction) throws
> > Exception
> > --- 8< (stop) ---
> >
> > I debugged a bit more and I it seems to me that the calling thread
> > "looses" the transaction after the
> > org.apache.ode.dao.jpa.ProcessDAOImpl#createInstance call.
> >
> > --- 8< (start) ---
> > org.apache.ode.dao.jpa.ProcessDAOImpl.createInstance(CorrelatorDAO)
> >
> >
> org.apache.ode.bpel.engine.PartnerLinkMyRoleImpl.invokeMyRoleC
> reateInstance(MessageExchangeDAO,
> > Operation, String, CorrelatorDAO)
> > org.apache.ode.bpel.engine.PartnerLinkMyRoleImpl.invokeMyRole
> > (MessageExchangeDAO)
> >
> org.apache.ode.bpel.engine.BpelProcess.invokeProcess(MessageEx
> changeDAO)
> > org.apache.ode.bpel.engine.MyRoleMessageExchangeImpl.doInvoke()
> >
> org.apache.ode.bpel.engine.UnreliableMyRoleMessageExchangeImpl
> .invokeAsync().new
> > Callable<Void>() {...}.call()
> > --- 8< (stop) ---
> >
> > I'm working on Windows XP, Java JDK 1.5.0_12 (Sun).
> >
> > Is there any know solution to the problem? ;-)
> > Any help is welcome...
> >
> > Kristian
> >
> > ---
> > http://gaswerk.sourceforge.net
> >
> >
> >
>