jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gadbury <gadb...@googlemail.com>
Subject Re: User Managed Transactions...
Date Mon, 03 Aug 2009 10:50:30 GMT

Thank you Ian for your response.  I appreciate it.  Unfortunately, I am now a
bit lost, going around in circles and banging my head against a brick wall
:)

I am using Tomcat 6.0 + JOTM 2.1.4 (also, I am not using spring-modules-jcr)
and I am able to get my UserTransaction via JNDI (it is casted from an
org.objectweb.jotm.Current object, which implements javax.transaction
TransactionManager and UserTransaction interfaces).  I have also tried
casting the Current object to TransactionManager and calling
transactionManager.getTransaction(), but no Transaction is returned.

I'm not sure what else to try.  I thought Jackrabbit did support user and
container-managed transactions...?  There seems to be no easy way for me to
retrieve a Transaction or TransactionManager object with the setup I am
using (although most likely I am just being stupid!).  I have had a look at
the container-managed transactions part of the JCR 1.0 spec (associating the
resource with a global transaction using the myXAResource.start(xid,
TMNOFLAGS) and myXAResource.end(xid, TMSUSPEND); ), but that seems a bit
heavy-weight.  By the way, what happened to the XIDHelper class?

Is there anyone out there that uses Tomcat, JOTM and transactions?


