Search in sources :

Example 6 with TransientRepository

use of org.apache.jackrabbit.core.TransientRepository in project camel by apache.

the class JcrRouteDifferentWorkspaceTestSupport method createJndiContext.

@Override
protected Context createJndiContext() throws Exception {
    File config = new File(CONFIG_FILE);
    if (!config.exists()) {
        throw new FileNotFoundException("Missing config file: " + config.getPath());
    }
    Context context = super.createJndiContext();
    repository = new TransientRepository(CONFIG_FILE, REPO_PATH);
    context.bind("repository", repository);
    return context;
}
Also used : Context(javax.naming.Context) TransientRepository(org.apache.jackrabbit.core.TransientRepository) FileNotFoundException(java.io.FileNotFoundException) File(java.io.File)

Example 7 with TransientRepository

use of org.apache.jackrabbit.core.TransientRepository in project jackrabbit by apache.

the class AutoFixCorruptNode method testMissingRootVersion2.

// similar to above, but disconnects version history before damaging the repository
public void testMissingRootVersion2() throws Exception {
    // new repository
    TransientRepository rep = new TransientRepository(new File(TEST_DIR));
    Session s = openSession(rep, false);
    String oldVersionRecoveryProp = System.getProperty("org.apache.jackrabbit.version.recovery");
    try {
        Node root = s.getRootNode();
        // add nodes /test and /test/missing
        Node test = root.addNode("test");
        test.addMixin("mix:versionable");
        s.save();
        Node vhr = s.getWorkspace().getVersionManager().getVersionHistory(test.getPath());
        assertNotNull(vhr);
        Node brokenNode = vhr.getNode("jcr:rootVersion");
        String vhrId = vhr.getIdentifier();
        UUID destroy = UUID.fromString(brokenNode.getIdentifier());
        // disable versioning
        test.removeMixin("mix:versionable");
        s.save();
        s.logout();
        destroyBundle(destroy, "version");
        s = openSession(rep, false);
        ConsistencyReport report = TestHelper.checkVersionStoreConsistency(s, false, null);
        assertTrue("Report should have reported broken nodes", !report.getItems().isEmpty());
        s.logout();
        System.setProperty("org.apache.jackrabbit.version.recovery", "true");
        s = openSession(rep, false);
        s.logout();
        s = openSession(rep, false);
        test = s.getRootNode().getNode("test");
        // versioning should still be disabled
        assertFalse(test.isNodeType("mix:versionable"));
        // try to enable versioning again
        test.addMixin("mix:versionable");
        s.save();
        Node oldVHR = s.getNodeByIdentifier(vhrId);
        Node newVHR = s.getWorkspace().getVersionManager().getVersionHistory(test.getPath());
        assertTrue("old and new version history path should be different: " + oldVHR.getPath() + " vs " + newVHR.getPath(), !oldVHR.getPath().equals(newVHR.getPath()));
        // name should be same plus suffix
        assertTrue(oldVHR.getName().startsWith(newVHR.getName()));
        // try a checkout / checkin
        s.getWorkspace().getVersionManager().checkout(test.getPath());
        s.getWorkspace().getVersionManager().checkin(test.getPath());
        validateDisconnectedVHR(oldVHR);
    } finally {
        s.logout();
        System.setProperty("org.apache.jackrabbit.version.recovery", oldVersionRecoveryProp == null ? "" : oldVersionRecoveryProp);
    }
}
Also used : TransientRepository(org.apache.jackrabbit.core.TransientRepository) Node(javax.jcr.Node) UUID(java.util.UUID) File(java.io.File) ConsistencyReport(org.apache.jackrabbit.core.persistence.check.ConsistencyReport) Session(javax.jcr.Session)

Example 8 with TransientRepository

use of org.apache.jackrabbit.core.TransientRepository in project jackrabbit by apache.

the class AutoFixCorruptNode method testOrphan.

public void testOrphan() throws Exception {
    // new repository
    TransientRepository rep = new TransientRepository(new File(TEST_DIR));
    Session s = openSession(rep, false);
    try {
        Node root = s.getRootNode();
        Node parent = root.addNode("parent");
        Node test = parent.addNode("test");
        test.addMixin("mix:referenceable");
        String lost = test.getIdentifier();
        Node lnf = root.addNode("lost+found");
        lnf.addMixin("mix:referenceable");
        String lnfid = lnf.getIdentifier();
        s.save();
        Node brokenNode = parent;
        UUID destroy = UUID.fromString(brokenNode.getIdentifier());
        s.logout();
        destroyBundle(destroy, "workspaces/default");
        s = openSession(rep, false);
        ConsistencyReport report = TestHelper.checkConsistency(s, false, null);
        assertTrue("Report should have reported broken nodes", !report.getItems().isEmpty());
        // now retry with lost+found functionality
        ConsistencyReport report2 = TestHelper.checkConsistency(s, true, lnfid);
        assertTrue("Report should have reported broken nodes", !report2.getItems().isEmpty());
        s.logout();
        s = openSession(rep, false);
        Node q = s.getNodeByIdentifier(lost);
        // check the node was moved
        assertEquals(lnfid, q.getParent().getIdentifier());
    } finally {
        s.logout();
    }
}
Also used : TransientRepository(org.apache.jackrabbit.core.TransientRepository) Node(javax.jcr.Node) UUID(java.util.UUID) File(java.io.File) ConsistencyReport(org.apache.jackrabbit.core.persistence.check.ConsistencyReport) Session(javax.jcr.Session)

