You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by th...@apache.org on 2009/06/12 12:20:06 UTC
svn commit: r784058 - in
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core:
data/ nodetype/ persistence/bundle/util/ persistence/db/ persistence/mem/
persistence/obj/ persistence/util/ persistence/xml/ query/lucene/ value/
Author: thomasm
Date: Fri Jun 12 10:20:06 2009
New Revision: 784058
URL: http://svn.apache.org/viewvc?rev=784058&view=rev
Log:
JCR-2144 InternalValue refactoring
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/data/GarbageCollector.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ValueConstraint.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/BundleBinding.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/db/DatabasePersistenceManager.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/mem/InMemPersistenceManager.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/obj/ObjectPersistenceManager.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/Serializer.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/xml/XMLPersistenceManager.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBFileValue.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInDataStore.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInMemory.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInResource.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInTempFile.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBValue.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BinaryValueImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/data/GarbageCollector.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/data/GarbageCollector.java?rev=784058&r1=784057&r2=784058&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/data/GarbageCollector.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/data/GarbageCollector.java Fri Jun 12 10:20:06 2009
@@ -86,7 +86,7 @@
private final Session[] sessionList;
private final SessionListener sessionListener;
-
+
private final AtomicBoolean closed = new AtomicBoolean();
private boolean persistenceManagerScan;
@@ -108,7 +108,7 @@
this.pmList = list;
this.persistenceManagerScan = list != null;
this.sessionList = sessionList;
-
+
// Auto-close if the main session logs out
this.sessionListener = new SessionListener() {
public void loggedOut(SessionImpl session) {
@@ -231,6 +231,8 @@
PropertyState ps = pm.load(pid);
if (ps.getType() == PropertyType.BINARY) {
for (InternalValue v : ps.getValues()) {
+ // getLength will update the last modified date
+ // if the persistence manager scan is running
v.getLength();
}
}
@@ -264,7 +266,7 @@
/**
* Delete all unused items in the data store.
- *
+ *
* @return the number of deleted items
*/
public int deleteUnused() throws RepositoryException {
@@ -287,7 +289,7 @@
/**
* Get the data store if one is used.
- *
+ *
* @return the data store, or null
*/
public DataStore getDataStore() {
@@ -358,13 +360,13 @@
*
* We can't use node path for this, UUIDs are required as nodes could be
* moved around.
- *
- * This mechanism requires that all data stores update the last modified
+ *
+ * This mechanism requires that all data stores update the last modified
* date when calling addRecord and that record already exists.
*
*/
}
-
+
/**
* Cleanup resources used internally by this instance.
*/
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ValueConstraint.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ValueConstraint.java?rev=784058&r1=784057&r2=784058&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ValueConstraint.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ValueConstraint.java Fri Jun 12 10:20:06 2009
@@ -16,7 +16,6 @@
*/
package org.apache.jackrabbit.core.nodetype;
-import org.apache.jackrabbit.core.value.BLOBFileValue;
import org.apache.jackrabbit.core.value.InternalValue;
import org.apache.jackrabbit.spi.commons.conversion.MalformedPathException;
import org.apache.jackrabbit.spi.commons.conversion.NameException;
@@ -353,8 +352,7 @@
return;
case PropertyType.BINARY:
- BLOBFileValue blob = value.getBLOBFileValue();
- long length = blob.getLength();
+ long length = value.getLength();
if (length != -1) {
check(length);
} else {
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/BundleBinding.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/BundleBinding.java?rev=784058&r1=784057&r2=784058&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/BundleBinding.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/BundleBinding.java Fri Jun 12 10:20:06 2009
@@ -25,7 +25,6 @@
import org.apache.jackrabbit.core.PropertyId;
import org.apache.jackrabbit.core.util.StringIndex;
import org.apache.jackrabbit.core.value.InternalValue;
-import org.apache.jackrabbit.core.value.BLOBFileValue;
import org.apache.jackrabbit.core.data.DataStore;
import org.apache.jackrabbit.core.nodetype.NodeDefId;
import org.apache.jackrabbit.core.nodetype.PropDefId;
@@ -608,76 +607,76 @@
InternalValue val = values[i];
switch (state.getType()) {
case PropertyType.BINARY:
- BLOBFileValue blobVal = val.getBLOBFileValue();
- if (InternalValue.USE_DATA_STORE && dataStore != null) {
- if (blobVal.isSmall()) {
- writeSmallBinary(out, blobVal, state, i);
- } else {
- out.writeInt(BINARY_IN_DATA_STORE);
- try {
+ try {
+ long size = val.getLength();
+ if (InternalValue.USE_DATA_STORE && dataStore != null) {
+ int maxMemorySize = dataStore.getMinRecordLength() - 1;
+ if (size < maxMemorySize) {
+ writeSmallBinary(out, val, state, i);
+ } else {
+ out.writeInt(BINARY_IN_DATA_STORE);
val.store(dataStore);
- } catch (RepositoryException e) {
- String msg = "Error while storing blob. id="
- + state.getId() + " idx=" + i + " size=" + val.getBLOBFileValue().getLength();
- log.error(msg, e);
- throw new IOException(msg);
+ out.writeUTF(val.toString());
}
- out.writeUTF(val.toString());
+ break;
}
- break;
- }
- // special handling required for binary value:
- // spool binary value to file in blob store
- long size = blobVal.getLength();
- 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]);
- blobVal.discard();
- } else if (size > minBlobSize) {
- out.writeInt(BINARY_IN_BLOB_STORE);
- String blobId = state.getBlobId(i);
- if (blobId == null) {
- try {
- InputStream in = blobVal.getStream();
+ // special handling required for binary value:
+ // spool binary value to file in blob store
+ 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 > minBlobSize) {
+ out.writeInt(BINARY_IN_BLOB_STORE);
+ String blobId = state.getBlobId(i);
+ if (blobId == null) {
try {
- blobId = blobStore.createId(state.getId(), i);
- blobStore.put(blobId, in, size);
- state.setBlobId(blobId, i);
- } finally {
- IOUtils.closeQuietly(in);
+ InputStream in = val.getStream();
+ try {
+ blobId = blobStore.createId(state.getId(), i);
+ blobStore.put(blobId, in, size);
+ state.setBlobId(blobId, i);
+ } finally {
+ IOUtils.closeQuietly(in);
+ }
+ } catch (Exception e) {
+ String msg = "Error while storing blob. id="
+ + state.getId() + " idx=" + i + " size=" + size;
+ log.error(msg, e);
+ throw new IOException(msg);
}
- } catch (Exception e) {
- String msg = "Error while storing blob. id="
- + state.getId() + " idx=" + i + " size=" + size;
- log.error(msg, e);
- throw new IOException(msg);
- }
- try {
- // replace value instance with value
- // backed by resource in blob store and delete temp file
- if (blobStore instanceof ResourceBasedBLOBStore) {
- values[i] = InternalValue.create(((ResourceBasedBLOBStore) blobStore).getResource(blobId));
- } else {
- values[i] = InternalValue.create(blobStore.get(blobId));
+ try {
+ // replace value instance with value
+ // backed by resource in blob store and delete temp file
+ if (blobStore instanceof ResourceBasedBLOBStore) {
+ values[i] = InternalValue.create(((ResourceBasedBLOBStore) blobStore).getResource(blobId));
+ } else {
+ values[i] = InternalValue.create(blobStore.get(blobId));
+ }
+ } catch (Exception e) {
+ log.error("Error while reloading blob. truncating. id="
+ + state.getId() + " idx=" + i + " size=" + size, e);
+ values[i] = InternalValue.create(new byte[0]);
}
- } catch (Exception e) {
- log.error("Error while reloading blob. truncating. id="
- + state.getId() + " idx=" + i + " size=" + size, e);
- values[i] = InternalValue.create(new byte[0]);
+ val.discard();
}
- blobVal.discard();
+ // store id of blob as property value
+ out.writeUTF(blobId); // value
+ } else {
+ // delete evt. blob
+ byte[] data = writeSmallBinary(out, val, state, i);
+ // replace value instance with value
+ // backed by resource in blob store and delete temp file
+ values[i] = InternalValue.create(data);
+ val.discard();
}
- // store id of blob as property value
- out.writeUTF(blobId); // value
- } else {
- // delete evt. blob
- byte[] data = writeSmallBinary(out, blobVal, state, i);
- // replace value instance with value
- // backed by resource in blob store and delete temp file
- values[i] = InternalValue.create(data);
- blobVal.discard();
+ } catch (RepositoryException e) {
+ String msg = "Error while storing blob. id="
+ + state.getId() + " idx=" + i + " value=" + val;
+ log.error(msg, e);
+ throw new IOException(msg);
}
break;
case PropertyType.DOUBLE:
@@ -744,25 +743,25 @@
* @return the data
* @throws IOException if the data could not be read
*/
- private byte[] writeSmallBinary(DataOutputStream out, BLOBFileValue blobVal, NodePropBundle.PropertyEntry state, int i) throws IOException {
- int size = (int) blobVal.getLength();
- out.writeInt(size);
- byte[] data = new byte[size];
+ private byte[] writeSmallBinary(DataOutputStream out, InternalValue value, NodePropBundle.PropertyEntry state, int i) throws IOException {
try {
+ int size = (int) value.getLength();
+ out.writeInt(size);
+ byte[] data = new byte[size];
DataInputStream in =
- new DataInputStream(blobVal.getStream());
+ new DataInputStream(value.getStream());
try {
in.readFully(data);
} finally {
IOUtils.closeQuietly(in);
}
+ out.write(data, 0, data.length);
+ return data;
} catch (Exception e) {
String msg = "Error while storing blob. id="
- + state.getId() + " idx=" + i + " size=" + size;
+ + state.getId() + " idx=" + i + " value=" + value;
log.error(msg, e);
throw new IOException(msg);
}
- out.write(data, 0, data.length);
- return data;
}
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/db/DatabasePersistenceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/db/DatabasePersistenceManager.java?rev=784058&r1=784057&r2=784058&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/db/DatabasePersistenceManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/db/DatabasePersistenceManager.java Fri Jun 12 10:20:06 2009
@@ -34,7 +34,6 @@
import org.apache.jackrabbit.core.state.NodeReferencesId;
import org.apache.jackrabbit.core.state.NodeState;
import org.apache.jackrabbit.core.state.PropertyState;
-import org.apache.jackrabbit.core.value.BLOBFileValue;
import org.apache.jackrabbit.core.value.InternalValue;
import org.apache.jackrabbit.util.Text;
import org.slf4j.Logger;
@@ -534,9 +533,7 @@
InternalValue val = values[i];
if (val != null) {
if (val.getType() == PropertyType.BINARY) {
- BLOBFileValue blobVal = val.getBLOBFileValue();
- // delete internal resource representation of BLOB value
- blobVal.delete(true);
+ val.deleteBinaryResource();
// also remove from BLOBStore
String blobId = blobStore.createId(state.getPropertyId(), i);
try {
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/mem/InMemPersistenceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/mem/InMemPersistenceManager.java?rev=784058&r1=784057&r2=784058&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/mem/InMemPersistenceManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/mem/InMemPersistenceManager.java Fri Jun 12 10:20:06 2009
@@ -34,7 +34,6 @@
import org.apache.jackrabbit.core.state.PropertyState;
import org.apache.jackrabbit.core.persistence.util.FileSystemBLOBStore;
import org.apache.jackrabbit.core.persistence.util.Serializer;
-import org.apache.jackrabbit.core.value.BLOBFileValue;
import org.apache.jackrabbit.core.value.InternalValue;
import org.apache.jackrabbit.spi.Name;
import org.slf4j.Logger;
@@ -482,11 +481,7 @@
if (values != null) {
for (InternalValue val : values) {
if (val != null) {
- if (val.getType() == PropertyType.BINARY) {
- BLOBFileValue blobVal = val.getBLOBFileValue();
- // delete blob file and prune empty parent folders
- blobVal.delete(true);
- }
+ val.deleteBinaryResource();
}
}
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/obj/ObjectPersistenceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/obj/ObjectPersistenceManager.java?rev=784058&r1=784057&r2=784058&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/obj/ObjectPersistenceManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/obj/ObjectPersistenceManager.java Fri Jun 12 10:20:06 2009
@@ -34,7 +34,6 @@
import org.apache.jackrabbit.core.state.NodeReferencesId;
import org.apache.jackrabbit.core.state.NodeState;
import org.apache.jackrabbit.core.state.PropertyState;
-import org.apache.jackrabbit.core.value.BLOBFileValue;
import org.apache.jackrabbit.core.value.InternalValue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -410,11 +409,7 @@
for (int i = 0; i < values.length; i++) {
InternalValue val = values[i];
if (val != null) {
- if (val.getType() == PropertyType.BINARY) {
- BLOBFileValue blobVal = val.getBLOBFileValue();
- // delete blob file and prune empty parent folders
- blobVal.delete(true);
- }
+ val.deleteBinaryResource();
}
}
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/Serializer.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/Serializer.java?rev=784058&r1=784057&r2=784058&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/Serializer.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/Serializer.java Fri Jun 12 10:20:06 2009
@@ -26,7 +26,6 @@
import org.apache.jackrabbit.core.state.NodeState;
import org.apache.jackrabbit.core.state.PropertyState;
import org.apache.jackrabbit.core.state.ChildNodeEntry;
-import org.apache.jackrabbit.core.value.BLOBFileValue;
import org.apache.jackrabbit.core.value.InternalValue;
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.uuid.UUID;
@@ -97,14 +96,14 @@
c = state.getPropertyNames();
out.writeInt(c.size()); // count
for (Iterator<Name> iter = c.iterator(); iter.hasNext();) {
- Name propName = (Name) iter.next();
+ Name propName = iter.next();
out.writeUTF(propName.toString()); // name
}
// child nodes (list of name/uuid pairs)
Collection<ChildNodeEntry> collChildren = state.getChildNodeEntries();
out.writeInt(collChildren.size()); // count
for (Iterator<ChildNodeEntry> iter = collChildren.iterator(); iter.hasNext();) {
- ChildNodeEntry entry = (ChildNodeEntry) iter.next();
+ ChildNodeEntry entry = iter.next();
out.writeUTF(entry.getName().toString()); // name
out.write(entry.getId().getUUID().getRawBytes()); // uuid
}
@@ -196,11 +195,10 @@
if (state.getType() == PropertyType.BINARY) {
// special handling required for binary value:
// put binary value in BLOB store
- BLOBFileValue blobVal = val.getBLOBFileValue();
- InputStream in = blobVal.getStream();
+ InputStream in = val.getStream();
String blobId = blobStore.createId(state.getPropertyId(), i);
try {
- blobStore.put(blobId, in, blobVal.getLength());
+ blobStore.put(blobId, in, val.getLength());
} finally {
IOUtils.closeQuietly(in);
}
@@ -223,7 +221,7 @@
IOUtils.closeQuietly(in);
}
}
- blobVal.discard();
+ val.discard();
} else {
/**
* because writeUTF(String) has a size limit of 65k,
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/xml/XMLPersistenceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/xml/XMLPersistenceManager.java?rev=784058&r1=784057&r2=784058&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/xml/XMLPersistenceManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/xml/XMLPersistenceManager.java Fri Jun 12 10:20:06 2009
@@ -39,7 +39,6 @@
import org.apache.jackrabbit.core.persistence.util.FileSystemBLOBStore;
import org.apache.jackrabbit.core.persistence.util.ResourceBasedBLOBStore;
import org.apache.jackrabbit.core.util.DOMWalker;
-import org.apache.jackrabbit.core.value.BLOBFileValue;
import org.apache.jackrabbit.core.value.InternalValue;
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.NameFactory;
@@ -672,11 +671,10 @@
if (type == PropertyType.BINARY) {
// special handling required for binary value:
// put binary value in BLOB store
- BLOBFileValue blobVal = val.getBLOBFileValue();
- InputStream in = blobVal.getStream();
+ InputStream in = val.getStream();
String blobId = blobStore.createId(state.getPropertyId(), i);
try {
- blobStore.put(blobId, in, blobVal.getLength());
+ blobStore.put(blobId, in, val.getLength());
} finally {
IOUtils.closeQuietly(in);
}
@@ -703,7 +701,7 @@
}
}
}
- blobVal.discard();
+ val.discard();
} else {
writer.write(Text.encodeIllegalXMLCharacters(val.toString()));
}
@@ -760,11 +758,7 @@
for (int i = 0; i < values.length; i++) {
InternalValue val = values[i];
if (val != null) {
- if (val.getType() == PropertyType.BINARY) {
- BLOBFileValue blobVal = val.getBLOBFileValue();
- // delete blob file and prune empty parent folders
- blobVal.delete(true);
- }
+ val.deleteBinaryResource();
}
}
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java?rev=784058&r1=784057&r2=784058&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java Fri Jun 12 10:20:06 2009
@@ -24,7 +24,6 @@
import org.apache.jackrabbit.core.state.NodeState;
import org.apache.jackrabbit.core.state.PropertyState;
import org.apache.jackrabbit.core.state.ChildNodeEntry;
-import org.apache.jackrabbit.core.value.BLOBFileValue;
import org.apache.jackrabbit.core.value.InternalValue;
import org.apache.jackrabbit.extractor.TextExtractor;
import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
@@ -298,7 +297,7 @@
switch (value.getType()) {
case PropertyType.BINARY:
if (isIndexed(name)) {
- addBinaryValue(doc, fieldName, value.getBLOBFileValue());
+ addBinaryValue(doc, fieldName, value);
}
break;
case PropertyType.BOOLEAN:
@@ -409,7 +408,7 @@
*/
protected void addBinaryValue(Document doc,
String fieldName,
- Object internalValue) {
+ InternalValue internalValue) {
// 'check' if node is of type nt:resource
try {
String jcrData = mappings.getPrefix(Name.NS_JCR_URI) + ":data";
@@ -429,8 +428,7 @@
encoding = encodingValue.getString();
}
- InputStream stream =
- ((BLOBFileValue) internalValue).getStream();
+ InputStream stream = internalValue.getStream();
Reader reader = extractor.extractText(stream, type, encoding);
doc.add(createFulltextField(reader));
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBFileValue.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBFileValue.java?rev=784058&r1=784057&r2=784058&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBFileValue.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBFileValue.java Fri Jun 12 10:20:06 2009
@@ -36,7 +36,7 @@
* This interface is for Jackrabbit-internal use only. Applications should
* use <code>javax.jcr.ValueFactory</code> to create binary values.
*/
-public abstract class BLOBFileValue implements Binary {
+abstract class BLOBFileValue implements Binary {
/**
* Returns a String representation of this value.
@@ -72,22 +72,13 @@
}
/**
- * Returns the length of this <code>BLOBFileValue</code>.
- *
- * @return The length, in bytes, of this <code>BLOBFileValue</code>,
- * or -1L if the length can't be determined.
- * @throws IOException
- */
- public abstract long getLength();
-
- /**
* Frees temporarily allocated resources such as temporary file, buffer, etc.
* If this <code>BLOBFileValue</code> is backed by a persistent resource
* calling this method will have no effect.
*
* @see #delete(boolean)
*/
- public abstract void discard();
+ abstract void discard();
/**
* Deletes the persistent resource backing this <code>BLOBFileValue</code>.
@@ -95,7 +86,7 @@
* @param pruneEmptyParentDirs if <code>true</code>, empty parent directories
* will automatically be deleted
*/
- public abstract void delete(boolean pruneEmptyParentDirs);
+ abstract void delete(boolean pruneEmptyParentDirs);
/**
* Checks if this object is immutable.
@@ -105,30 +96,13 @@
*/
abstract boolean isImmutable();
- /**
- * {@inheritDoc}
- */
public abstract boolean equals(Object obj);
- /**
- * {@inheritDoc}
- */
public abstract String toString();
- /**
- * {@inheritDoc}
- */
public abstract int hashCode();
/**
- * Check if the value is small (contains a low number of bytes) and should
- * be stored inline.
- *
- * @return true if the value is small
- */
- public abstract boolean isSmall();
-
- /**
* Get the data identifier if one is available.
*
* @return the data identifier or null
@@ -138,14 +112,10 @@
}
//-----------------------------------------------------< javax.jcr.Binary >
- /**
- * {@inheritDoc}
- */
+ public abstract long getSize();
+
public abstract InputStream getStream() throws RepositoryException;
- /**
- * {@inheritDoc}
- */
public int read(byte[] b, long position) throws IOException, RepositoryException {
InputStream in = getStream();
try {
@@ -156,10 +126,6 @@
}
}
- public long getSize() throws RepositoryException {
- return getLength();
- }
-
public void dispose() {
discard();
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInDataStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInDataStore.java?rev=784058&r1=784057&r2=784058&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInDataStore.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInDataStore.java Fri Jun 12 10:20:06 2009
@@ -53,15 +53,15 @@
this.identifier = identifier;
}
- public void delete(boolean pruneEmptyParentDirs) {
+ void delete(boolean pruneEmptyParentDirs) {
// do nothing
}
- public void discard() {
+ void discard() {
// do nothing
}
- public DataIdentifier getDataIdentifier() {
+ DataIdentifier getDataIdentifier() {
return identifier;
}
@@ -88,11 +88,11 @@
return 0;
}
- public long getLength() {
+ public long getSize() {
try {
return getDataRecord().getLength();
} catch (DataStoreException e) {
- log.warn("getLength for " + identifier + " failed", e);
+ log.warn("getSize for " + identifier + " failed", e);
return -1;
}
}
@@ -135,8 +135,4 @@
return store.getRecord(identifier);
}
- public boolean isSmall() {
- return false;
- }
-
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInMemory.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInMemory.java?rev=784058&r1=784057&r2=784058&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInMemory.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInMemory.java Fri Jun 12 10:20:06 2009
@@ -117,19 +117,13 @@
return BLOBInMemory.getInstance(data);
}
- /**
- * {@inheritDoc}
- */
- public void delete(boolean pruneEmptyParentDirs) {
+ void delete(boolean pruneEmptyParentDirs) {
// do nothing
// this object could still be referenced
// the data will be garbage collected
}
- /**
- * {@inheritDoc}
- */
- public void discard() {
+ void discard() {
// do nothing
// this object could still be referenced
// the data will be garbage collected
@@ -139,24 +133,15 @@
return true;
}
- /**
- * {@inheritDoc}
- */
- public long getLength() {
+ public long getSize() {
return data.length;
}
- /**
- * {@inheritDoc}
- */
public InputStream getStream() {
return new ByteArrayInputStream(data);
}
- /**
- * {@inheritDoc}
- */
- public String getString() throws RepositoryException {
+ String getString() throws RepositoryException {
try {
return new String(data, "UTF-8");
} catch (UnsupportedEncodingException e) {
@@ -164,9 +149,6 @@
}
}
- /**
- * {@inheritDoc}
- */
public String toString() {
StringBuilder buff = new StringBuilder(PREFIX.length() + 2 * data.length);
buff.append(PREFIX);
@@ -179,9 +161,6 @@
return buff.toString();
}
- /**
- * {@inheritDoc}
- */
public boolean equals(Object obj) {
if (this == obj) {
return true;
@@ -204,8 +183,4 @@
return 0;
}
- public boolean isSmall() {
- return true;
- }
-
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInResource.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInResource.java?rev=784058&r1=784057&r2=784058&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInResource.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInResource.java Fri Jun 12 10:20:06 2009
@@ -82,10 +82,7 @@
return new BLOBInResource(fsResource);
}
- /**
- * {@inheritDoc}
- */
- public void delete(boolean pruneEmptyParentDirs) {
+ void delete(boolean pruneEmptyParentDirs) {
try {
fsResource.delete(pruneEmptyParentDirs);
} catch (FileSystemException fse) {
@@ -95,10 +92,7 @@
}
- /**
- * {@inheritDoc}
- */
- public void discard() {
+ void discard() {
// this instance is not backed by temporarily allocated resource/buffer
}
@@ -107,16 +101,10 @@
return false;
}
- /**
- * {@inheritDoc}
- */
- public long getLength() {
+ public long getSize() {
return length;
}
- /**
- * {@inheritDoc}
- */
public InputStream getStream() throws RepositoryException {
try {
return fsResource.getInputStream();
@@ -126,16 +114,10 @@
}
}
- /**
- * {@inheritDoc}
- */
public String toString() {
return PREFIX + fsResource.toString();
}
- /**
- * {@inheritDoc}
- */
public boolean equals(Object obj) {
if (this == obj) {
return true;
@@ -158,11 +140,4 @@
return 0;
}
- /**
- * {@inheritDoc}
- */
- public boolean isSmall() {
- return false;
- }
-
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInTempFile.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInTempFile.java?rev=784058&r1=784057&r2=784058&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInTempFile.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInTempFile.java Fri Jun 12 10:20:06 2009
@@ -105,19 +105,13 @@
return new BLOBInTempFile(file, temp);
}
- /**
- * {@inheritDoc}
- */
- public void delete(boolean pruneEmptyParentDirs) {
+ void delete(boolean pruneEmptyParentDirs) {
file.delete();
length = -1;
file = null;
}
- /**
- * {@inheritDoc}
- */
- public void discard() {
+ void discard() {
if (temp) {
delete(true);
}
@@ -128,16 +122,10 @@
return false;
}
- /**
- * {@inheritDoc}
- */
- public long getLength() {
+ public long getSize() {
return length;
}
- /**
- * {@inheritDoc}
- */
public InputStream getStream() throws IllegalStateException, RepositoryException {
try {
return new LazyFileInputStream(file);
@@ -146,16 +134,10 @@
}
}
- /**
- * {@inheritDoc}
- */
public String toString() {
return PREFIX + file.toString();
}
- /**
- * {@inheritDoc}
- */
public boolean equals(Object obj) {
if (this == obj) {
return true;
@@ -178,16 +160,6 @@
return 0;
}
- /**
- * {@inheritDoc}
- */
- public boolean isSmall() {
- return false;
- }
-
- /**
- * {@inheritDoc}
- */
public int read(byte[] b, long position) throws IOException, RepositoryException {
RandomAccessFile raf = new RandomAccessFile(file, "r");
try {
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBValue.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBValue.java?rev=784058&r1=784057&r2=784058&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBValue.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBValue.java Fri Jun 12 10:20:06 2009
@@ -205,13 +205,7 @@
temp = false;
}
- /**
- * Returns the length of this <code>BLOBFileValue</code>.
- *
- * @return The length, in bytes, of this <code>BLOBFileValue</code>,
- * or -1L if the length can't be determined.
- */
- public long getLength() {
+ public long getSize() {
if (file != null) {
// this instance is backed by a 'real' file
if (file.exists()) {
@@ -239,7 +233,7 @@
*
* @see #delete(boolean)
*/
- public void discard() {
+ void discard() {
if (!temp) {
// do nothing if this instance is not backed by temporarily
// allocated resource/buffer
@@ -260,7 +254,7 @@
* @param pruneEmptyParentDirs if <code>true</code>, empty parent directories
* will automatically be deleted
*/
- public void delete(boolean pruneEmptyParentDirs) {
+ void delete(boolean pruneEmptyParentDirs) {
if (file != null) {
// this instance is backed by a 'real' file
file.delete();
@@ -313,9 +307,6 @@
}
}
- /**
- * {@inheritDoc}
- */
public boolean equals(Object obj) {
if (this == obj) {
return true;
@@ -340,16 +331,6 @@
return 0;
}
- /**
- * {@inheritDoc}
- */
- public boolean isSmall() {
- return false;
- }
-
- /**
- * {@inheritDoc}
- */
public InputStream getStream() throws RepositoryException {
// always return a 'fresh' stream
if (file != null) {
@@ -373,9 +354,6 @@
}
}
- /**
- * {@inheritDoc}
- */
public int read(byte[] b, long position) throws IOException, RepositoryException {
if (file != null) {
// this instance is backed by a temp file
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BinaryValueImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BinaryValueImpl.java?rev=784058&r1=784057&r2=784058&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BinaryValueImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BinaryValueImpl.java Fri Jun 12 10:20:06 2009
@@ -38,9 +38,6 @@
this.blob = blob;
}
- /**
- * {@inheritDoc}
- */
public String getContentIdentity() {
DataIdentifier id = blob.getDataIdentifier();
return id == null ? null : id.toString();
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=784058&r1=784057&r2=784058&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 Fri Jun 12 10:20:06 2009
@@ -121,15 +121,6 @@
InternalValue result;
if (USE_DATA_STORE) {
BLOBFileValue blob = null;
- if (value instanceof QValueValue) {
- QValueValue qvv = (QValueValue) value;
- QValue qv = qvv.getQValue();
- if (qv instanceof InternalValue) {
- InternalValue iv = (InternalValue) qv;
-
- iv.getBLOBFileValue();
- }
- }
if (value instanceof BinaryValueImpl) {
BinaryValueImpl bin = (BinaryValueImpl) value;
DataIdentifier identifier = bin.getDataIdentifier();
@@ -271,7 +262,7 @@
* @param value
* @return the created value
*/
- public static InternalValue create(URI value) {
+ static InternalValue create(URI value) {
return new InternalValue(value);
}
@@ -399,18 +390,6 @@
}
/**
- * @param values
- * @return the created value
- */
- public static InternalValue[] create(String[] values) {
- InternalValue[] ret = new InternalValue[values.length];
- for (int i = 0; i < values.length; i++) {
- ret[i] = new InternalValue(values[i]);
- }
- return ret;
- }
-
- /**
* @param value
* @return the created value
*/
@@ -437,7 +416,7 @@
//----------------------------------------------------< conversions, etc. >
- public BLOBFileValue getBLOBFileValue() {
+ BLOBFileValue getBLOBFileValue() {
assert val != null && type == PropertyType.BINARY;
return (BLOBFileValue) val;
}
@@ -655,7 +634,7 @@
* @param dataStore the data store
* @throws RepositoryException
*/
- public void store(DataStore dataStore) throws RepositoryException, IOException {
+ public void store(DataStore dataStore) throws RepositoryException {
assert USE_DATA_STORE;
assert dataStore != null;
assert type == PropertyType.BINARY;
@@ -663,14 +642,9 @@
if (v instanceof BLOBInDataStore) {
// already in the data store, OK
return;
- } else if (v instanceof BLOBInMemory) {
- if (v.getLength() < dataStore.getMinRecordLength()) {
- // in memory and does not make sense to store, OK
- return;
- }
}
- // store the temp file to the data store, or (theoretically) load it in memory
- val = getBLOBFileValue(dataStore, v.getStream(), false);
+ // store it in the data store
+ val = BLOBInDataStore.getInstance(dataStore, getStream());
}
//-------------------------------------------------------------< QValue >---
@@ -679,7 +653,7 @@
*/
public long getLength() throws RepositoryException {
if (PropertyType.BINARY == type) {
- return ((BLOBFileValue) val).getLength();
+ return ((BLOBFileValue) val).getSize();
} else {
return super.getLength();
}
@@ -741,4 +715,16 @@
super.discard();
}
}
+
+ /**
+ * Delete persistent binary objects. This method does not delete objects in
+ * the data store.
+ */
+ public void deleteBinaryResource() {
+ if (type == PropertyType.BINARY) {
+ BLOBFileValue bfv = (BLOBFileValue) val;
+ bfv.delete(true);
+ }
+ }
+
}