Ian Boston wrote:
> 
> I will have a go at answering, but no guarantees :)
> On 1 Aug 2009, at 11:56, Gadbury wrote:
> 
>>
>> Hi Ian,
>>
>> Thank you for the pointers.  Was I wrong to use UserTransaction?
> 
> I think (but I could be completely wrong), UserTransaction is  
> generally a wrapper for the TransactionManager so when you create a  
> user transaction jndi will associate the user transaction with the  
> TransactionManager, and then the UserTransaction will proxy the  
> remaining calls through to the TransactionManager (at least thats the  
> case with Geronimo)
> 
> You need to bind the JCR session into the transaction, which cant be  
> done with a UserTransaction where the wiring is within the  
> TransactionManager impl, usually bound to the JDBC data source. So  
> your right to use UserTransaction for JDBC/Datasource, but wrong to  
> use it for JCR. (IIRC)
> 
>>  What type
>> of tranasction is that in your example  It looks to me like you're  
>> using
>> Transaction and TransactionManager interfaces from javax.transaction.
> 
> yes
> 
>> How
>> do I get a TransactionManager instance?  Can I still use JNDI or is  
>> there an
>> alternative (in fact, JNDI presents me a problem with unit testing as
>> without the web application running on the Tomcat server, the JNDI  
>> lookup
>> cannot get the UserTransaction instance) ?
> 
> you *should* be able to look up the transaction manager from jNDI *or*  
> for unit testing, create a new instance of the TransactionManager. I  
> have been using Geronimo in OSGi with Sling/Jackrabbit and its just a  
> new GeronimoTransactionManager(defaultTransactionTimeoutSeconds); to  
> get one (only one per transaction context)
> 
>>
>> Sorry for the silly questions.  Thanks for your time.  Regards,
>>
>> James
>>
>>
>> Ian Boston wrote:
>>>
>>> IIRC you have to bind the jcr session to the transaction. In
>>> Jackrabbit the session is actually an XASession with a  
>>> getXAResource()
>>> method so you can bind the session with something like this.
>>>
>>> Transaction transaction = transactionManager.getTransaction();
>>>       if (transaction != null) {
>>>
>>> transaction.enlistResource(((XASession)session).getXAResource());
>>>       }
>>>
>>>
>>> HTH
>>> Ian
>>>
>>> On 31 Jul 2009, at 17:26, Gadbury wrote:
>>>
>>>>
>>>> Hi all,
>>>>
>>>> I have finally managed to get somewhere with jotm and Tomcat 6.0
>>>> having
>>>> followed the tutorial provided in the above links.  I am finally
>>>> getting the
>>>> UserTransaction via JNDI lookup (after classloader issues and naming
>>>> exceptions) and I am testing that new
>>>> InitialContext().lookup("java:comp/UserTransaction"); is an instance
>>>> of
>>>> UserTranasction.
>>>>
>>>> Unfortunately, every session.save() called in between the
>>>> utx.begin() and
>>>> utx.commit() persists changes so the UserTranasction is not having  
>>>> an
>>>> effect.  I was hoping that session.save() would not persist changes
>>>> in the
>>>> scope of a UserTranasction but would ensure that node UUIDs are
>>>> permanently
>>>> assigned to new nodes.  For example:
>>>>
>>>>       Session session = getSession();
>>>>
>>>>       // Get user transaction (for example, through JNDI)
>>>>       UserTransaction utx = (UserTransaction) new
>>>> InitialContext().lookup("java:comp/UserTransaction");
>>>>
>>>>       JcrUserDao userDao = new JcrUserDao();
>>>>       JcrProductDao productDao = new JcrProductDao();
>>>>
>>>>       utx.begin();
>>>>
>>>>       Node newUserNode = userDao.create(aUser, session);
>>>>
>>>>       session.save();
>>>>
>>>>       String UUID = newUserNode.getUUID();
>>>>
>>>>       Node newProductNode = productDao.create(aProduct, session);
>>>>
>>>>       session.save();
>>>>
>>>>       utx.commit();
>>>>
>>>> If I step through the above code in debug within Eclipse, and
>>>> terminate the
>>>> Tomcat server after the first session.save() but before the
>>>> utx.commit(), I
>>>> can see that the the changes are made by the first Dao method call
>>>> userDao.create(aUser, session) are persisted.
>>>>
>>>> So far I have put all the required jotm jars in %TOMCAT_HOME%/lib
>>>> from the
>>>> distribution bundle jotm 2.1.4.
>>>>
>>>> My context.xml is configured with:
>>>>
>>>> <Transaction factory="org.objectweb.jotm.UserTransactionFactory"/>
>>>>
>>>>
>>>> My carol.properties is saved in WEB-INF/Classes and is as follows:
>>>>
>>>> # JNDI (Protocol Invocation)
>>>> carol.protocols=jrmp
>>>>
>>>> # Local RMI Invocation
>>>> carol.jvm.rmi.local.call=true
>>>>
>>>> # do not use CAROL JNDI wrapper
>>>> carol.start.jndi=false
>>>>
>>>> # do not start a name server
>>>> carol.start.ns=false
>>>>
>>>> # Naming Factory
>>>> carol.jndi.java.naming.factory.url.pkgs=org.apache.naming
>>>>
>>>>
>>>> Is there some further configuration required?  No exceptions are  
>>>> being
>>>> thrown any more and the UserTransaction is retrieved via JNDI lookup
>>>> yet the
>>>> UserTranasction appears not to be functioning as expected.
>>>>
>>>> Any advice would be greatly appreciated.  Thanks for your time.
>>>> Regards,
>>>>
>>>> James.
>>>>
>>>>
>>>>
>>>> Vijay Pandey wrote:
>>>>>
>>>>> There might be a line break and you might not be copying the full
>>>>> URL. I
>>>>> just checked and the URL is alive.
>>>>>
>>>>> -----Original Message-----
>>>>> From: Gadbury [mailto:gadbury@googlemail.com]
>>>>> Sent: Thursday, July 30, 2009 3:59 PM
>>>>> To: users@jackrabbit.apache.org
>>>>> Subject: RE: User Managed Transactions...
>>>>>
>>>>>
>>>>> Thank you Vijay, I shall take a closer look tomorrow.  By the way,
>>>>> the
>>>>> second
>>>>> link gives me a 404.
>>>>>
>>>>> Cheers,
>>>>>
>>>>> James
>>>>>
>>>>>
>>>>> Vijay Pandey wrote:
>>>>>>
>>>>>> You might want to take a look at this
>>>>>>
>>>>>>
>>>>> http://static.raibledesigns.com/downloads/howto-tomcat-jotm.html#5.5-config
>>>>>>
>>>>>> along with this
>>>>>>
>>>>>>
>>>>> http://www.nabble.com/Re%3A-UserTransaction%2C-JOTM-and-Tomcat-5.5.x-p288894
>>>>>> 3.html
>>>>>>
>>>>>> Vijay
>>>>>>
>>>>>> -----Original Message-----
>>>>>> From: Gadbury [mailto:gadbury@googlemail.com]
>>>>>> Sent: Thursday, July 30, 2009 2:17 PM
>>>>>> To: users@jackrabbit.apache.org
>>>>>> Subject: Re: User Managed Transactions...
>>>>>>
>>>>>>
>>>>>> Hi again all.
>>>>>>
>>>>>> I have been trying to get javax.transaction.UserTransaction
>>>>>> working by
>>>>>> JNDI
>>>>>> lookup.  I use Eclipse Galileo and Tomcat 6.0.  I am trying trying
>>>>>> retreive
>>>>>> a UserTransaction as follows  (I have tried both):
>>>>>>
>>>>>> UserTransaction utx = new
>>>>>> InitialContext().lookup("java:comp/UserTransaction");
>>>>>>
>>>>>> UserTransaction utx = new
>>>>>> InitialContext().lookup("java:comp/env/UserTransaction");
>>>>>>
>>>>>> However, an exception is thrown stating that I must setup a system
>>>>>> or
>>>>>> environment property, or the application context.  Do I need to
>>>>>> configure
>>>>>> the resource and / or environment elements in context.xml?  For
>>>>>> example,
>>>>>> the
>>>>>> resource configuration:
>>>>>>
>>>>>> <context>
>>>>>> <Resource name="UserTransaction" auth="Container"
>>>>>>   type="javax.transaction.UserTransaction"/>
>>>>>> <ResourceParams name="UserTransaction">
>>>>>>   <parameter>
>>>>>>     <name>factory</name>
>>>>>>     <value>org.objectweb.jotm.UserTransactionFactory</value>
>>>>>>   </parameter>
>>>>>>   <parameter>
>>>>>>     <name>jotm.timeout</name>
>>>>>>     <value>60</value>
>>>>>>   </parameter>
>>>>>> </ResourceParams>
>>>>>> </context>
>>>>>>
>>>>>> Does Tomcat 6.0 support UserTransaction by JNDI, or do I need to
 
