jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ian Boston <...@tfd.co.uk>
Subject Re: User Managed Transactions...
Date Mon, 03 Aug 2009 08:49:49 GMT
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.
>


Mime
View raw message