Example 9 with TransientRepository

use of org.apache.jackrabbit.core.TransientRepository in project jackrabbit by apache.

the class AutoFixCorruptNode method testMissingRootVersion.

public void testMissingRootVersion() throws Exception {
    // new repository
    TransientRepository rep = new TransientRepository(new File(TEST_DIR));
    Session s = openSession(rep, false);
    String oldVersionRecoveryProp = System.getProperty("org.apache.jackrabbit.version.recovery");
    try {
        Node root = s.getRootNode();
        // add nodes /test and /test/missing
        Node test = root.addNode("test", "nt:file");
        test.addNode("jcr:content", "nt:unstructured");
        test.addMixin("mix:versionable");
        s.save();
        s.getWorkspace().getVersionManager().checkout(test.getPath());
        s.getWorkspace().getVersionManager().checkin(test.getPath());
        Node vhr = s.getWorkspace().getVersionManager().getVersionHistory(test.getPath());
        assertNotNull(vhr);
        Node brokenNode = vhr.getNode("jcr:rootVersion");
        String vhrId = vhr.getIdentifier();
        UUID destroy = UUID.fromString(brokenNode.getIdentifier());
        s.logout();
        destroyBundle(destroy, "version");
        s = openSession(rep, false);
        ConsistencyReport report = TestHelper.checkVersionStoreConsistency(s, false, null);
        assertTrue("Report should have reported broken nodes", !report.getItems().isEmpty());
        try {
            test = s.getRootNode().getNode("test");
            vhr = s.getWorkspace().getVersionManager().getVersionHistory(test.getPath());
            fail("should not get here");
        } catch (Exception ex) {
        // expected
        }
        s.logout();
        System.setProperty("org.apache.jackrabbit.version.recovery", "true");
        s = openSession(rep, false);
        test = s.getRootNode().getNode("test");
        // versioning should be disabled now
        assertFalse(test.isNodeType("mix:versionable"));
        try {
            // try to enable versioning again
            test.addMixin("mix:versionable");
            s.save();
            fail("enabling versioning succeeded unexpectedly");
        } catch (Exception e) {
        // we expect this to fail
        }
        s.logout();
        // now redo after running fixup on versioning storage
        s = openSession(rep, false);
        report = TestHelper.checkVersionStoreConsistency(s, true, null);
        assertTrue("Report should have reported broken nodes", !report.getItems().isEmpty());
        int reportitems = report.getItems().size();
        // problems should now be fixed
        report = TestHelper.checkVersionStoreConsistency(s, false, null);
        assertTrue("Some problems should have been fixed but are not: " + report, report.getItems().size() < reportitems);
        test = s.getRootNode().getNode("test");
        // versioning should be disabled now
        assertFalse(test.isNodeType("mix:versionable"));
        // jcr:uuid property should still be present
        assertTrue(test.hasProperty("jcr:uuid"));
        // ...and have a proper definition
        assertNotNull(test.getProperty("jcr:uuid").getDefinition().getName());
        // try to enable versioning again
        test.addMixin("mix:versionable");
        s.save();
        Node oldVHR = s.getNodeByIdentifier(vhrId);
        Node newVHR = s.getWorkspace().getVersionManager().getVersionHistory(test.getPath());
        assertTrue("old and new version history path should be different: " + oldVHR.getPath() + " vs " + newVHR.getPath(), !oldVHR.getPath().equals(newVHR.getPath()));
        // name should be same plus suffix
        assertTrue(oldVHR.getName().startsWith(newVHR.getName()));
        // try a checkout / checkin
        s.getWorkspace().getVersionManager().checkout(test.getPath());
        s.getWorkspace().getVersionManager().checkin(test.getPath());
        validateDisconnectedVHR(oldVHR);
    } finally {
        s.logout();
        System.setProperty("org.apache.jackrabbit.version.recovery", oldVersionRecoveryProp == null ? "" : oldVersionRecoveryProp);
    }
}
Also used : TransientRepository(org.apache.jackrabbit.core.TransientRepository) Node(javax.jcr.Node) UUID(java.util.UUID) File(java.io.File) ConsistencyReport(org.apache.jackrabbit.core.persistence.check.ConsistencyReport) ConstraintViolationException(javax.jcr.nodetype.ConstraintViolationException) ItemNotFoundException(javax.jcr.ItemNotFoundException) SQLException(java.sql.SQLException) RepositoryException(javax.jcr.RepositoryException) Session(javax.jcr.Session)

Example 10 with TransientRepository

use of org.apache.jackrabbit.core.TransientRepository in project jackrabbit by apache.

the class AutoFixCorruptNode method testMissingVHR.

