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/03/29 17:49:38 UTC
svn commit: r1306937 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/core/
oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/
oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/
oak-jcr/src/main/java/org/apache/jackr...
Author: mduerig
Date: Thu Mar 29 15:49:37 2012
New Revision: 1306937
URL: http://svn.apache.org/viewvc?rev=1306937&view=rev
Log:
OAK-15: Clean up oak-jcr
- use new API from OAK-18 to reduce dependencies from oak-jcr to oak-mk
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ConnectionImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TmpRepositoryService.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/state/TransientNodeState.java
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=1306937&r1=1306936&r2=1306937&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 Thu Mar 29 15:49:37 2012
@@ -16,14 +16,18 @@
*/
package org.apache.jackrabbit.oak.core;
+import org.apache.jackrabbit.mk.api.MicroKernel;
import org.apache.jackrabbit.mk.model.NodeBuilder;
import org.apache.jackrabbit.mk.model.NodeState;
+import org.apache.jackrabbit.mk.model.NodeStore;
import org.apache.jackrabbit.oak.api.AuthInfo;
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.Connection;
+import org.apache.jackrabbit.oak.kernel.KernelNodeStore;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.jcr.NoSuchWorkspaceException;
import javax.jcr.SimpleCredentials;
import java.io.IOException;
@@ -37,19 +41,30 @@ public class ConnectionImpl implements C
*/
private static final Logger log = LoggerFactory.getLogger(ConnectionImpl.class);
- private final SimpleCredentials sc;
+ private final SimpleCredentials credentials;
private final String workspaceName;
+ private final NodeStore store;
- private String revision;
+ private NodeState root;
- ConnectionImpl(SimpleCredentials sc, String workspaceName, String revision) {
- this.sc = sc;
+ public ConnectionImpl(SimpleCredentials credentials, String workspaceName,
+ NodeStore store, NodeState root) {
+ this.credentials = credentials;
this.workspaceName = workspaceName;
- this.revision = revision;
+ this.store = store;
+ this.root = root;
}
- public String getRevision() {
- return revision;
+ static Connection createWorkspaceConnection(SimpleCredentials credentials,
+ String workspace, MicroKernel microKernel, String revision) throws NoSuchWorkspaceException {
+
+ NodeStore store = new KernelNodeStore(microKernel); // TODO: pass revision?
+ NodeState wspRoot = store.getRoot().getChildNode(workspace);
+ if (wspRoot == null) {
+ throw new NoSuchWorkspaceException(workspace);
+ }
+
+ return new ConnectionImpl(credentials, workspace, store, wspRoot);
}
@Override
@@ -58,34 +73,42 @@ public class ConnectionImpl implements C
return new AuthInfo() {
@Override
public String getUserID() {
- return sc.getUserID();
+ return credentials.getUserID();
}
@Override
public String[] getAttributeNames() {
- return sc.getAttributeNames();
+ return credentials.getAttributeNames();
}
@Override
public Object getAttribute(String attributeName) {
- return sc.getAttribute(attributeName);
+ return credentials.getAttribute(attributeName);
}
};
}
@Override
public NodeState getCurrentRoot() {
- return null; // todo implement getCurrentRoot
+ return root;
}
@Override
public NodeState commit(NodeState newRoot) throws CommitFailedException {
- return null; // todo implement commit
+ if (workspaceName == null) {
+// todo store.setRoot(newRoot);
+ return root = store.getRoot();
+ }
+ else {
+// todo NodeBuilder builder = store.getNodeBuilder(store.getRoot());
+// builder.setChildNode(workspaceName, newRoot);
+ return root = store.getRoot().getChildNode(workspaceName);
+ }
}
@Override
public NodeBuilder getNodeBuilder(NodeState state) {
- return null; // todo implement getNodeBuilder
+ return store.getNodeBuilder(state);
}
@Override
@@ -100,6 +123,6 @@ public class ConnectionImpl implements C
@Override
public Connection getRepositoryConnection() {
- return null; // todo implement getRepositoryConnection
+ return new ConnectionImpl(credentials, null, store, store.getRoot());
}
}
\ No newline at end of file
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TmpRepositoryService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TmpRepositoryService.java?rev=1306937&r1=1306936&r2=1306937&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TmpRepositoryService.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TmpRepositoryService.java Thu Mar 29 15:49:37 2012
@@ -71,7 +71,7 @@ public class TmpRepositoryService implem
final String revision = getRevision(credentials);
if (sc != null) {
- return new ConnectionImpl(sc, wspName, revision);
+ return ConnectionImpl.createWorkspaceConnection(sc, wspName, mk, revision);
} else {
throw new LoginException("login failed...");
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java?rev=1306937&r1=1306936&r2=1306937&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java Thu Mar 29 15:49:37 2012
@@ -39,7 +39,7 @@ import java.util.Map;
* Basic {@link NodeState} implementation based on the {@link MicroKernel}
* interface. This class makes an attempt to load data lazily.
*/
-public class KernelNodeState extends AbstractNodeState { // fixme make package private
+class KernelNodeState extends AbstractNodeState {
/**
* Maximum number of child nodes kept in memory.
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java?rev=1306937&r1=1306936&r2=1306937&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java Thu Mar 29 15:49:37 2012
@@ -20,6 +20,7 @@
package org.apache.jackrabbit.oak.jcr;
import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.oak.api.Connection;
import org.apache.jackrabbit.oak.jcr.state.NodeStateProvider;
import javax.jcr.Session;
@@ -29,6 +30,7 @@ public interface SessionContext<T extend
T getSession();
GlobalContext getGlobalContext();
String getWorkspaceName();
+ Connection getConnection();
MicroKernel getMicrokernel();
String getRevision(); // TODO: this should be superfluous if SessionInfo is used for communication
ValueFactory getValueFactory();
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=1306937&r1=1306936&r2=1306937&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 Thu Mar 29 15:49:37 2012
@@ -18,8 +18,8 @@ package org.apache.jackrabbit.oak.jcr;
import org.apache.jackrabbit.commons.AbstractSession;
import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.Connection;
-import org.apache.jackrabbit.oak.core.ConnectionImpl;
import org.apache.jackrabbit.oak.jcr.state.NodeStateProvider;
import org.apache.jackrabbit.oak.jcr.state.TransientNodeState;
import org.apache.jackrabbit.oak.jcr.state.TransientSpace;
@@ -74,7 +74,7 @@ public class SessionImpl extends Abstrac
this.globalContext = globalContext;
this.connection = connection;
- this.revision = ((ConnectionImpl) connection).getRevision();
+ this.revision = globalContext.getInstance(MicroKernel.class).getHeadRevision(); // fixme: this is a hack and creates a race. however we will get rid of tracking the revision here anyway
valueFactory = new ValueFactoryImpl();
repository = new RepositoryAdaptor(globalContext.getInstance(Repository.class), valueFactory);
@@ -213,15 +213,27 @@ public class SessionImpl extends Abstrac
@Override
public void save() throws RepositoryException {
checkIsAlive();
- revision = transientSpace.save();
- nodeStateProvider.clear();
+ try {
+ revision = transientSpace.save();
+ connection.commit(connection.getCurrentRoot()); // todo: need a way to update a connection to head
+ nodeStateProvider.clear();
+ }
+ catch (CommitFailedException e) {
+ throw new RepositoryException(e);
+ }
}
@Override
public void refresh(boolean keepChanges) throws RepositoryException {
checkIsAlive();
- revision = transientSpace.refresh(keepChanges);
- nodeStateProvider.clear();
+ try {
+ revision = transientSpace.refresh(keepChanges);
+ connection.commit(connection.getCurrentRoot()); // todo: need a way to update a connection to head
+ nodeStateProvider.clear();
+ }
+ catch (CommitFailedException e) {
+ throw new RepositoryException(e);
+ }
}
@Override
@@ -480,6 +492,11 @@ public class SessionImpl extends Abstrac
}
@Override
+ public Connection getConnection() {
+ return connection;
+ }
+
+ @Override
public MicroKernel getMicrokernel() {
return globalContext.getInstance(MicroKernel.class);
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/state/TransientNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/state/TransientNodeState.java?rev=1306937&r1=1306936&r2=1306937&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/state/TransientNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/state/TransientNodeState.java Thu Mar 29 15:49:37 2012
@@ -19,11 +19,12 @@
package org.apache.jackrabbit.oak.jcr.state;
-import org.apache.jackrabbit.mk.model.Scalar;
-import org.apache.jackrabbit.mk.model.ScalarImpl;
import org.apache.jackrabbit.mk.model.ChildNodeEntry;
import org.apache.jackrabbit.mk.model.NodeState;
import org.apache.jackrabbit.mk.model.PropertyState;
+import org.apache.jackrabbit.mk.model.Scalar;
+import org.apache.jackrabbit.mk.model.ScalarImpl;
+import org.apache.jackrabbit.oak.api.Connection;
import org.apache.jackrabbit.oak.jcr.SessionContext;
import org.apache.jackrabbit.oak.jcr.SessionImpl;
import org.apache.jackrabbit.oak.jcr.state.ChangeTree.NodeDelta;
@@ -32,7 +33,6 @@ import org.apache.jackrabbit.oak.jcr.uti
import org.apache.jackrabbit.oak.jcr.util.PagedIterator;
import org.apache.jackrabbit.oak.jcr.util.Path;
import org.apache.jackrabbit.oak.jcr.util.Predicate;
-import org.apache.jackrabbit.oak.kernel.KernelNodeState;
import org.apache.jackrabbit.oak.kernel.KernelPropertyState;
import javax.jcr.ItemExistsException;
@@ -331,8 +331,7 @@ public class TransientNodeState {
if (path == null) {
persistentNodeState = EmptyNodeState.INSTANCE;
} else {
- // TODO: use oak-api here in order to avoid reading directly from MK
- persistentNodeState = new KernelNodeState(sessionContext.getMicrokernel(), path.toMkPath(), revision);
+ persistentNodeState = getPersistentNodeState(sessionContext.getConnection(), path);
}
}
@@ -343,4 +342,16 @@ public class TransientNodeState {
return nodeDelta = getNodeStateProvider().getNodeDelta(nodeDelta.getPath());
}
+ private static NodeState getPersistentNodeState(Connection connection, Path path) {
+ NodeState state = connection.getCurrentRoot();
+ for (String name : path.getNames()) {
+ state = state.getChildNode(name);
+ if (state == null) {
+ return null;
+ }
+ }
+
+ return state;
+ }
+
}