Chuck, thanks again! I did not know that (well one could write a much bigger book than you did with just those things I do not know...)
Nevertheless, there still must be some ugly fault of mine. When using objectWithPrimaryKeyValue, there's the superfluous fetch, but it works. When replaced by faultWithPrimaryKeyValue, I keep getting NPEs somewhere inside of awakeFromInsertion — at the moment, I can't really make sense of it :( It looks like this: === == about to load 110 from 348ad293 (SEC ) // first time, there's yet no SEC... 4105 [main] DEBUG NSLog - Using JDBCPlugIn 'com.webobjects.jdbcadaptor.FrontbasePlugIn' for JDBCAdaptor@2076611420 ... and it is being initialised here; it fetches properly all the shared EOs ... 4110 [main] DEBUG NSLog - connecting with dictionary: {username = ""; password = "<password deleted for log>"; URL = "jdbc:FrontBase://localhost/SBERDAT3/user=FINServis/isolation=read_committed/locking=optimistic"; } ... ... ... the proper SQL to load all the shared objects here ... ... ... 4235 [main] DEBUG NSLog - === Commit Internal Transaction ... and here's a problem; my overridden awakeFromInsertion logs this just before a super.awakeFromInsertion: awakeFromInsertion: <DBDFList@709f0202 PK: N NULL-EC> in er.extensions.eof.ERXEC@348ad293 ... and a log _after_ super does not happen; instead, I get this: java.lang.Exception: ... ... ... Caused by: java.lang.NullPointerException at er.extensions.eof.ERXGenericRecord.awakeFromInsertion(ERXGenericRecord.java:512) at cz.ocs.model.OCSEnterpriseObject.super$4$awakeFromInsertion(OCSEnterpriseObject.groovy) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:564) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98) ... groovy stuff here ... at cz.ocs.model.OCSEnterpriseObject.awakeFromInsertion(OCSEnterpriseObject.groovy:265) // [*] at com.webobjects.eocontrol.EOEditingContext.insertObjectWithGlobalID(EOEditingContext.java:2871) at er.extensions.eof.ERXEC.insertObjectWithGlobalID(ERXEC.java:975) at er.extensions.eof.ERXEC$insertObjectWithGlobalID$0.call(Unknown Source) ... groovy stuff here ... at cz.ocs.model.OCSEnterpriseObject.staticEOSVM(OCSEnterpriseObject.groovy:164) // the faultWith... here === The awake code looks simply like this: === void awakeFromInsertion(EOEditingContext ec) { println "awakeFromInsertion: ${this} in ${ec}" // this one happens before the NPE super.awakeFromInsertion(ec) // [*] println "supered awakeFromInsertion: ${this} in ${ec}" // we do not get this far ... ... ... === Alas, at the moment I have no idea at all what in my code might be the culprit :( Thanks and all the best, OC > On 22 Aug 2018, at 3:14 AM, Chuck Hill <ch...@gevityinc.com> wrote: > > Yes, that makes complete sense. EOUtilities.objectWithPrimaryKeyValue is > documented to “Fetches the Enterprise Object identified by the specified > primary key value”. It will fetch. Always. It might not use the fetched > result, but you asked it to fetch so it will. The method you want is > faultWithPrimaryKeyValue. That will either resolve the object reference from > an EO already in the EC, in the shared EC, or in the snapshot cache. If all > of those fail, only then will it fetch. > > And yes, the JavaDocs for faultWithPrimaryKeyValue are wrong (copied from > objectWithPrimaryKeyValue). > > > Chuck > > > From: "ocs@ocs" <o...@ocs.cz <mailto:o...@ocs.cz>> > Date: Tuesday, August 21, 2018 at 5:15 PM > To: Chuck Hill <ch...@gevityinc.com <mailto:ch...@gevityinc.com>> > Cc: "webobjects-dev@lists.apple.com <mailto:webobjects-dev@lists.apple.com>" > <webobjects-dev@lists.apple.com <mailto:webobjects-dev@lists.apple.com>> > Subject: Should loading a shared object try to fetch? (was: Should ERXEC get > sharedEC automagically?) > > Even without ERXObjectStoreCoordinatorPool, there's another strange > behaviour. I happen to be loading my objects (many of which happen to be in > the SEC) using “EOUtilities.objectWithPrimaryKeyValue”. > > If the object happens to be in the SEC, I get it all right, but when I switch > on SQL log, it looks like it is fetched anyway?!? I.e., something like this: > > === > println "== about to load $pk from $ec.identityHashString (SEC > $ec.sharedEditingContext.identityHashString)" > def foo=ec.sharedEditingContext.objectsByEntityName[ename].find { > it.rawPrimaryKey==pk } > if (foo!=nil) println " it IS pre-loaded in SEC: $foo" > //object=EOUtilities.objectWithPrimaryKeyValue(ec,ename,pk) > > object=ERXEOControlUtilities.objectWithPrimaryKeyValue(ec,ename,pk,NSArray.EmptyArray,NO,NO) > println " got $object" > === > > logs out something like > > === > == about to load 101 from 25673087 (SEC a7cf42f) > it IS pre-loaded in SEC: <DBDFList@3a4aadf8 PK:101 SEC:a7cf42f> > 4663 [main] DEBUG NSLog - === Begin Internal Transaction > 4663 [main] DEBUG NSLog - evaluateExpression: > <com.webobjects.jdbcadaptor.FrontbasePlugIn$FrontbaseExpression: "SELECT > t0."C_DESCRIPTION", t0."C_CREATION_DATE", t0."C_CREATOR_ID", > t0."C_IDENTIFIER", t0."C_CONTENT_DATA", t0."C_MODIFICATION_DATE", > t0."C_TITLE", t0."C_UID" FROM "T_DF_LIST" t0 WHERE t0."C_UID" = 101" > withBindings: > > 4664 [main] DEBUG NSLog - 1 row(s) processed > 4665 [main] DEBUG NSLog - === Commit Internal Transaction > got <DBDFList@3a4aadf8 PK:101 SEC:a7cf42f> > === > > Happens even with a > “ERXEOControlUtilities.objectWithPrimaryKeyValue(...,NSArray.EmptyArray,false,false)” > instead. > > Does it make any sense? I would presume that with the desired object in the > SEC, no database roundtrip should be needed (and done) at all? > > Thanks and all the best, > OC > > > On 21 Aug 2018, at 10:02 PM, ocs@ocs <o...@ocs.cz <mailto:o...@ocs.cz>> wrote: > > Indeed! If I switch off the OSCPool, it starts to work properly. > > Thanks just again! > > Nevertheless, I still must be missing something of grave importance, for with > OCSPool (I use ), I would presume the SEC for the pool being currently used > by the ERXEC would load the shared objects? > > It does not: the global one does automatically load the shared objects, but > the SEC-based one of ERXEC remains empty. > > Note: the code in question does not run in a session context; it is performed > at launch, before the first session is created. Might that be important > perhaps? > > All the best, > OC > > > > On 21 Aug 2018, at 9:42 PM, Chuck Hill <ch...@gevityinc.com > <mailto:ch...@gevityinc.com>> wrote: > > Are you using the ERXObjectStoreCoordinatorPool? It keeps one SEC per pool, > not one shared globally. > EOSharedEditingContext.defaultSharedEditingContext() is the global one. > > Chuck > > From: "ocs@ocs" <o...@ocs.cz <mailto:o...@ocs.cz>> > Date: Tuesday, August 21, 2018 at 12:23 PM > To: Chuck Hill <ch...@gevityinc.com <mailto:ch...@gevityinc.com>> > Cc: "webobjects-dev@lists.apple.com <mailto:webobjects-dev@lists.apple.com>" > <webobjects-dev@lists.apple.com <mailto:webobjects-dev@lists.apple.com>> > Subject: Re: Should ERXEC get sharedEC automagically? > > P.S. It seems ERX completely ignores the default shared EC, using its own > one. If I try e.g., this: > > === > println "The default sharedEC is > ${EOSharedEditingContext.defaultSharedEditingContext()}" > 6.times { > def e=ERXEC.newEditingContext() > println "EC $e gets sec $e.sharedEditingContext" > } > println "The default sharedEC still is > ${EOSharedEditingContext.defaultSharedEditingContext()}" > === > > it looks like this: > > === > The default sharedEC is > com.webobjects.eocontrol.EOSharedEditingContext@26bbe604 > 2005 [main] INFO er.extensions.eof.ERXObjectStoreCoordinatorPool - > initializing Pool... > 2008 [main] INFO er.extensions.eof.ERXObjectStoreCoordinatorPool - > initializing Pool finished > EC er.extensions.eof.ERXEC@40e32762 gets sec > com.webobjects.eocontrol.EOSharedEditingContext@5875de6a > EC er.extensions.eof.ERXEC@7d78f3d5 gets sec > com.webobjects.eocontrol.EOSharedEditingContext@5875de6a > EC er.extensions.eof.ERXEC@f5b6e78 gets sec > com.webobjects.eocontrol.EOSharedEditingContext@5875de6a > EC er.extensions.eof.ERXEC@71926a36 gets sec > com.webobjects.eocontrol.EOSharedEditingContext@5875de6a > EC er.extensions.eof.ERXEC@48976e6d gets sec > com.webobjects.eocontrol.EOSharedEditingContext@5875de6a > EC er.extensions.eof.ERXEC@7f6874f2 gets sec > com.webobjects.eocontrol.EOSharedEditingContext@5875de6a > The default sharedEC still is > com.webobjects.eocontrol.EOSharedEditingContext@26bbe604 > === > > Thanks and all the best, > OC > > > > On 21 Aug 2018, at 9:07 PM, ocs@ocs <o...@ocs.cz <mailto:o...@ocs.cz>> wrote: > > Chuck, > > sorry, I did not describe the problem clearly enough... > > > > On 21 Aug 2018, at 8:39 PM, Chuck Hill <ch...@gevityinc.com > <mailto:ch...@gevityinc.com>> wrote: > Once an EC has objects in it, its shared EC won’t get changed if a new > default is set. The notification is ignored. > > Quite, but that's not the problem. > > With EOEditingContext, it works like this: > > (i) ec created, has no sharedEC (ec.sharedEditingContext==null) > (ii) (due to something which creates a DBContext, I believe) the default > sharedEC is initialized; it loads the shared objects, and sends the > notification > (iii) ec observes the notification, and sets the default sharedEC as its own > sharedEC (for it is still empty) > (iv) now, ec fetches the objects — automatically giving shared ones from its > sharedEC, which does contain them > > With ERXEC (and ERXEC.useSharedEditingContext=true), there's an important > difference: > > (i) erxec created, immediately gets a sharedEC > (ec.sharedEditingContext!=null). This sharedEC differs from the default > shared EC > (ii) (due to something which creates a DBContext, I believe) the default > sharedEC is initialized; it loads the shared objects, and sends the > notification > (iii) erxec (although still empty) does nothing, it already has a sharedEC, > different from the default one > (iv) now, erxec fetches the objects — would automatically give shared ones > from its sharedEC, which, alas, contains nothing (the default one does). > > Thanks and all the best, > OC > > > > > > From: "ocs@ocs" <o...@ocs.cz <mailto:o...@ocs.cz>> > Date: Tuesday, August 21, 2018 at 11:21 AM > To: Chuck Hill <ch...@gevityinc.com <mailto:ch...@gevityinc.com>> > Cc: "webobjects-dev@lists.apple.com <mailto:webobjects-dev@lists.apple.com>" > <webobjects-dev@lists.apple.com <mailto:webobjects-dev@lists.apple.com>> > Subject: Re: Should ERXEC get sharedEC automagically? > > Chuck, > > > > > On 21 Aug 2018, at 7:50 PM, Chuck Hill <ch...@gevityinc.com > <mailto:ch...@gevityinc.com>> wrote: > > See er.extensions.ERXEC.useSharedEditingContext at > https://wiki.wocommunity.org/display/documentation/Explanation+of+the+default+properties+in+a+Wonder+project > > <https://wiki.wocommunity.org/display/documentation/Explanation+of+the+default+properties+in+a+Wonder+project> > > Thanks a lot! > > (Why on earth don't they mention this on the ERXEC documentation page? Oh, > never mind.) > > > > > Did that fix it? > > Well, sort of. > > It gets curiouser and curiouser — in other words, I must be doing something > far wrong. > > When I set the “ERXEC.useSharedEditingContext” property to true, then > > - the newly created ERXEC gets a shared editing context immediately upon > creation, not later upon receiving > DefaultSharedEditingContextWasInitializedNotification; > - and it is a different shared EC instance, not > EOSharedEditingContext.defaultSharedEditingContext() > - but it is EOSharedEditingContext.defaultSharedEditingContext() who reads in > automatically all the shared EOs > - and therefore, when fetching EOs through the ERXEC, I am still getting > non-shared ones in the ERXEC (for its own sharedEC is empty, and thus > EOSharedEditingContext.defaultSharedEditingContext is ignored). > > Can you make any sense of that? > > Thanks again a very big lot, > OC > > > > > > > On 2018-08-21, 9:43 AM, "Webobjects-dev on behalf of ocs@ocs" > <webobjects-dev-bounces+chill=gevityinc....@lists.apple.com > <mailto:webobjects-dev-bounces+chill=gevityinc....@lists.apple.com> on behalf > of o...@ocs.cz <mailto:o...@ocs.cz>> wrote: > > Hi there, > > the EOEditing context doc pretty unequivocally says > > === > By default, an editing context that has no shared editing context listens > for DefaultSharedEditingContextWasInitializedNotifications. If a notification > is posted while the context has no registered objects, the editing context > sets its shared editing context to the newly initialized default shared > editing context. > === > > Should it apply for an ERXEC, too? I sort of inferred it would, but by my > testing, it does not seem so: an ERXEC I make (through > ERXEC.newEditingContext()) seems to adamantly stay without > sharedEditingContext, although the notification is posted all right (I have > observed it myself to be sure), and if there's a good ole EOEditingContext, > it indeed duly sets its sharedEC at the time. > > Have I missed something of importance somewhere? The ERXEC documentation > does not say essentially anything of the sharedEC, far as I can say: > > http://wonder.sourceforge.net/javadoc/er/extensions/ERXEC.html > <http://wonder.sourceforge.net/javadoc/er/extensions/ERXEC.html> > > In principle, I could work around the problem by setting the sharedEC to > all my ERXECs programmatically -- that works all right --, but it would be a > lot of work, with a danger I overlook something somewhere and got bit in the > tender parts by that... > > Thanks, > OC > > _______________________________________________ > Do not post admin requests to the list. They will be ignored. > Webobjects-dev mailing list (Webobjects-dev@lists.apple.com > <mailto:Webobjects-dev@lists.apple.com>) > Help/Unsubscribe/Update your Subscription: > > https://lists.apple.com/mailman/options/webobjects-dev/chill%40gevityinc.com > <https://lists.apple.com/mailman/options/webobjects-dev/chill%40gevityinc.com> > > This email sent to ch...@gevityinc.com <mailto:ch...@gevityinc.com> > > _______________________________________________ > Do not post admin requests to the list. They will be ignored. > Webobjects-dev mailing list (Webobjects-dev@lists.apple.com > <mailto:Webobjects-dev@lists.apple.com>) > Help/Unsubscribe/Update your Subscription: > https://lists.apple.com/mailman/options/webobjects-dev/ocs%40ocs.cz > <https://lists.apple.com/mailman/options/webobjects-dev/ocs%40ocs.cz> > > This email sent to o...@ocs.cz <mailto:o...@ocs.cz> > > _______________________________________________ > Do not post admin requests to the list. They will be ignored. > Webobjects-dev mailing list (Webobjects-dev@lists.apple.com > <mailto:Webobjects-dev@lists.apple.com>) > Help/Unsubscribe/Update your Subscription: > https://lists.apple.com/mailman/options/webobjects-dev/ocs%40ocs.cz > <https://lists.apple.com/mailman/options/webobjects-dev/ocs%40ocs.cz> > > This email sent to o...@ocs.cz <mailto:o...@ocs.cz>
_______________________________________________ Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com