Hi all

Using cayenne 1.2.3 and jdk 1.5 on Windows XP.

Sometimes while developing with Tomcat I get the following exception. Seems to happen on serialization of DataContext along with the session. Below the exception is a little test class to reproduce this. Note that if useSharedCache = true, then there is no exception. Should I open a JIRA issue or is this expected behavior?


Exception in thread "main" org.objectstyle.cayenne.CayenneRuntimeException: [v.1.2.3 May 6 2007] Commit Exception
org.objectstyle.cayenne.access.DataContext.flushToParent(DataContext.java:1290)
org.objectstyle.cayenne.access.DataContext.commitChanges(DataContext.java:1166)
test.SerializeDCTest.main(SerializeDCTest.java:29)

Caused by: java.lang.NullPointerException
org.objectstyle.cayenne.access.DataRowStore.sendUpdateNotification(DataRowStore.java:709)
org.objectstyle.cayenne.access.DataRowStore.processSnapshotChanges(DataRowStore.java:574)
org.objectstyle.cayenne.access.DataDomainFlushAction.postprocess(DataDomainFlushAction.java:278)
org.objectstyle.cayenne.access.DataDomainFlushAction.flush(DataDomainFlushAction.java:178)
org.objectstyle.cayenne.access.DataDomain.onSyncFlush(DataDomain.java:846)
org.objectstyle.cayenne.access.DataDomain$2.transform(DataDomain.java:817)
org.objectstyle.cayenne.access.DataDomain.runInTransaction(DataDomain.java:872)
org.objectstyle.cayenne.access.DataDomain.onSync(DataDomain.java:814)
org.objectstyle.cayenne.access.DataContext.flushToParent(DataContext.java:1262)


package test;

public class SerializeDCTest {

    public SerializeDCTest() {
    }

    public static void main(String[] args) {
        //boolean useSharedCache = true; //works
        boolean useSharedCache = false;
DataContext context = DataContext.createDataContext(useSharedCache);
        context = serializeDC(context);
Employee emp = (Employee) DataObjectUtils.objectForPK(context, Employee.class, 740);
        emp.setFirstname("test" + Math.random());
        context.commitChanges();
    }

    public static DataContext serializeDC(DataContext dc) {
        try {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(bos);
            oos.writeObject(dc);

ByteArrayInputStream is = new ByteArrayInputStream(bos.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(is);
            DataContext result = (DataContext) ois.readObject();
            return result;

        } catch (Exception ex) {
throw new RuntimeException("DataContext serialization failed", ex);
        }
    }
}


kind regards

bob

Reply via email to