• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Should loading a shared object try to fetch? (was: Should ERXEC get sharedEC automagically?)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Should loading a shared object try to fetch? (was: Should ERXEC get sharedEC automagically?)


  • Subject: Should loading a shared object try to fetch? (was: Should ERXEC get sharedEC automagically?)
  • From: "ocs@ocs" <email@hidden>
  • Date: Wed, 22 Aug 2018 02:15:10 +0200

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 <email@hidden> 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 <email@hidden
>> <mailto:email@hidden>> 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" <email@hidden <mailto:email@hidden>>
>> Date: Tuesday, August 21, 2018 at 12:23 PM
>> To: Chuck Hill <email@hidden <mailto:email@hidden>>
>> Cc: "email@hidden <mailto:email@hidden>"
>> <email@hidden <mailto:email@hidden>>
>> 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 <email@hidden <mailto:email@hidden>> wrote:
>>
>> Chuck,
>>
>> sorry, I did not describe the problem clearly enough...
>>
>>
>> On 21 Aug 2018, at 8:39 PM, Chuck Hill <email@hidden
>> <mailto:email@hidden>> 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" <email@hidden <mailto:email@hidden>>
>> Date: Tuesday, August 21, 2018 at 11:21 AM
>> To: Chuck Hill <email@hidden <mailto:email@hidden>>
>> Cc: "email@hidden <mailto:email@hidden>"
>> <email@hidden <mailto:email@hidden>>
>> Subject: Re: Should ERXEC get sharedEC automagically?
>>
>> Chuck,
>>
>>
>>
>> On 21 Aug 2018, at 7:50 PM, Chuck Hill <email@hidden
>> <mailto:email@hidden>> 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=email@hidden
>> <mailto:webobjects-dev-bounces+chill=email@hidden> on
>> behalf of email@hidden <mailto:email@hidden>> 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      (email@hidden
>> <mailto:email@hidden>)
>>    Help/Unsubscribe/Update your Subscription:
>>
>>
>>    This email sent to email@hidden <mailto:email@hidden>
>>
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list      (email@hidden
>> <mailto:email@hidden>)
>> Help/Unsubscribe/Update your Subscription:
>>
>> This email sent to email@hidden <mailto:email@hidden>
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      (email@hidden)
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: Should loading a shared object try to fetch? (was: Should ERXEC get sharedEC automagically?)
      • From: Chuck Hill <email@hidden>
References: 
 >Should ERXEC get sharedEC automagically? (From: "ocs@ocs" <email@hidden>)
 >Re: Should ERXEC get sharedEC automagically? (From: Chuck Hill <email@hidden>)
 >Re: Should ERXEC get sharedEC automagically? (From: "ocs@ocs" <email@hidden>)
 >Re: Should ERXEC get sharedEC automagically? (From: Chuck Hill <email@hidden>)
 >Re: Should ERXEC get sharedEC automagically? (From: "ocs@ocs" <email@hidden>)
 >Re: Should ERXEC get sharedEC automagically? (From: "ocs@ocs" <email@hidden>)
 >Re: Should ERXEC get sharedEC automagically? (From: Chuck Hill <email@hidden>)
 >Re: Should ERXEC get sharedEC automagically? (From: "ocs@ocs" <email@hidden>)

  • Prev by Date: Re: Should ERXEC get sharedEC automagically?
  • Next by Date: Re: Should loading a shared object try to fetch? (was: Should ERXEC get sharedEC automagically?)
  • Previous by thread: Re: Should ERXEC get sharedEC automagically?
  • Next by thread: Re: Should loading a shared object try to fetch? (was: Should ERXEC get sharedEC automagically?)
  • Index(es):
    • Date
    • Thread