DataStore: changing the modified date fails if the file is open for reading
(Windows only)
------------------------------------------------------------------------------------------
Key: JCR-2872
URL: https://issues.apache.org/jira/browse/JCR-2872
Project: Jackrabbit Content Repository
Issue Type: Bug
Components: jackrabbit-core
Environment: Windows
Reporter: Thomas Mueller
Assignee: Thomas Mueller
If the file is open for reading, Windows doesn't allow to change the last
modified time using File.setLastModified():
org.apache.jackrabbit.core.data.DataStoreException: Failed to update record
modified date: 2ac72495fd1e270777821b8a872903c79c84a8d9
at
org.apache.jackrabbit.core.data.FileDataStore.addRecord(FileDataStore.java:250)
at
org.apache.jackrabbit.core.value.BLOBInDataStore.getInstance(BLOBInDataStore.java:119)
at
org.apache.jackrabbit.core.value.InternalValue.getBLOBFileValue(InternalValue.java:619)
at
org.apache.jackrabbit.core.value.InternalValue.create(InternalValue.java:369)
at
org.apache.jackrabbit.core.value.InternalValueFactory.create(InternalValueFactory.java:94)
at
org.apache.jackrabbit.core.value.ValueFactoryImpl.createBinary(ValueFactoryImpl.java:74)
Test case and possible workaround:
import java.io.File;
import java.io.FileInputStream;
import java.io.RandomAccessFile;
public class Test {
public static void main(String... args) throws Exception {
String name = "test.txt";
File test = new File(name);
RandomAccessFile r = new RandomAccessFile(name, "rw");
r.write(0);
r.close();
long mod = test.lastModified();
Thread.sleep(3000);
FileInputStream in = new FileInputStream(name);
if (!test.setLastModified(test.lastModified()+1)) {
if (!test.canWrite()) {
System.out.println("Can't write to " + name);
} else {
System.out.println("canWrite ok");
r = new RandomAccessFile(name, "rw");
int old = r.read();
r.seek(0);
r.write(old);
r.close();
}
} else {
System.out.println("setLastModified ok");
}
System.out.println("Modified old: " + mod);
System.out.println("Modified now: " + test.lastModified());
in.close();
System.out.println("input closed");
if (!test.setLastModified(test.lastModified()+1)) {
if (!test.canWrite()) {
System.out.println("Can't write to " + name);
} else {
System.out.println("canWrite ok");
}
} else {
System.out.println("setLastModified ok");
}
new File(name).delete();
}
}
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira