You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2010/05/27 14:47:36 UTC
svn commit: r948810 -
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
Author: jukka
Date: Thu May 27 12:47:35 2010
New Revision: 948810
URL: http://svn.apache.org/viewvc?rev=948810&view=rev
Log:
JCR-2640: Internal repository context
Streamline loadRootNodeId()
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java?rev=948810&r1=948809&r2=948810&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java Thu May 27 12:47:35 2010
@@ -20,7 +20,6 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.security.AccessControlContext;
import java.security.AccessController;
@@ -300,8 +299,8 @@ public class RepositoryImpl extends Abst
FileSystem repStore = repConfig.getFileSystem();
context.setFileSystem(repStore);
- // init root node uuid
- context.setRootNodeId(loadRootNodeId(repStore));
+ // Load root node identifier
+ context.setRootNodeId(loadRootNodeId());
// initialize repository descriptors
initRepositoryDescriptors();
@@ -540,103 +539,50 @@ public class RepositoryImpl extends Abst
}
/**
- * Returns the root node uuid.
- * @param fs
- * @return
- * @throws RepositoryException
+ * Returns the root node identifier. The identifier is loaded from
+ * the <code>meta/rootUUID</code> file within the repository file system.
+ * If such a file does not yet exist, the hardcoded default root node
+ * identifier ({@link #ROOT_NODE_ID}) is used and written to that file.
+ * <p>
+ * This utility method should only be used by the constructor after the
+ * repository file system has been initialised.
+ *
+ * @return root node identifier
+ * @throws RepositoryException if the identifier can not be loaded or saved
*/
- protected NodeId loadRootNodeId(FileSystem fs) throws RepositoryException {
- String fsRootPath = "/meta";
- try {
- if (!fs.exists(fsRootPath) || !fs.isFolder(fsRootPath)) {
- fs.createFolder(fsRootPath);
- }
- } catch (FileSystemException fse) {
- String msg = "failed to create folder for repository meta data";
- log.error(msg, fse);
- throw new RepositoryException(msg, fse);
- }
- fs = new BasedFileSystem(fs, fsRootPath);
-
- FileSystemResource uuidFile = new FileSystemResource(fs, "rootUUID");
+ private NodeId loadRootNodeId() throws RepositoryException {
try {
+ FileSystemResource uuidFile = new FileSystemResource(
+ context.getFileSystem(), "meta/rootUUID");
if (uuidFile.exists()) {
+ // Load uuid of the repository's root node. It is stored in
+ // text format (36 characters) for better readability.
+ InputStream in = uuidFile.getInputStream();
try {
- // load uuid of the repository's root node
- InputStream in = uuidFile.getInputStream();
-/*
- // uuid is stored in binary format (16 bytes)
- byte[] bytes = new byte[16];
- try {
- in.read(bytes);
- } finally {
- try {
- in.close();
- } catch (IOException ioe) {
- // ignore
- }
- }
- rootNodeUUID = new UUID(bytes).toString(); // uuid is stored in binary format (16 bytes)
-*/
- // uuid is stored in text format (36 characters) for better readability
-
- char[] chars;
- try {
- chars = IOUtils.toCharArray(in);
- } finally {
- IOUtils.closeQuietly(in);
- }
- return NodeId.valueOf(new String(chars));
- } catch (Exception e) {
- String msg = "failed to load persisted repository state";
- log.debug(msg);
- throw new RepositoryException(msg, e);
+ return NodeId.valueOf(IOUtils.toString(in, "US-ASCII"));
+ } finally {
+ IOUtils.closeQuietly(in);
}
} else {
- // create new uuid
-/*
- UUID rootUUID = UUID.randomUUID(); // version 4 uuid
- rootNodeUUID = rootUUID.toString();
-*/
- /**
- * use hard-coded uuid for root node rather than generating
- * a different uuid per repository instance; using a
- * hard-coded uuid makes it easier to copy/move entire
- * workspaces from one repository instance to another.
- */
+ // Use hard-coded uuid for root node rather than generating
+ // a different uuid per repository instance; using a
+ // hard-coded uuid makes it easier to copy/move entire
+ // workspaces from one repository instance to another.
+ uuidFile.makeParentDirs();
+ OutputStream out = uuidFile.getOutputStream();
try {
- // persist uuid of the repository's root node
- OutputStream out = uuidFile.getOutputStream();
-/*
- // store uuid in binary format
- try {
- out.write(rootUUID.getBytes());
- } finally {
- try {
- out.close();
- } catch (IOException ioe) {
- // ignore
- }
- }
-*/
- // store uuid in text format for better readability
- OutputStreamWriter writer = new OutputStreamWriter(out);
- try {
- writer.write(ROOT_NODE_ID.toString());
- } finally {
- IOUtils.closeQuietly(writer);
- }
+ out.write(ROOT_NODE_ID.toString().getBytes("US-ASCII"));
return ROOT_NODE_ID;
- } catch (Exception e) {
- String msg = "failed to persist repository state";
- log.debug(msg);
- throw new RepositoryException(msg, e);
+ } finally {
+ IOUtils.closeQuietly(out);
}
}
+ } catch (IOException e) {
+ throw new RepositoryException(
+ "Failed to load or persist the root node identifier", e);
} catch (FileSystemException fse) {
- String msg = "failed to access repository state";
- log.debug(msg);
- throw new RepositoryException(msg, fse);
+ throw new RepositoryException(
+ "Failed to access the root node identifier", fse);
}
}