Re: Re: Re: Re: Re: Distribued JOTM transaction between 2 jonasses

Guillaume Sauthier <[email protected]> Thu, 14 Apr 2011 16:46:23 +0200
Newsgroups gmane.comp.java.objectweb.jonas
Organization Objectweb Consortium
Message-ID <[email protected]>
There is no propagation of transactions between the message producer 
(WebApp1) and the message consummer (MDB in WebApp2).
--G

Le 14/04/2011 16:13, Son Tung Nguyen a écrit :
> Benoit,
>
> You said :
>
> "JOTM does support the distributed transaction with multiples XA 
> resources (database + queue provider).
> However it doesn't support nested transactions."
>
> Do you mean JOTM is likely flat transaction model (because it does not 
> support nested transactions) ?
>
> So i don't understand the purpose or comments :
>
> # 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.
>
> Or perhaps i didn't get the point.
>
> Thanks for your advance.
>
> Regards
>
> Sontung
>
> 2011/4/14 Benoit Pelletier <[email protected] 
> <mailto:[email protected]>>
>
>     JOTM does support the distributed transaction with multiples XA
>     resources (database + queue provider).
>     However it doesn't support nested transactions.
>     Regards;
>
>>     Hi Benoit,
>>
>>     "[ ... ] I'm not sure where is located this code (likely WebAp2)"
>>
>>     Yes, I use spring JMS container listener (MDP) in WebAp2, and the
>>     transactional annotation of onMessage method is
>>     @Transactional(propagation=Propagation.MANDATORY).
>>
>>
>>     "If T2 rollbacks, it doesn't cause a rollback for T1 !"
>>
>>     I thought that JOTM is an implementation of JTA technologies, so
>>     it supports XA transactions. I would expect that T1 and T2 have
>>     (participated in to) the same global transaction (XA) that's
>>     driven by JOTM between Jonasses ...
>>
>>     If i's so, JOTM implementation is just for local use of a jonas ?
>>     How can i configure jonasses to have transactions that across 2
>>     servers (between Webaps)  for carying out integrity of
>>     informations ?
>>
>>     Regards,
>>
>>     Sontung
>>
>>     2011/4/14 Benoit Pelletier <[email protected]
>>     <mailto:[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
>>              
>>
>
>
>     -- 
>
>     ----------------------------------------------------------------
>     Benoit Pelletier
>     http://jonas.ow2.org
>     Bull, Architect of an Open World TM
>     http://www.bull.com
>
>
>
>
> -- 
> ~~~~~~~~~~~~~~~~~~~
> Sontung NGUYEN
> Master M2IRT - ITIN
> E-mail: [email protected] <mailto:[email protected]>
> Liberté - Sécurité - Gratossité
> --------> Unixité/Linuxité <--------
Guillaume_Sauthier.vcf (text/x-vcard, 387 B)
begin:vcard
fn:Guillaume Sauthier
n:Sauthier;Guillaume
org:<a href="http://www.ow2.org"><img title="OW2" alt="OW2 Consortium" border="0" src="http://www.ow2.org/xwiki/bin/skin/XWiki/DefaultSkin/logoOW2.png" /></a>
adr:;;;;;;France
email;internet:[email protected]
title:<a href="http://jonas.ow2.org">JOnAS Application Server</a>
url:http://jonas.ow2.org
version:2.1
end:vcard