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 2012/10/22 18:15:01 UTC
svn commit: r1400935 - in /jackrabbit/trunk:
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/
jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commo...
Author: jukka
Date: Mon Oct 22 16:15:00 2012
New Revision: 1400935
URL: http://svn.apache.org/viewvc?rev=1400935&view=rev
Log:
JCR-3447: InternalValueFactory should use the DataStore whenever available
Further simplify code by making the Internal/QValue fields immutable (final)
and replacing the store() method with a simpler isInDataStore() checker.
This is OK since all (large) binary InternalValues should now already
be in the data store.
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/AbstractQValue.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java?rev=1400935&r1=1400934&r2=1400935&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java Mon Oct 22 16:15:00 2012
@@ -30,7 +30,6 @@ import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
import org.apache.commons.io.IOUtils;
-import org.apache.jackrabbit.core.data.DataStore;
import org.apache.jackrabbit.core.id.NodeId;
import org.apache.jackrabbit.core.value.InternalValue;
import org.apache.jackrabbit.core.persistence.util.NodePropBundle.ChildNodeEntry;
@@ -208,27 +207,20 @@ class BundleWriter {
case PropertyType.BINARY:
try {
long size = val.getLength();
- DataStore dataStore = binding.dataStore;
- if (dataStore != null) {
- int maxMemorySize = dataStore.getMinRecordLength() - 1;
- if (size < maxMemorySize) {
- writeSmallBinary(val, state, i);
- } else {
- out.writeInt(BundleBinding.BINARY_IN_DATA_STORE);
- val.store(dataStore);
- writeString(val.toString());
- }
- break;
- }
- // special handling required for binary value:
- // spool binary value to file in blob store
- if (size < 0) {
+ if (val.isInDataStore()) {
+ out.writeInt(BundleBinding.BINARY_IN_DATA_STORE);
+ writeString(val.toString());
+ } else if (binding.dataStore != null) {
+ writeSmallBinary(val, state, i);
+ } else if (size < 0) {
log.warn("Blob has negative size. Potential loss of data. "
+ "id={} idx={}", state.getId(), String.valueOf(i));
out.writeInt(0);
values[i] = InternalValue.create(new byte[0]);
val.discard();
} else if (size > binding.getMinBlobSize()) {
+ // special handling required for binary value:
+ // spool binary value to file in blob store
out.writeInt(BundleBinding.BINARY_IN_BLOB_STORE);
String blobId = state.getBlobId(i);
if (blobId == null) {
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java?rev=1400935&r1=1400934&r2=1400935&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java Mon Oct 22 16:15:00 2012
@@ -25,7 +25,6 @@ import java.math.BigDecimal;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Calendar;
-import java.util.TimeZone;
import javax.jcr.Binary;
import javax.jcr.PropertyType;
@@ -324,9 +323,7 @@ public class InternalValue extends Abstr
* @return the created value
*/
public static InternalValue createDate(String value) {
- InternalValue iv = new InternalValue(Calendar.getInstance(TimeZone.getTimeZone("GMT+00:00")));
- iv.val = value;
- return iv;
+ return new InternalValue(value, PropertyType.DATE);
}
/**
@@ -643,23 +640,8 @@ public class InternalValue extends Abstr
}
}
- /**
- * Store a value in the data store. This will store temporary files or in-memory objects
- * in the data store.
- *
- * @param dataStore the data store
- * @throws RepositoryException
- */
- public void store(DataStore dataStore) throws RepositoryException {
- assert dataStore != null;
- assert type == PropertyType.BINARY;
- BLOBFileValue v = (BLOBFileValue) val;
- if (v instanceof BLOBInDataStore) {
- // already in the data store, OK
- return;
- }
- // store it in the data store
- val = BLOBInDataStore.getInstance(dataStore, getStream());
+ public boolean isInDataStore() {
+ return val instanceof BLOBInDataStore;
}
//-------------------------------------------------------------< QValue >---
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/AbstractQValue.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/AbstractQValue.java?rev=1400935&r1=1400934&r2=1400935&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/AbstractQValue.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/AbstractQValue.java Mon Oct 22 16:15:00 2012
@@ -45,7 +45,7 @@ public abstract class AbstractQValue imp
private static final long serialVersionUID = 6976433831974695272L;
- protected Object val;
+ protected final Object val;
protected final int type;
/**
@@ -60,7 +60,7 @@ public abstract class AbstractQValue imp
if (value == null) {
throw new IllegalArgumentException("null value");
}
- val = value;
+ this.val = value;
this.type = type;
}
@@ -77,10 +77,13 @@ public abstract class AbstractQValue imp
if (value == null) {
throw new IllegalArgumentException("null value");
}
- if (!(type == PropertyType.STRING || type == PropertyType.REFERENCE || type == PropertyType.WEAKREFERENCE)) {
+ if (!(type == PropertyType.STRING
+ || type == PropertyType.DATE // JCR-3083
+ || type == PropertyType.REFERENCE
+ || type == PropertyType.WEAKREFERENCE)) {
throw new IllegalArgumentException();
}
- val = value;
+ this.val = value;
this.type = type;
}