Hello there,

from the moment I've switched to using a new OSC for my background thread ECs, 
I am occassionally getting weird NPEs, like e.g., this one:

===
Caused by: java.lang.NullPointerException
        at 
com.webobjects.eocontrol.EOCustomObject.changesFromSnapshot(EOCustomObject.java:595)
        at 
com.webobjects.eocontrol.EOCustomObject$changesFromSnapshot$6.callCurrent(Unknown
 Source)
        at 
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
        at 
com.webobjects.eocontrol.EOCustomObject$changesFromSnapshot$6.callCurrent(Unknown
 Source)
        at 
cz.ocs.model.OCSEnterpriseObject.fixArchivedButReallyUnchangedItemsFromSnapshot(OCSEnterpriseObject.groovy:938)
        at 
cz.ocs.model.OCSEnterpriseObject.validateForSave(OCSEnterpriseObject.groovy:980)
        at 
com.webobjects.eocontrol.EOCustomObject.validateForUpdate(EOCustomObject.java:1446)
        at 
er.extensions.eof.ERXGenericRecord.validateForUpdate(ERXGenericRecord.java:1215)
        at 
com.webobjects.eocontrol.EOEditingContext.validateTable(EOEditingContext.java:2271)
        at 
com.webobjects.eocontrol.EOEditingContext.validateChangesForSave(EOEditingContext.java:3020)
        at 
com.webobjects.eocontrol.EOEditingContext._prepareForPushChanges(EOEditingContext.java:3249)
        at 
com.webobjects.eocontrol.EOEditingContext.saveChanges(EOEditingContext.java:3179)
        at er.extensions.eof.ERXEC._saveChanges(ERXEC.java:1179)
        at er.extensions.eof.ERXEC.saveChanges(ERXEC.java:1102)
        at er.extensions.eof.ERXEC$saveChanges$7.call(Unknown Source)
...
===

where my “validateForSave” and “fixArchivedButReallyUnchangedItemsFromSnapshot” 
looks like this:

===
    void fixArchivedButReallyUnchangedItemsFromSnapshot {
        NSDictionary ss=this.editingContext().committedSnapshotForObject(this)
        NSDictionary d=this.changesFromSnapshot(ss) // <=== this is line 938 ===
        if (d.count) ... blah blah ...
    }
    void validateForSave {
        super.validateForSave()
        fixArchivedButReallyUnchangedItemsFromSnapshot() // <=== this is line 
980 ===
    }
===

and never ever used to NPE before, when I used simply 
“ERXEC.newEditingContext()” inside of my thread (but that, of course, did lock 
EOF stack while saving, and if there were thousands imported objects, it caused 
other threads to wait for way too long).

Now, I wonder -- might the reference the EC keeps its OSC in be actually weak 
one? For my particular code would indeed bring havoc if it is:

===
  class ImportCSVTask extends ERXLongResponseTask.DefaultImplementation {
    ...
    def editingContext
    ...
    def performAction {
       ...
       editingContext=ERXEC.newEditingContext(new EOObjectStoreCoordinator())
       ...
    }
  }
===

I must admit I considered it self-evident the reference would be strong; but 
now I'm starting to doubt. Might this be the culprit?

If not (of course I've meantime added a property to be triple-sure), what the H 
might cause that? (Actually I doubt this could be, for it does happen even when 
I pepper my code by System.gc()'s heavily.)

Note: alas I can't “simply test”, for the problems happen intermittently; 
namely, they never happened on my testing site here, they occur only on the 
production server :(

Thanks,
OC



 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to