You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2012/04/11 16:40:24 UTC
svn commit: r1324787 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/api/
oak-core/src/main/java/org/apache/jackrabbit/oak/core/
oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/
Author: mduerig
Date: Wed Apr 11 14:40:22 2012
New Revision: 1324787
URL: http://svn.apache.org/viewvc?rev=1324787&view=rev
Log:
OAK-18: Define Oak API
- add refresh method to Connection
- Javadoc
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Connection.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ConnectionImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Connection.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Connection.java?rev=1324787&r1=1324786&r2=1324787&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Connection.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Connection.java Wed Apr 11 14:40:22 2012
@@ -80,8 +80,29 @@ public interface Connection extends Clos
NodeState getCurrentRoot();
+ /**
+ * Refresh this connection to the latest revision of the underlying Microkernel.
+ */
+ void refresh();
+
+ /**
+ * Atomically apply all changes in the passed {@code editor} to the underlying
+ * Microkernel. On success this connection is implicitly refreshed to the state
+ * created by applying the editor.
+ *
+ * @param editor editor carrying the changes to be applies
+ * @return node state resulting from applying the changed
+ * @throws CommitFailedException
+ */
NodeState commit(NodeStateEditor editor) throws CommitFailedException;
+ /**
+ * Get an node state editor for the given state. Use {@link #commit(NodeStateEditor)}
+ * to atomically apply the changes made in this editor to the underlying Microkernel.
+ *
+ * @param state node state to edit
+ * @return editor for the passed {@code state}
+ */
NodeStateEditor getNodeStateEditor(NodeState state);
/**
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ConnectionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ConnectionImpl.java?rev=1324787&r1=1324786&r2=1324787&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ConnectionImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ConnectionImpl.java Wed Apr 11 14:40:22 2012
@@ -48,16 +48,17 @@ public class ConnectionImpl implements C
private final SimpleCredentials credentials;
private final String workspaceName;
private final NodeStore store;
- private final NodeState root;
private final QueryEngine queryEngine;
- public ConnectionImpl(SimpleCredentials credentials, String workspaceName,
+ private NodeState root;
+
+ private ConnectionImpl(SimpleCredentials credentials, String workspaceName,
NodeStore store, NodeState root, QueryEngine queryEngine) {
this.credentials = credentials;
this.workspaceName = workspaceName;
this.store = store;
- this.root = root;
this.queryEngine = queryEngine;
+ this.root = root;
}
static Connection createWorkspaceConnection(SimpleCredentials credentials,
@@ -109,11 +110,18 @@ public class ConnectionImpl implements C
public NodeState getCurrentRoot() {
return root;
}
+
+ @Override
+ public void refresh() {
+ root = workspaceName == null
+ ? store.getRoot()
+ : store.getRoot().getChildNode(workspaceName);
+ }
@Override
public NodeState commit(NodeStateEditor editor) throws CommitFailedException {
try {
- return store.merge(editor, editor.getBaseNodeState());
+ return root = store.merge(editor, editor.getBaseNodeState());
}
catch (MicroKernelException e) {
throw new CommitFailedException(e);
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java?rev=1324787&r1=1324786&r2=1324787&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java Wed Apr 11 14:40:22 2012
@@ -167,15 +167,10 @@ public class SessionImpl extends Abstrac
@Override
public void refresh(boolean keepChanges) throws RepositoryException {
checkIsAlive();
- try {
- // todo: need a better way to update a connection to head
- NodeState newState = connection.commit(connection.getNodeStateEditor(connection.getCurrentRoot()));
- if (!keepChanges) {
- editor = connection.getNodeStateEditor(newState);
- itemStateProvider = new ItemStateProvider(editor.getTransientState());
- }
- } catch (CommitFailedException e) {
- throw new RepositoryException(e);
+ connection.refresh();
+ if (!keepChanges) {
+ editor = connection.getNodeStateEditor(connection.getCurrentRoot());
+ itemStateProvider = new ItemStateProvider(editor.getTransientState());
}
}