>>>>>> use
>>>>>> another
>>>>>> technology such as JOTM or Jencks?  Ideally I wouldn't have to
>>>>>> install
>>>>>> and
>>>>>> configure one of the other technologies.
>>>>>>
>>>>>> Thanks for reading.  Kind regards,
>>>>>>
>>>>>> James
>>>>>> -- 
>>>>>> View this message in context:
>>>>>>
>>>>> http://www.nabble.com/User-Managed-Transactions...-tp24687924p24745618.html
>>>>>> Sent from the Jackrabbit - Users mailing list archive at  
>>>>>> Nabble.com.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> -- 
>>>>> View this message in context:
>>>>> http://www.nabble.com/User-Managed-Transactions...-tp24687924p24747221.html
>>>>> Sent from the Jackrabbit - Users mailing list archive at  
>>>>> Nabble.com.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>> -- 
>>>> View this message in context:
>>>> http://www.nabble.com/User-Managed-Transactions...-tp24687924p24759260.html
>>>> Sent from the Jackrabbit - Users mailing list archive at Nabble.com.
>>>>
>>>
>>>
>>>
>>
>> -- 
>> View this message in context:
>> http://www.nabble.com/User-Managed-Transactions...-tp24687924p24768096.html
>> Sent from the Jackrabbit - Users mailing list archive at Nabble.com.
>>
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/User-Managed-Transactions...-tp24687924p24788686.html
Sent from the Jackrabbit - Users mailing list archive at Nabble.com.


Mime
View raw message