Hi,

 

I have got a problem when using jackrabbit with transactions. The following 
code works if the session is closed after the first commit or when doing the 
second checkin within the same transaction.

 

        /** begin code **/

        Session session = repository.login(credentials);

 

        JackRabbitUserTransaction ut = new JackRabbitUserTransaction(session);

        ut.begin();

 

        // insert new versionable node

        String name = "test"+ new Date().getTime();

        Node child = session.getRootNode().addNode(name);

        child.addMixin(JcrConstants.MIX_VERSIONABLE);

        session.save();

        VersionManager vm = session.getWorkspace().getVersionManager();

        vm.checkin(child.getPath());

 

        // commit the transaction

        ut.commit();

 

        // start new transaction

        ut = new JackRabbitUserTransaction(session);

        ut.begin();

 

        vm = session.getWorkspace().getVersionManager();

        child = session.getNode("/"+name);

        vm.checkout(child.getPath());

        child.setProperty("foo", "fooValue");

        session.save();

        vm.checkin(child.getPath());   // this line causes the NPE    

 

        ut.commit();

        session.logout();

        /** end code **/

 

I get the following stacktrace:

 

java.lang.NullPointerException

         at 
org.apache.jackrabbit.core.ItemManager.getDefinition(ItemManager.java:206)

         at org.apache.jackrabbit.core.ItemData.getDefinition(ItemData.java:99)

         at org.apache.jackrabbit.core.ItemManager.canRead(ItemManager.java:409)

         at 
org.apache.jackrabbit.core.ItemManager.createItemData(ItemManager.java:804)

         at 
org.apache.jackrabbit.core.ItemManager.getItemData(ItemManager.java:379)

         at org.apache.jackrabbit.core.ItemManager.getItem(ItemManager.java:316)

         at org.apache.jackrabbit.core.ItemManager.getItem(ItemManager.java:610)

         at 
org.apache.jackrabbit.core.SessionImpl.getNodeById(SessionImpl.java:493)

         at 
org.apache.jackrabbit.core.VersionManagerImpl$1.perform(VersionManagerImpl.java:122)

         at 
org.apache.jackrabbit.core.VersionManagerImpl$1.perform(VersionManagerImpl.java:114)

         at 
org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:200)

         at 
org.apache.jackrabbit.core.VersionManagerImpl.perform(VersionManagerImpl.java:95)

         at 
org.apache.jackrabbit.core.VersionManagerImpl.checkin(VersionManagerImpl.java:114)

         at 
org.apache.jackrabbit.core.VersionManagerImpl.checkin(VersionManagerImpl.java:100)

 

I’ve tried the same with geronimo’s transaction manager but with the same 
result. Do you really have to use a new session after each transaction 
commit/rollback?

 

Thanks for your help!

 

Marlis

Reply via email to