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/08/12 13:53:39 UTC
svn commit: r984730 - in
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session:
SessionContext.java SessionItemOperation.java SessionRefreshOperation.java
SessionSaveOperation.java
Author: jukka
Date: Thu Aug 12 11:53:39 2010
New Revision: 984730
URL: http://svn.apache.org/viewvc?rev=984730&view=rev
Log:
JCR-890: concurrent read-only access to a session
Add javadocs
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionContext.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionItemOperation.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionRefreshOperation.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionSaveOperation.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionContext.java?rev=984730&r1=984729&r2=984730&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionContext.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionContext.java Thu Aug 12 11:53:39 2010
@@ -34,10 +34,20 @@ import org.apache.jackrabbit.spi.commons
import org.apache.jackrabbit.spi.commons.conversion.MalformedPathException;
import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
+/**
+ * Component context of a session. This class keeps track of the internal
+ * components associated with a session.
+ */
public class SessionContext implements NamePathResolver {
+ /**
+ * The repository context of this session.
+ */
private final RepositoryContext repositoryContext;
+ /**
+ * This session.
+ */
private final SessionImpl session;
/**
@@ -65,8 +75,17 @@ public class SessionContext implements N
*/
private volatile AccessManager accessManager;
+ /**
+ * The observation manager of this session.
+ */
private volatile ObservationManagerImpl observationManager;
+ /**
+ * Creates a component context for the given session.
+ *
+ * @param repositoryContext repository context of the session
+ * @param session the session
+ */
public SessionContext(
RepositoryContext repositoryContext, SessionImpl session) {
assert repositoryContext != null;
@@ -76,6 +95,11 @@ public class SessionContext implements N
this.state = new SessionState(this);
}
+ /**
+ * Returns the repository context of the session.
+ *
+ * @return repository context
+ */
public RepositoryContext getRepositoryContext() {
return repositoryContext;
}
@@ -99,10 +123,20 @@ public class SessionContext implements N
return repositoryContext.getDataStore();
}
+ /**
+ * Returns this session.
+ *
+ * @return session
+ */
public SessionImpl getSessionImpl() {
return session;
}
+ /**
+ * Returns the state of this session.
+ *
+ * @return session state
+ */
public SessionState getSessionState() {
return state;
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionItemOperation.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionItemOperation.java?rev=984730&r1=984729&r2=984730&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionItemOperation.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionItemOperation.java Thu Aug 12 11:53:39 2010
@@ -33,38 +33,15 @@ import org.apache.jackrabbit.spi.commons
*/
public abstract class SessionItemOperation<T> implements SessionOperation<T> {
- private final String method;
-
- private final String path;
-
- private SessionItemOperation(String method, String path) {
- this.method = method;
- this.path = path;
- }
-
- public String toString() {
- return method + "(" + path + ")";
- }
-
- public T perform(SessionContext context) throws RepositoryException {
- try {
- Path normalized =
- context.getQPath(path).getNormalizedPath();
- if (normalized.isAbsolute()) {
- return perform(context.getItemManager(), normalized);
- } else {
- throw new RepositoryException("Not an absolute path: " + path);
- }
- } catch (AccessDeniedException e) {
- throw new PathNotFoundException(path);
- } catch (NameException e) {
- throw new RepositoryException("Invalid path:" + path, e);
- }
- }
-
- protected abstract T perform(ItemManager manager, Path path)
- throws RepositoryException;
+ //----------------------------------------------< static factory methods >
+ /**
+ * Creates a session operation for checking the existence of an item
+ * at the given path.
+ *
+ * @param path absolute path of the item
+ * @return session operation
+ */
public static SessionItemOperation<Boolean> itemExists(String path) {
return new SessionItemOperation<Boolean>("itemExists", path) {
@Override @SuppressWarnings("deprecation")
@@ -74,6 +51,13 @@ public abstract class SessionItemOperati
};
}
+ /**
+ * Creates a session operation for checking the existence of a property
+ * at the given path.
+ *
+ * @param path absolute path of the property
+ * @return session operation
+ */
public static SessionItemOperation<Boolean> propertyExists(String path) {
return new SessionItemOperation<Boolean>("propertyExists", path) {
@Override
@@ -83,6 +67,13 @@ public abstract class SessionItemOperati
};
}
+ /**
+ * Creates a session operation for checking the existence of a node
+ * at the given path.
+ *
+ * @param path absolute path of the node
+ * @return session operation
+ */
public static SessionItemOperation<Boolean> nodeExists(String path) {
return new SessionItemOperation<Boolean>("nodeExists", path) {
@Override
@@ -92,6 +83,12 @@ public abstract class SessionItemOperati
};
}
+ /**
+ * Creates a session operation for getting the item at the given path.
+ *
+ * @param path absolute path of the item
+ * @return session operation
+ */
public static SessionItemOperation<ItemImpl> getItem(String path) {
return new SessionItemOperation<ItemImpl>("getItem", path) {
@Override @SuppressWarnings("deprecation")
@@ -102,6 +99,12 @@ public abstract class SessionItemOperati
};
}
+ /**
+ * Creates a session operation for getting the property at the given path.
+ *
+ * @param path absolute path of the property
+ * @return session operation
+ */
public static SessionItemOperation<PropertyImpl> getProperty(String path) {
return new SessionItemOperation<PropertyImpl>("getProperty", path) {
@Override
@@ -112,6 +115,12 @@ public abstract class SessionItemOperati
};
}
+ /**
+ * Creates a session operation for getting the node at the given path.
+ *
+ * @param path absolute path of the node
+ * @return session operation
+ */
public static SessionItemOperation<NodeImpl> getNode(String path) {
return new SessionItemOperation<NodeImpl>("getNode", path) {
@Override
@@ -122,6 +131,12 @@ public abstract class SessionItemOperati
};
}
+ /**
+ * Creates a session operation for removing the item at the given path.
+ *
+ * @param path absolute path of the item
+ * @return session operation
+ */
public static SessionItemOperation<Object> remove(String path) {
return new SessionItemOperation<Object>("remove", path) {
@Override @SuppressWarnings("deprecation")
@@ -133,4 +148,71 @@ public abstract class SessionItemOperati
};
}
+ //------------------------------------------------< SessionItemOperation >
+
+ /**
+ * The method being executed (itemExists/getItem/remove/etc.)
+ */
+ private final String method;
+
+ /**
+ * Absolute path of the item that this operation accesses.
+ */
+ private final String path;
+
+ /**
+ * Creates a new operation for a accessing the item at the given path.
+ *
+ * @param method method being executed
+ * @param path absolute path of the item
+ */
+ private SessionItemOperation(String method, String path) {
+ this.method = method;
+ this.path = path;
+ }
+
+ /**
+ * Performs this operation on the specified item. This method resolves
+ * the given absolute path and calls the abstract
+ * {@link #perform(ItemManager, Path)} method to actually perform the
+ * selected operation.
+ *
+ * @throws RepositoryException if the operation fails
+ */
+ public T perform(SessionContext context) throws RepositoryException {
+ try {
+ Path normalized =
+ context.getQPath(path).getNormalizedPath();
+ if (normalized.isAbsolute()) {
+ return perform(context.getItemManager(), normalized);
+ } else {
+ throw new RepositoryException("Not an absolute path: " + path);
+ }
+ } catch (AccessDeniedException e) {
+ throw new PathNotFoundException(path);
+ } catch (NameException e) {
+ throw new RepositoryException("Invalid path:" + path, e);
+ }
+ }
+
+ /**
+ * Performs this operation using the given item manager.
+ *
+ * @param manager item manager of this session
+ * @param path resolved path of the item
+ * @throws RepositoryException if the operation fails
+ */
+ protected abstract T perform(ItemManager manager, Path path)
+ throws RepositoryException;
+
+ //--------------------------------------------------------------< Object >
+
+ /**
+ * Returns a string representation of this operation.
+ *
+ * @return "getItem(/path/to/item)", etc.
+ */
+ public String toString() {
+ return method + "(" + path + ")";
+ }
}
\ No newline at end of file
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionRefreshOperation.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionRefreshOperation.java?rev=984730&r1=984729&r2=984730&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionRefreshOperation.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionRefreshOperation.java Thu Aug 12 11:53:39 2010
@@ -26,15 +26,30 @@ import org.apache.jackrabbit.core.cluste
*/
public class SessionRefreshOperation implements SessionOperation<Object> {
+ /**
+ * Flag to keep transient changes.
+ */
private final boolean keepChanges;
+ /**
+ * Flag to synchronise with other cluster nodes.
+ */
private final boolean clusterSync;
+ /**
+ * Creates a session refresh operation.
+ *
+ * @param keepChanges whether to keep transient changes
+ * @param clusterSync whether to synchronise with other cluster nodes
+ */
public SessionRefreshOperation(boolean keepChanges, boolean clusterSync) {
this.keepChanges = keepChanges;
this.clusterSync = clusterSync;
}
+ /**
+ * Refreshes the session.
+ */
public Object perform(SessionContext context) throws RepositoryException {
// JCR-1753: Ensure that we are up to date with cluster changes
ClusterNode cluster = context.getRepositoryContext().getClusterNode();
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionSaveOperation.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionSaveOperation.java?rev=984730&r1=984729&r2=984730&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionSaveOperation.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionSaveOperation.java Thu Aug 12 11:53:39 2010
@@ -21,8 +21,16 @@ import javax.jcr.Session;
import org.apache.jackrabbit.core.id.NodeId;
+/**
+ * Operation to persist transient changes in a session.
+ */
public class SessionSaveOperation implements SessionOperation<Object> {
+ /**
+ * Persists transient changes by delegating to the save() method of the
+ * root node (or the parent of transient changes if access to the root
+ * node is not available to this session).
+ */
public Object perform(SessionContext context) throws RepositoryException {
NodeId id;
// JCR-2425: check whether session is allowed to read root node