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/06/22 17:53:02 UTC
svn commit: r956934 - in
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core:
ItemImpl.java SessionImpl.java session/ActiveSessionState.java
session/SessionOperation.java
Author: jukka
Date: Tue Jun 22 15:53:02 2010
New Revision: 956934
URL: http://svn.apache.org/viewvc?rev=956934&view=rev
Log:
JCR-890: concurrent read-only access to a session
Introduce a SessionContext parameter to SessionOperation.perform() so that we'll have an easier time breaking dependencies in SessionOperation subclasses.
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/ActiveSessionState.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionOperation.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java?rev=956934&r1=956933&r2=956934&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java Tue Jun 22 15:53:02 2010
@@ -28,20 +28,17 @@ import java.util.Set;
import javax.jcr.AccessDeniedException;
import javax.jcr.InvalidItemStateException;
import javax.jcr.Item;
-import javax.jcr.ItemExistsException;
import javax.jcr.ItemNotFoundException;
import javax.jcr.ItemVisitor;
import javax.jcr.Node;
import javax.jcr.PathNotFoundException;
import javax.jcr.PropertyType;
-import javax.jcr.ReferentialIntegrityException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.lock.LockException;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.nodetype.ItemDefinition;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
import javax.jcr.nodetype.NodeDefinition;
import javax.jcr.nodetype.NodeType;
import javax.jcr.version.VersionException;
@@ -982,7 +979,7 @@ public abstract class ItemImpl implement
}
@Override
- public void perform() throws RepositoryException {
+ public void perform(SessionContext context) throws RepositoryException {
/**
* build list of transient (i.e. new & modified) states that
* should be persisted
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java?rev=956934&r1=956933&r2=956934&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java Tue Jun 22 15:53:02 2010
@@ -272,7 +272,7 @@ public class SessionImpl extends Abstrac
RepositoryContext repositoryContext, Subject subject,
WorkspaceConfig wspConfig)
throws AccessDeniedException, RepositoryException {
- this.context.setSessionState(new ActiveSessionState());
+ this.context.setSessionState(new ActiveSessionState(context));
this.repositoryContext = repositoryContext;
this.subject = subject;
@@ -899,7 +899,8 @@ public class SessionImpl extends Abstrac
public void save() throws RepositoryException {
perform(new SessionOperation("save") {
@Override
- public void perform() throws RepositoryException {
+ public void perform(SessionContext context)
+ throws RepositoryException {
// JCR-2425: check whether session is allowed to read root node
if (hasPermission("/", ACTION_READ)) {
getItemManager().getRootNode().save();
@@ -917,7 +918,8 @@ public class SessionImpl extends Abstrac
public void refresh(final boolean keepChanges) throws RepositoryException {
perform(new SessionOperation("refresh") {
@Override
- public void perform() throws RepositoryException {
+ public void perform(SessionContext context)
+ throws RepositoryException {
// JCR-1753: Ensure that we are up to date with cluster changes
ClusterNode cluster = repositoryContext.getClusterNode();
if (cluster != null && clusterSyncOnRefresh()) {
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/ActiveSessionState.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/ActiveSessionState.java?rev=956934&r1=956933&r2=956934&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/ActiveSessionState.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/ActiveSessionState.java Tue Jun 22 15:53:02 2010
@@ -41,6 +41,15 @@ public class ActiveSessionState implemen
private final Lock lock = new ReentrantLock();
/**
+ * Component context of this session.
+ */
+ private final SessionContext context;
+
+ public ActiveSessionState(SessionContext context) {
+ this.context = context;
+ }
+
+ /**
* Returns <code>true</code>; the session is alive.
*
* @return <code>true</code>
@@ -63,8 +72,8 @@ public class ActiveSessionState implemen
lock.lock();
}
try {
- log.debug("Performing {} on {}", operation, this);
- operation.perform();
+ log.debug("Performing {} on {}", operation, context);
+ operation.perform(context);
} finally {
lock.unlock();
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionOperation.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionOperation.java?rev=956934&r1=956933&r2=956934&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionOperation.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionOperation.java Tue Jun 22 15:53:02 2010
@@ -35,9 +35,10 @@ public class SessionOperation {
* Performs this operation. The default implementation does nothing;
* subclasses should override this method to implement custom operations.
*
+ * @param context component context of the session
* @throws RepositoryException if the operation fails
*/
- public void perform() throws RepositoryException {
+ public void perform(SessionContext context) throws RepositoryException {
}
/**