ode-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kristian Köhler <Kristian.Koeh...@dmc.de>
Subject AW: Threading problems with Ode
Date Fri, 02 Nov 2007 14:40:49 GMT
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 <Kristian.Koehler@dmc.de> 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
> >
> >
> >
> 

Mime
View raw message