[
https://issues.apache.org/jira/browse/JCR-1685?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Rüdiger Groß-Hardt updated JCR-1685:
------------------------------------
Attachment: UserTransactionImpl.java
TransactionTest.java
TransactionTest.java: A JUnit test case, which demonstrates the problem
UserTransactionImpl.java: A UserTransaction implementation from the core test
classes (v1.3.1)
> Version node still accessible after transaction rollback
> --------------------------------------------------------
>
> Key: JCR-1685
> URL: https://issues.apache.org/jira/browse/JCR-1685
> Project: Jackrabbit
> Issue Type: Bug
> Components: jackrabbit-core, transactions, versioning
> Affects Versions: core 1.4.5
> Environment: Windows Vista, Java 1.5.0, Derby Database for versioning
> and workspace, JUnit 4 Testcase
> Reporter: Rüdiger Groß-Hardt
> Attachments: TransactionTest.java, UserTransactionImpl.java
>
>
> * Open a transaction
> * Add a new versionable node and check it in
> * Save the uuid of the version node returned by node.checkin()
> * Rollback transaction AND call session.refresh(false)
> * access version (!) node by session.getNodeByUUID()
> ==> in spite of the rollback the version node is still found. If the path of
> the version node is used to look it up (session.getItem()), it fails
> The following JUnit 4 test case demonstrates the problem:
> @Test
> public void testRollbackInline() throws Exception {
> // start transaction for session
> UserTransactionImpl tx = new UserTransactionImpl(superuser);
> tx.begin();
> // add new node and save
> Node node = superuser.getRootNode().addNode("test001",
> "nt:unstructured");
> node.addMixin("mix:versionable");
> superuser.save();
> // checkin version and save uuid
> Version v = node.checkin();
> String uuid = v.getUUID();
> // rollback transaction for session
> tx.rollback();
> // clear transient storage
> superuser.refresh(false);
> // check, whether new version was really "rolled back"
> assertFalse(hasVersionWorks(uuid));
> assertFalse(hasVersionFails(uuid));
> }
> private boolean hasVersionFails(String versionId) throws
> RepositoryException {
> boolean hasVersion;
> try {
> Node nodeByUUID = superuser.getNodeByUUID(versionId);
> hasVersion = nodeByUUID != null;
> } catch (ItemNotFoundException e) {
> hasVersion = false;
> }
> if (hasVersion)
> System.err.println("hasVersionFailing: " + versionId + " ==>
> FOUND");
> else
> System.err.println("hasVersionFailing: " + versionId + " ==> NOT
> FOUND");
> return hasVersion;
> }
> private boolean hasVersionWorks(String versionId) throws
> RepositoryException {
> boolean hasVersion;
> try {
> Node nodeByUUID = superuser.getNodeByUUID(versionId);
> String path = nodeByUUID.getPath();
> hasVersion = superuser.itemExists(path);
> } catch (ItemNotFoundException e) {
> hasVersion = false;
> }
> if (hasVersion)
> System.err.println("hasVersionWorking: " + versionId + " ==>
> FOUND");
> else
> System.err.println("hasVersionWorking: " + versionId + " ==> NOT
> FOUND");
> return hasVersion;
> }
> I will try to attach the complete test sources, which also shows the setup of
> the repository, though I did nothing special there.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.