Ok this makes sense. Thanks guys. Regards, Rus Pandey
On 8/9/06, Marcel Reutegger <[EMAIL PROTECTED]> wrote:
Hi, A query is always executed against the persistent workspace content the session is connected to. Which means it does not take un-committed content into account. The spec says: <spec> 6.6.7 Search Scope A query searches the persistent workspace associated with the current session. It does not search any pending changes that may be recorded on the session but not yet saved. </spec> The last sentence is a bit misleading because it does not take XA transactions into account. Later in the spec there is this clarification: <spec> 7.1.1.3 Effect of Transactions In repositories that support transactions, all changes, whether workspace-direct or session-mediated, may be further insulated from persistent storage by their transaction context. If a set of write methods is within the scope of a transaction then the changes they make will only be reflected in persistent storage upon commit of that transaction. </spec> Section "8.1.3 Save vs. Commit" also talks about the effects of XA transactions in more detail. regards marcel Rasik Pandey wrote: > Hi Jackrabbit Developers, > > Could someone have a look at the thread I posted over on the Spring JCR > forum. > > http://forum.springframework.org/showthread.php?t=27738 > > Essentially, I am unable to save nodes and then query and find them > within the same session and transaction. One thing to keep in mind, is > that the transaction is never committed in my scenario. I am able to > reproduce this same behavior in Jackrabbit's XATest case by adding few > lines of code to the testAddNodeCommit method. Basically, I run a > query after saving the testRootNode and prior to committing the > transaction. You will see a second assertion which succeeds after the > commit. > > Regards, > Rus Pandey > > /** > * Add a node inside a transaction and commit changes. Make sure > * node exists for other sessions only after commit. > * @throws Exception > */ > public void testAddNodeCommit() throws Exception { > // get user transaction object > UserTransaction utx = new UserTransactionImpl(superuser); > > // start transaction > utx.begin(); > > // add node and save > Node n = testRootNode.addNode(nodeName1, testNodeType); > n.addMixin(mixReferenceable); > testRootNode.save(); > > > Query q = > superuser.getWorkspace().getQueryManager().createQuery("//"+nodeName1, > Query.XPATH); > assertEquals("1 result Node from querying before commit AND > after save", > 1, q.execute().getNodes().getSize()); > > // assertion: node exists in this session > try { > superuser.getNodeByUUID(n.getUUID()); > } catch (ItemNotFoundException e) { > fail("New node not visible after save()"); > } > > // assertion: node does not exist in other session > Session otherSuperuser = helper.getSuperuserSession(); > > try { > otherSuperuser.getNodeByUUID(n.getUUID()); > fail("Uncommitted node visible for other session"); > } catch (ItemNotFoundException e) { > /* expected */ > } > > // commit > utx.commit(); > > assertEquals("1 result Node from querying after commit", > 1, q.execute().getNodes().getSize()); > > // assertion: node exists in this session > try { > otherSuperuser.getNodeByUUID(n.getUUID()); > } catch (ItemNotFoundException e) { > fail("Committed node not visible in this session"); > } > > // assertion: node also exists in other session > try { > otherSuperuser.getNodeByUUID(n.getUUID()); > } catch (ItemNotFoundException e) { > fail("Committed node not visible in other session"); > } > > // logout > otherSuperuser.logout(); > } >
