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>&lt;param name="{@link #setExternalBLOBs(String)} externalBLOBs}" value="false"/>
  * <li>&lt;param name="{@link #setBundleCacheSize(String) bundleCacheSize}" value="8"/>
  * <li>&lt;param name="{@link #setConsistencyCheck(String) consistencyCheck}" value="false"/>
  * <li>&lt;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);
         }