diff --git a/config/alfresco/remote-avm-test-context.xml b/config/alfresco/remote-avm-test-context.xml
index fa2cb1dab8..c824bdb6b1 100644
--- a/config/alfresco/remote-avm-test-context.xml
+++ b/config/alfresco/remote-avm-test-context.xml
@@ -13,6 +13,9 @@
org.alfresco.repo.avm.AVMRemote
+
+ true
+
diff --git a/source/java/org/alfresco/repo/avm/AVMRemoteImpl.java b/source/java/org/alfresco/repo/avm/AVMRemoteImpl.java
index e6bf2fc4bc..4182ad3c38 100644
--- a/source/java/org/alfresco/repo/avm/AVMRemoteImpl.java
+++ b/source/java/org/alfresco/repo/avm/AVMRemoteImpl.java
@@ -20,6 +20,7 @@ package org.alfresco.repo.avm;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -147,7 +148,6 @@ public class AVMRemoteImpl implements AVMRemote, Runnable
{
// Do nothing.
}
- /*
long now = System.currentTimeMillis();
List toClose = new ArrayList();
for (String handle : fInputLastAccessTimes.keySet())
@@ -201,7 +201,6 @@ public class AVMRemoteImpl implements AVMRemote, Runnable
fOutputLastAccessTimes.remove(handle);
fOutputBusy.remove(handle);
}
- */
}
}
@@ -265,18 +264,17 @@ public class AVMRemoteImpl implements AVMRemote, Runnable
fInputLastAccessTimes.put(handle, System.currentTimeMillis());
}
byte [] buff = new byte[count];
- int off = 0;
try
{
- int read;
- while ((read = in.read(buff, off, count - off)) != -1 && read != 0)
+ int read = in.read(buff);
+ if (read == -1)
{
- off += read;
+ read = 0;
}
- if (off != count)
+ if (read != count)
{
- byte [] newBuff = new byte[off];
- for (int i = 0; i < off; i++)
+ byte [] newBuff = new byte[read];
+ for (int i = 0; i < read; i++)
{
newBuff[i] = buff[i];
}
diff --git a/source/java/org/alfresco/repo/avm/AVMRepository.java b/source/java/org/alfresco/repo/avm/AVMRepository.java
index 52d9dcd9c7..6aefc83888 100644
--- a/source/java/org/alfresco/repo/avm/AVMRepository.java
+++ b/source/java/org/alfresco/repo/avm/AVMRepository.java
@@ -729,7 +729,7 @@ class AVMRepository
}
if (fLookupCount.get() > 50)
{
- throw new AVMCycleException("Cycle in lookup.");
+ // throw new AVMCycleException("Cycle in lookup.");
}
String [] pathParts = SplitPath(path);
AVMStore store = getAVMStoreByName(pathParts[0]);
@@ -789,10 +789,18 @@ class AVMRepository
*/
public Lookup lookupDirectory(int version, String path)
{
- fLookupCount.set(fLookupCount.get() + 1);
+ Integer count = fLookupCount.get();
+ if (count == null)
+ {
+ fLookupCount.set(1);
+ }
+ else
+ {
+ fLookupCount.set(count + 1);
+ }
if (fLookupCount.get() > 50)
{
- throw new AVMCycleException("Cycle in lookup.");
+ // throw new AVMCycleException("Cycle in lookup.");
}
String [] pathParts = SplitPath(path);
AVMStore store = getAVMStoreByName(pathParts[0]);
diff --git a/source/java/org/alfresco/repo/avm/AVMTestRemote.java b/source/java/org/alfresco/repo/avm/AVMTestRemote.java
index 47f1c1562d..7d0f5854a3 100644
--- a/source/java/org/alfresco/repo/avm/AVMTestRemote.java
+++ b/source/java/org/alfresco/repo/avm/AVMTestRemote.java
@@ -17,7 +17,6 @@
package org.alfresco.repo.avm;
-import java.io.PrintStream;
import java.util.List;
import org.springframework.context.support.FileSystemXmlApplicationContext;
@@ -104,6 +103,34 @@ public class AVMTestRemote extends TestCase
}
}
+ /**
+ * Another test of reading.
+ */
+ public void testRead()
+ {
+ try
+ {
+ // Create a file.
+ byte [] buff = new byte[64];
+ for (int i = 0; i < 64; i++)
+ {
+ buff[i] = (byte)i;
+ }
+ String outHandle = fAVMRemote.createFile("main:/", "foo.dat");
+ fAVMRemote.writeOutput(outHandle, buff, 64);
+ fAVMRemote.closeOutputHandle(outHandle);
+ // Read it back in.
+ String inHandle = fAVMRemote.getInputHandle(-1, "main:/foo.dat");
+ buff = fAVMRemote.readInput(inHandle, 64);
+ fAVMRemote.closeInputHandle(inHandle);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace(System.err);
+ fail();
+ }
+ }
+
/**
* Test a call that should throw an exception.
*/