You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2007/08/08 16:34:09 UTC
svn commit: r563900 -
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/BundleDbPersistenceManager.java
Author: stefan
Date: Wed Aug 8 07:34:09 2007
New Revision: 563900
URL: http://svn.apache.org/viewvc?view=rev&rev=563900
Log:
JCR-1039: Bundle Persistence Manager error - failing to read bundle the first time
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/BundleDbPersistenceManager.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/BundleDbPersistenceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/BundleDbPersistenceManager.java?view=diff&rev=563900&r1=563899&r2=563900
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/BundleDbPersistenceManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/BundleDbPersistenceManager.java Wed Aug 8 07:34:09 2007
@@ -26,7 +26,6 @@
import org.apache.jackrabbit.core.state.NodeReferences;
import org.apache.jackrabbit.core.persistence.PMContext;
import org.apache.jackrabbit.core.persistence.AbstractPersistenceManager;
-import org.apache.jackrabbit.core.persistence.bundle.util.TrackingInputStream;
import org.apache.jackrabbit.core.persistence.bundle.util.DbNameIndex;
import org.apache.jackrabbit.core.persistence.bundle.util.NodePropBundle;
import org.apache.jackrabbit.core.persistence.bundle.util.BundleBinding;
@@ -73,7 +72,6 @@
* <p/>
* Configuration:<br>
* <ul>
- * <li><param name="{@link #setExternalBLOBs(String)} externalBLOBs}" value="false"/>
* <li><param name="{@link #setBundleCacheSize(String) bundleCacheSize}" value="8"/>
* <li><param name="{@link #setConsistencyCheck(String) consistencyCheck}" value="false"/>
* <li><param name="{@link #setConsistencyFix(String) consistencyFix}" value="false"/>
@@ -877,7 +875,7 @@
throws ItemStateException {
PreparedStatement stmt = bundleSelect;
ResultSet rs = null;
- DataInputStream din = null;
+ InputStream in = null;
try {
setKey(stmt, id.getUUID(), 1);
stmt.execute();
@@ -886,17 +884,24 @@
return null;
}
Blob b = rs.getBlob(1);
- TrackingInputStream cin = new TrackingInputStream(b.getBinaryStream());
- din = new DataInputStream(cin);
+ // JCR-1039: pre-fetch/buffer blob data
+ long length = b.length();
+ byte[] bytes = new byte[(int) length];
+ in = b.getBinaryStream();
+ int read, pos = 0;
+ while ((read = in.read(bytes, pos, bytes.length - pos)) > 0) {
+ pos += read;
+ }
+ DataInputStream din = new DataInputStream(new ByteArrayInputStream(bytes));
NodePropBundle bundle = binding.readBundle(din, id);
- bundle.setSize(cin.getPosition());
+ bundle.setSize(length);
return bundle;
} catch (Exception e) {
String msg = "failed to read bundle: " + id + ": " + e;
log.error(msg);
throw new ItemStateException(msg, e);
} finally {
- closeStream(din);
+ closeStream(in);
closeResultSet(rs);
resetStatement(stmt);
}