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

        

Reply via email to