jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rasik Pandey" <rbpan...@gmail.com>
Subject Re: Transactions Saving Querying
Date Wed, 09 Aug 2006 11:37:52 GMT
Ok this makes sense. Thanks guys.

Regards,
Rus Pandey

On 8/9/06, Marcel Reutegger <marcel.reutegger@gmx.net> 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();
> >    }
> >
>

Mime
View raw message