jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gadbury <gadb...@googlemail.com>
Subject User Managed Transactions...
Date Mon, 27 Jul 2009 20:44:21 GMT

Hi all,

I have a number of Jcr-based Daos that operate on my beans.  In some cases,
I have been using the session as a means to control a simple transaction. 
For example, I create a session and pass it to two different DAO create()
methods.  Only when all my Dao work is complete do I call session.save(). 
See my example code below:


	Session session = getSession();

	JcrUserDao userDao = new JcrUserDao();
	JcrProductDao productDao = new JcrProductDao();

	userDao.create(aUser, session);

	productDao.create(aProduct, session);

	session.save();


The problem I have is that during a single transaction, I would like to
create a multiple value property that contains strings for all node UUIDs
create during the single transaction (i.e. hold 'weak' references to any
newly created node UUIDs).  I read in the specification that it is not safe
to use a referenceable node's UUID until session.save() has been called and
the changes have been persisted.  However, with the above example, if I call
save() before the two create methods have completed, I ruin my simple
transaction.

I have been reading the spec again regarding user managed transactions. 
Consider the following code:


	Session session = getSession();

	// Get user transaction (for example, through JNDI)
	UserTransaction utx = ... 

	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();


After the first call to session.save(), would it then be safe to get a
node's UUID?

For example, in my JcrProductDao's create() method I create one Product node
and then call another Dao to create N number of Element nodes.  I would like
my multiple value property of Product to hold all new Element node UUIDs.

However, I also read this in the JCR 1.0 spec:

	"Note, however, that changes made in the transient storage are not recorded
by a transaction.
	This means that a rollback will not revert changes made to the transient
storage of the Session.
	After a rollback the Session object state will still contain any pending
changes that were present before the rollback."

I don't mind if I cannot revert a session's pending changes just as long as
I can control when the changes are made persistent with a user managed
transaction.

Any help or advice would be greatly appreciated.  Thanks for reading.
-- 
View this message in context: http://www.nabble.com/User-Managed-Transactions...-tp24687924p24687924.html
Sent from the Jackrabbit - Users mailing list archive at Nabble.com.


Mime
View raw message