Re: Distribued JOTM transaction between 2 jonasses

Benoit Pelletier <[email protected]> Thu, 14 Apr 2011 11:20:45 +0200
Newsgroups gmane.comp.java.objectweb.jonas
Organization BULL SAS
Message-ID <[email protected]>
Hi Son Tung,

If i understood correctly, the behavior is normal as there're two 
different transactions when the requests goes across queues or topics :
/Transaction T1)/ is about the request processing in WebAp1. This 
transaction puts information in db and creates a message in the joram2's 
queue. This transactions is finishing at this point.
/Transaction T2) /is about the message processing (onMethod()). I'm not 
sure where is located this code (likely WebAp2).

If T2 rollbacks, it doesn't cause a rollback for T1 !

Regards
> Hi, 
>
> I'm configuring 2 Jonas (with 2 webapps) and I would like to use JOTM 
> implemetation for distribued transactions between webapps (or 
> servers). I did ask for configurations of servers in my previous 
> thread (at http://jonas.ow2.org/wws/arc/jonas/2011-03/msg00062.html).
>
> Let say, Jonas 1 -> alias *S1*, and Jonas 2 -> alias *S2*
>
> *S1* have *Webap1*
> *S2* have *Webap2* and *joram2*
> *
> *
> *_The senario is:_**
> *
>
> *Webap1* received a request, create a DTO, trace informations in 
> database(DB), and send it in queue of *joram2* (*S2*) . in onMessage 
> method call, it has to do something. If last action failed, it has to 
> rollback all modifications done in previous action (tracing in DB on 
> *S1::Webap1*).

>
> For testing, on onMessage method call, i throw systematically a 
> RuntimeException().
>  
> When i have configurations (of jonas.properties) like :
>
> _*S1:*_
>
> # Set the Transaction Manager launching mode.
> # If set to 'true', TM is remote: TM must be already launched in an 
> other JVM.
> # If set to 'false', TM is local: TM is going to run into the same JVM
> # than the jonas Server.
> jonas.service.jtm.remote  *false*
>
> *_S2:_*
> [....]
> jonas.service.jtm.remote  *false*
>
> The rollingback doesn't seem to work; informations saved in database 
> (on *Webap1* - *S1*) was not rollbacked.
>
> And when i have configurations like:
>
> _*S1:*_
>
> # Set the Transaction Manager launching mode.
> # If set to 'true', TM is remote: TM must be already launched in an 
> other JVM.
> # If set to 'false', TM is local: TM is going to run into the same JVM
> # than the jonas Server.
> jonas.service.jtm.remote  *false*
>
> *_S2:_*
> [....]
> jonas.service.jtm.remote  *true*
> *
> *
> I get this trace :*
>
> *
> 2011-04-14 10:24:56,371 : JonasSecurityServiceImpl.__doStart : 
> Security Service started
> 2011-04-14 10:24:56,387 : JOnASWorkCleanerService.__doStart : 
> WorkCleaner Service started.
> 2011-04-14 10:24:56,464 : JOTMTransactionService.__doStart : Cannot 
> get TM factory - retrying...
> 2011-04-14 10:24:58,465 : JOTMTransactionService.__doStart : Cannot 
> get TM factory - retrying...
> 2011-04-14 10:25:02,466 : JOTMTransactionService.__doStart : Cannot 
> get TM factory - retrying...
> 2011-04-14 10:25:08,467 : JOTMTransactionService.__doStart : Cannot 
> get TM factory - retrying...
> 2011-04-14 10:25:16,131 : ServiceManagerImpl.__checkServiceStates : 
> JOnAS server cannot reach the RUNNING state
> 2011-04-14 10:25:16,131 : ServiceManagerImpl.__checkServiceStates : 
> Service 'jtm' is not running
> 2011-04-14 10:25:16,132 : ServiceManagerImpl.__checkServiceStates : 
> Service 'dbm' is not running
> 2011-04-14 10:25:16,132 : ServiceManagerImpl.__checkServiceStates : 
> Service 'resource' is not running
> 2011-04-14 10:25:16,133 : ServiceManagerImpl.__checkServiceStates : 
> Service 'web' is not running
> 2011-04-14 10:25:16,133 : ServiceManagerImpl.__checkServiceStates : 
> Service 'depmonitor' is not running
> 2011-04-14 10:25:16,133 : ServiceManagerImpl.__checkServiceStates : 
> Service 'wm' is not running
> 2011-04-14 10:25:16,134 : ServiceManagerImpl.__checkServiceStates : 
> Please check the JOnAS server configuration.
> 2011-04-14 10:25:16,468 : JOTMTransactionService.__doStart : Cannot 
> get TM factory - retrying...
> 2011-04-14 10:25:26,470 : JOTMTransactionService.__doStart : 
> TransactionService: Cannot get TM factory:
> javax.naming.NamingException: TransactionService: Cannot get TM factory
> 2011-04-14 10:25:26,471 : LoggerService.log : [ERROR] 
> org.ow2.jonas.tm.jotm.JOTMTransactionService : 
> [org.ow2.jonas.tm.jotm.JOTMTransactionService.277b9268-66e9-49c4-99b7-544a58f24544] 
> The callback method start has thrown an exception : 
> TransactionService: Cannot get TM factory: 
> javax.naming.NamingException: TransactionService: Cannot get TM factory
> org.ow2.jonas.service.ServiceException : TransactionService: Cannot 
> get TM factory: javax.naming.NamingException: TransactionService: 
> Cannot get TM factory
>     at 
> org.ow2.jonas.tm.jotm.JOTMTransactionService.__doStart(JOTMTransactionService.java:254)
>     at 
> org.ow2.jonas.tm.jotm.JOTMTransactionService.doStart(JOTMTransactionService.java)
>     at 
> org.ow2.jonas.lib.service.AbsServiceImpl.start(AbsServiceImpl.java:95)
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>     at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>     at java.lang.reflect.Method.invoke(Method.java:616)
>     at org.apache.felix.ipojo.util.Callback.call(Callback.java:231)
>     at org.apache.felix.ipojo.util.Callback.call(Callback.java:191)
>     at 
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallback.call(LifecycleCallback.java:86)
>     at 
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.__stateChanged(LifecycleCallbackHandler.java:162)
>     at 
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.stateChanged(LifecycleCallbackHandler.java)
>     at 
> org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:428)
>     at 
> org.apache.felix.ipojo.InstanceManager.start(InstanceManager.java:309)
>     at 
> org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.java:155)
>     at 
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:283)
>     at 
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:220)
>     at org.apache.felix.ipojo.IPojoFactory.updated(IPojoFactory.java:588)
>     at 
> org.apache.felix.cm.impl.ConfigurationManager$UpdateConfiguration.run(ConfigurationManager.java:1253)
>     at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:88)
> Caused by: javax.naming.NamingException: TransactionService: Cannot 
> get TM factory
>     at 
> org.ow2.jonas.tm.jotm.JOTMTransactionService.__doStart(JOTMTransactionService.java:239)
>     ... 19 more
>
> Did i miss something ?
>
> Thank you for your help,
>
>
> Sontung


-- 

----------------------------------------------------------------
Benoit Pelletier
http://jonas.ow2.org
Bull, Architect of an Open World TM
http://www.bull.com