public void testMissingVHR() throws Exception {
    // new repository
    TransientRepository rep = new TransientRepository(new File(TEST_DIR));
    Session s = openSession(rep, false);
    String oldVersionRecoveryProp = System.getProperty("org.apache.jackrabbit.version.recovery");
    try {
        Node root = s.getRootNode();
        Node test = root.addNode("test");
        test.addMixin("mix:versionable");
        s.save();
        Node vhr = s.getWorkspace().getVersionManager().getVersionHistory(test.getPath());
        assertNotNull(vhr);
        Node brokenNode = vhr;
        String vhrRootVersionId = vhr.getNode("jcr:rootVersion").getIdentifier();
        UUID destroy = UUID.fromString(brokenNode.getIdentifier());
        s.logout();
        destroyBundle(destroy, "version");
        s = openSession(rep, false);
        ConsistencyReport report = TestHelper.checkVersionStoreConsistency(s, false, null);
        assertTrue("Report should have reported broken nodes", !report.getItems().isEmpty());
        try {
            test = s.getRootNode().getNode("test");
            vhr = s.getWorkspace().getVersionManager().getVersionHistory(test.getPath());
            fail("should not get here");
        } catch (Exception ex) {
        // expected
        }
        s.logout();
        System.setProperty("org.apache.jackrabbit.version.recovery", "true");
        s = openSession(rep, false);
        test = s.getRootNode().getNode("test");
        // versioning should be disabled now
        assertFalse(test.isNodeType("mix:versionable"));
        try {
            // try to enable versioning again
            test.addMixin("mix:versionable");
            s.save();
            fail("enabling versioning succeeded unexpectedly");
        } catch (Exception e) {
        // we expect this to fail
        }
        s.logout();
        // now redo after running fixup on versioning storage
        s = openSession(rep, false);
        report = TestHelper.checkVersionStoreConsistency(s, true, null);
        assertTrue("Report should have reported broken nodes", !report.getItems().isEmpty());
        int reportitems = report.getItems().size();
        // problems should now be fixed
        report = TestHelper.checkVersionStoreConsistency(s, false, null);
        assertTrue("Some problems should have been fixed but are not: " + report, report.getItems().size() < reportitems);
        // get a fresh session
        s.logout();
        s = openSession(rep, false);
        test = s.getRootNode().getNode("test");
        // versioning should be disabled now
        assertFalse(test.isNodeType("mix:versionable"));
        // try to enable versioning again
        test.addMixin("mix:versionable");
        s.save();
        Node oldRootVersion = s.getNodeByIdentifier(vhrRootVersionId);
        try {
            String path = oldRootVersion.getPath();
            fail("got path " + path + " for a node believed to be orphaned");
        } catch (ItemNotFoundException ex) {
        // orphaned
        }
        Node newRootVersion = s.getWorkspace().getVersionManager().getVersionHistory(test.getPath()).getRootVersion();
        assertFalse("new root version should be a different node than the one destroyed by the test case", newRootVersion.getIdentifier().equals(vhrRootVersionId));
        assertNotNull("new root version should have a intact path", newRootVersion.getPath());
    } finally {
        s.logout();
        System.setProperty("org.apache.jackrabbit.version.recovery", oldVersionRecoveryProp == null ? "" : oldVersionRecoveryProp);
    }
}
Also used : TransientRepository(org.apache.jackrabbit.core.TransientRepository) Node(javax.jcr.Node) UUID(java.util.UUID) File(java.io.File) ConsistencyReport(org.apache.jackrabbit.core.persistence.check.ConsistencyReport) ConstraintViolationException(javax.jcr.nodetype.ConstraintViolationException) ItemNotFoundException(javax.jcr.ItemNotFoundException) SQLException(java.sql.SQLException) RepositoryException(javax.jcr.RepositoryException) Session(javax.jcr.Session) ItemNotFoundException(javax.jcr.ItemNotFoundException)

Aggregations

File (java.io.File)14 TransientRepository (org.apache.jackrabbit.core.TransientRepository)14 Node (javax.jcr.Node)10 Session (javax.jcr.Session)10 UUID (java.util.UUID)7 ConsistencyReport (org.apache.jackrabbit.core.persistence.check.ConsistencyReport)6 SimpleCredentials (javax.jcr.SimpleCredentials)5 RepositoryException (javax.jcr.RepositoryException)3 Context (javax.naming.Context)3 FileNotFoundException (java.io.FileNotFoundException)2 SQLException (java.sql.SQLException)2 ItemNotFoundException (javax.jcr.ItemNotFoundException)2 NodeIterator (javax.jcr.NodeIterator)2 ConstraintViolationException (javax.jcr.nodetype.ConstraintViolationException)2 AccessControlList (javax.jcr.security.AccessControlList)1 AccessControlManager (javax.jcr.security.AccessControlManager)1 AccessControlPolicyIterator (javax.jcr.security.AccessControlPolicyIterator)1 User (org.apache.jackrabbit.api.security.user.User)1 UserManager (org.apache.jackrabbit.api.security.user.UserManager)1 SessionImpl (org.apache.jackrabbit.core.SessionImpl)1