Author: jukka
Date: Wed Nov 13 15:47:47 2013
New Revision: 1541563
URL: http://svn.apache.org/r1541563
Log:
OAK-392: Review ContentSession#createBlob
Drop the separate BlobFactory and move the createBlob() method to Root.
Document a more detailed contract for blob lifecycles.
Removed:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/BlobFactory.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Root.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractRoot.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ImmutableRoot.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/DefaultSyncHandler.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/AbstractSecurityTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/ImmutableRootTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlManagerImplTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManagerTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACETest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Root.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Root.java?rev=1541563&r1=1541562&r2=1541563&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Root.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Root.java
Wed Nov 13 15:47:47 2013
@@ -18,6 +18,9 @@
*/
package org.apache.jackrabbit.oak.api;
+import java.io.IOException;
+import java.io.InputStream;
+
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -153,13 +156,23 @@ public interface Root {
QueryEngine getQueryEngine();
/**
- * Returns the blob factory (TODO: review if that really belongs to the
OAK-API. see also todos on BlobFactory)
- *
- * @return the blob factory.
+ * Reads (and closes) the given stream and returns a {@link Blob} that
+ * contains that binary. The returned blob will remain valid at least
+ * until the {@link ContentSession} of this root is closed, or longer
+ * if it has been committed as a part of a content update.
+ * <p>
+ * The implementation may decide to persist the blob at any point
+ * during or between this method method call and a {@link #commit()}
+ * that includes the blob, but the blob will become visible to other
+ * sessions only after such a commit.
+ *
+ * @param stream the stream for reading the binary
+ * @return the blob that was created
+ * @throws IOException if the stream could not be read
*/
@Nonnull
- BlobFactory getBlobFactory();
-
+ Blob createBlob(@Nonnull InputStream stream) throws IOException;
+
/**
* Get the {@code ContentSession} from which this root was acquired
*
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractRoot.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractRoot.java?rev=1541563&r1=1541562&r2=1541563&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractRoot.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractRoot.java
Wed Nov 13 15:47:47 2013
@@ -35,7 +35,6 @@ import javax.annotation.Nullable;
import javax.security.auth.Subject;
import org.apache.jackrabbit.oak.api.Blob;
-import org.apache.jackrabbit.oak.api.BlobFactory;
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.ContentSession;
import org.apache.jackrabbit.oak.api.QueryEngine;
@@ -338,18 +337,10 @@ public abstract class AbstractRoot imple
};
}
- @Nonnull
- @Override
- public BlobFactory getBlobFactory() {
+ @Override @Nonnull
+ public Blob createBlob(@Nonnull InputStream inputStream) throws
IOException {
checkLive();
-
- return new BlobFactory() {
- @Override
- public Blob createBlob(InputStream inputStream) throws IOException
{
- checkLive();
- return store.createBlob(inputStream);
- }
- };
+ return store.createBlob(checkNotNull(inputStream));
}
//-----------------------------------------------------------< internal
>---
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ImmutableRoot.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ImmutableRoot.java?rev=1541563&r1=1541562&r2=1541563&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ImmutableRoot.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ImmutableRoot.java
Wed Nov 13 15:47:47 2013
@@ -21,9 +21,11 @@ package org.apache.jackrabbit.oak.core;
import static com.google.common.base.Preconditions.checkArgument;
import static org.apache.jackrabbit.oak.commons.PathUtils.elements;
+import java.io.InputStream;
+
import javax.annotation.Nonnull;
-import org.apache.jackrabbit.oak.api.BlobFactory;
+import org.apache.jackrabbit.oak.api.Blob;
import org.apache.jackrabbit.oak.api.ContentSession;
import org.apache.jackrabbit.oak.api.QueryEngine;
import org.apache.jackrabbit.oak.api.Root;
@@ -117,9 +119,8 @@ public final class ImmutableRoot impleme
};
}
- @Nonnull
- @Override
- public BlobFactory getBlobFactory() {
+ @Override @Nonnull
+ public Blob createBlob(@Nonnull InputStream stream) {
throw new UnsupportedOperationException();
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java?rev=1541563&r1=1541562&r2=1541563&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java
Wed Nov 13 15:47:47 2013
@@ -16,6 +16,8 @@
*/
package org.apache.jackrabbit.oak.plugins.value;
+import static com.google.common.base.Preconditions.checkNotNull;
+
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
@@ -24,6 +26,7 @@ import java.net.URISyntaxException;
import java.util.Calendar;
import java.util.List;
+import javax.annotation.Nonnull;
import javax.jcr.Binary;
import javax.jcr.Node;
import javax.jcr.PropertyType;
@@ -36,9 +39,9 @@ import javax.jcr.nodetype.NodeType;
import com.google.common.collect.Lists;
import org.apache.jackrabbit.oak.api.Blob;
-import org.apache.jackrabbit.oak.api.BlobFactory;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.PropertyValue;
+import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.namepath.JcrNameParser;
import org.apache.jackrabbit.oak.namepath.JcrPathParser;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
@@ -59,19 +62,20 @@ import org.apache.jackrabbit.util.ISO860
*/
public class ValueFactoryImpl implements ValueFactory {
- private final BlobFactory blobFactory;
+ private final Root root;
private final NamePathMapper namePathMapper;
/**
* Creates a new instance of {@code ValueFactory}.
*
- * @param blobFactory The factory for creation of binary values
+ * @param root the root instance for creating binary values
* @param namePathMapper The name/path mapping used for converting JCR
names/paths to
* the internal representation.
*/
- public ValueFactoryImpl(BlobFactory blobFactory, NamePathMapper
namePathMapper) {
- this.blobFactory = blobFactory;
- this.namePathMapper = namePathMapper;
+ public ValueFactoryImpl(
+ @Nonnull Root root, @Nonnull NamePathMapper namePathMapper) {
+ this.root = checkNotNull(root);
+ this.namePathMapper = checkNotNull(namePathMapper);
}
/**
@@ -274,7 +278,7 @@ public class ValueFactoryImpl implements
}
private ValueImpl createBinaryValue(InputStream value) throws IOException {
- Blob blob = blobFactory.createBlob(value);
+ Blob blob = root.createBlob(value);
return new ValueImpl(BinaryPropertyState.binaryProperty("", blob),
namePathMapper);
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/DefaultSyncHandler.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/DefaultSyncHandler.java?rev=1541563&r1=1541562&r2=1541563&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/DefaultSyncHandler.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/DefaultSyncHandler.java
Wed Nov 13 15:47:47 2013
@@ -68,7 +68,7 @@ public class DefaultSyncHandler implemen
this.mode = mode;
this.options = (options == null) ? ConfigurationParameters.EMPTY :
options;
- valueFactory = new ValueFactoryImpl(root.getBlobFactory(),
NamePathMapper.DEFAULT);
+ valueFactory = new ValueFactoryImpl(root, NamePathMapper.DEFAULT);
initialized = true;
return true;
}
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/AbstractSecurityTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/AbstractSecurityTest.java?rev=1541563&r1=1541562&r2=1541563&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/AbstractSecurityTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/AbstractSecurityTest.java
Wed Nov 13 15:47:47 2013
@@ -184,7 +184,7 @@ public abstract class AbstractSecurityTe
}
protected ValueFactory getValueFactory() {
- return new ValueFactoryImpl(root.getBlobFactory(),
getNamePathMapper());
+ return new ValueFactoryImpl(root, getNamePathMapper());
}
protected User getTestUser() throws Exception {
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/ImmutableRootTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/ImmutableRootTest.java?rev=1541563&r1=1541562&r2=1541563&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/ImmutableRootTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/ImmutableRootTest.java
Wed Nov 13 15:47:47 2013
@@ -19,6 +19,8 @@ package org.apache.jackrabbit.oak.core;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.fail;
+import java.io.ByteArrayInputStream;
+
import org.apache.jackrabbit.oak.NodeStoreFixture;
import org.apache.jackrabbit.oak.OakBaseTest;
import org.apache.jackrabbit.oak.api.CommitFailedException;
@@ -84,7 +86,7 @@ public class ImmutableRootTest extends O
}
try {
- root.getBlobFactory();
+ root.createBlob(new ByteArrayInputStream(new byte[0]));
fail();
} catch (UnsupportedOperationException e) {
// success
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlManagerImplTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlManagerImplTest.java?rev=1541563&r1=1541562&r2=1541563&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlManagerImplTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlManagerImplTest.java
Wed Nov 13 15:47:47 2013
@@ -113,7 +113,7 @@ public class AccessControlManagerImplTes
npMapper = new NamePathMapperImpl(nameMapper);
acMgr = getAccessControlManager(npMapper);
- valueFactory = new ValueFactoryImpl(root.getBlobFactory(), npMapper);
+ valueFactory = new ValueFactoryImpl(root, npMapper);
NodeUtil rootNode = new NodeUtil(root.getTree("/"), npMapper);
rootNode.addChild(testName, JcrConstants.NT_UNSTRUCTURED);
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManagerTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManagerTest.java?rev=1541563&r1=1541562&r2=1541563&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManagerTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManagerTest.java
Wed Nov 13 15:47:47 2013
@@ -53,7 +53,7 @@ public class UserQueryManagerTest extend
user = getTestUser();
queryMgr = new UserQueryManager(userMgr, namePathMapper,
getUserConfiguration().getParameters(), root);
- valueFactory = new ValueFactoryImpl(root.getBlobFactory(),
namePathMapper);
+ valueFactory = new ValueFactoryImpl(root, namePathMapper);
propertyName = "testProperty";
}
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACETest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACETest.java?rev=1541563&r1=1541562&r2=1541563&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACETest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACETest.java
Wed Nov 13 15:47:47 2013
@@ -77,7 +77,7 @@ public class ACETest extends AbstractAcc
return "TestPrincipal";
}
};
- ValueFactory valueFactory = new
ValueFactoryImpl(root.getBlobFactory(), namePathMapper);
+ ValueFactory valueFactory = new ValueFactoryImpl(root, namePathMapper);
globValue = valueFactory.createValue("*");
nameValue = valueFactory.createValue("nt:file", PropertyType.NAME);
nameValues = new Value[] {
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java?rev=1541563&r1=1541562&r2=1541563&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java
Wed Nov 13 15:47:47 2013
@@ -63,7 +63,7 @@ public class AbstractRestrictionProvider
public void before() throws Exception {
super.before();
- valueFactory = new ValueFactoryImpl(root.getBlobFactory(),
namePathMapper);
+ valueFactory = new ValueFactoryImpl(root, namePathMapper);
globValue = valueFactory.createValue("*");
nameValue = valueFactory.createValue("nt:file", PropertyType.NAME);
nameValues = new Value[] {
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java?rev=1541563&r1=1541562&r2=1541563&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java
Wed Nov 13 15:47:47 2013
@@ -130,7 +130,7 @@ public class SessionContext implements N
this.namePathMapper = new NamePathMapperImpl(
nameMapper, delegate.getIdManager());
this.valueFactory = new ValueFactoryImpl(
- delegate.getRoot().getBlobFactory(), namePathMapper);
+ delegate.getRoot(), namePathMapper);
}
public final Map<String, Object> getAttributes() {