Hi all,

I would bet on your answer, Chuck. And I agree w/ you: I don’t remember the 
details but we had some side effects/issues in the past w/ SEC

OC, I recommend an article titled "Development-Which cache to use with EOs?" I 
wrote several years ago:
https://wiki.wocommunity.org/pages/viewpage.action?pageId=12943886 
<https://wiki.wocommunity.org/pages/viewpage.action?pageId=12943886>

I do not code in java for a while but I just checked and Guava cache still 
exists. I think It could help you in several use cases like setting a 
relationship with a “parameter” entity. We made this research because we were 
in a context of hundred of requests/s so we wanted to minimize roundtrips 
between WO app and database. And it worked very well.

Best,

Philippe

> On 14 Jan 2020, at 06:31, Chuck Hill via Webobjects-dev 
> <webobjects-dev@lists.apple.com> wrote:
> 
> On Jan 13, 2020, at 5:42 AM, OCsite <o...@ocs.cz <mailto:o...@ocs.cz>> wrote:
>> 
>> Chuck,
>> 
>>> On 13 Jan 2020, at 4:17, Chuck Hill <hill.ch...@gmail.com 
>>> <mailto:hill.ch...@gmail.com>> wrote:
>>> There must be something going on here that you are not mentioning.
>> 
>> Definitely there is, but I had no idea what might be the culprit. Now I see 
>> (but still don't quite understand).
>> 
>>> Do you have multiple EOF stacks (multiple EOObjectStoreCoordinator 
>>> instances)?
>> 
>> Hmmm... yup, in most of my apps, I use for years and years
>> 
>> er.extensions.ERXObjectStoreCoordinatorPool.maxCoordinators=3
>> 
>> Let me see, I'll try without ... and just again, you are right! When this is 
>> commented out from Properties, relationships to SEC get saved properly 
>> (without the convoluted databaseContextWillOrderAdaptorOperations delegate 
>> of course).
>> 
>> Can you please explain how this relates? I must be missing something of 
>> importance, but I can't see any sense in that :( How on earth might the sole 
>> existence of a couple of other (far as I know, pretty independent) EOF 
>> stacks affect the way an EODBOp creates its newRows?!? :-O
> 
>  I’ve never been much of an SEC user.  The EOSharedEditingContext is an 
> EOEditingContext and so it is associated with one EOObjectStoreCoordinator.  
> What I will guess is that the OSC of the SEC instance is != the OSC of the 
> EOEditingContext you are using and there is a bug because the relationship 
> crosses OSCs.  I doubt that is fixable, but you might find some way to use 
> that to come up with a better hack.  Assuming that I am correct.
> 
> 
>> Pity I did not know sooner; perhaps I would just switch to use one stack and 
>> save myself all the effort with the searching for the culprit, delegate 
>> fixes attempt etc.
>> 
>> I do wonder of the speed difference in practice: one coordinator would 
>> definitely make the app somewhat slower; on the other hand, SEC itself 
>> should speed it up, removing a need of many DB roundtrips... hm, perhaps it 
>> would be better just to forget maxCoordinators and stay at the safe side.
> 
> There is some EO cache in Wonder that I have used instead of the SEC to keep 
> EOs easy to get.  I forget the name now.  It is not quite as convenient but 
> less magic might yield better results.
> 
> This might be of use too:
> https://en.wikibooks.org/wiki/WebObjects/EOF/Using_EOF/Caching_and_Freshness#EOEntity's_Cache-In-Memory_Setting
>  
> <https://en.wikibooks.org/wiki/WebObjects/EOF/Using_EOF/Caching_and_Freshness#EOEntity's_Cache-In-Memory_Setting>
> 
> 
> Chuck
> 
>> 
>> Thanks again a very big lot!
>> OC
>> 
>>>> On Jan 12, 2020, at 4:13 PM, OCsite via Webobjects-dev 
>>>> <webobjects-dev@lists.apple.com <mailto:webobjects-dev@lists.apple.com>> 
>>>> wrote:
>>>> 
>>>> I think I have probably solved the original problem (quoted below) all 
>>>> right, for the record, by doing essentially this in the 
>>>> databaseContextWillOrderAdaptorOperations delegate method:
>>>> 
>>>> 1. go through all the database operations; for each of them
>>>>   2. go through all the relationships of the DBOp object; find those which 
>>>> lead into SEC
>>>>     3. for each such relationship check whether 
>>>> changesFromCommittedSnapshot contain a value for its name
>>>>     4. if so, check whether DBOp's rowDiffs have the proper target PK[*] 
>>>> for the rel source attribute name (it never seems to happen!)
>>>>     5. if not, add it to a mutable copy of DBOp's newRow
>>>>   6. having processed all the rels, if anything was added, change DBOp's 
>>>> newRow and call the DBContext private (ick!) method 
>>>> createAdaptorOperationsForDatabaseOperation
>>>> 7. having processed all the DBOps, call the DBContext private (another 
>>>> ick) method orderAdaptorOperations and return its value from the delegate 
>>>> method.
>>>> 
>>>> [*] my models happen to contain only simple FK->PK relships to SEC; 
>>>> considerably more generic and complex code would be needed for all the 
>>>> possible cases of course.
>>>> 
>>>> That seems to — with by far not exhaustive testing — save the changes into 
>>>> the database properly.
>>>> 
>>>> Quite non-trivial code for simple 
>>>> saving-of-relationship-as-set-in-object-graph-into-DB.
>>>> 
>>>> I wonder. Is it perhaps a big no-no to use and edit relationships from 
>>>> normal ECs into the SEC? I thought those are fully supported (unlike the 
>>>> other direction). Or do I just do something terribly wrong somewhere in my 
>>>> application, for this should work all right?
>>>> 
>>>> Does anyone here use this setup (creating/updating EOs with one-way 
>>>> relationships into SEC), and does it work properly for you without all 
>>>> this hassle?
>>>> 
>>>> Thanks,
>>>> OC
>>>> 
>>>> 
>>>>> On 11 Jan 2020, at 3:28, OCsite via Webobjects-dev 
>>>>> <webobjects-dev@lists.apple.com <mailto:webobjects-dev@lists.apple.com>> 
>>>>> wrote:
>>>>> 
>>>>> Hi there,
>>>>> 
>>>>> this is weird. My EOs have some relationships into the SharedEC — of 
>>>>> course, one-way without an inverse; I understand that relationships to 
>>>>> SEC are all right, only those from it outside are forbidden. (Am I wrong 
>>>>> perhaps? If those relationships were set up in the database without SEC, 
>>>>> it works perfectly.)
>>>>> 
>>>>> Nevertheless, when I run with SEC, whatever I try, it seems these 
>>>>> relationships are — silently and without reporting any problem — not 
>>>>> saved.
>>>>> 
>>>>> Say, I have an EO foo of entity Foo with two simple :1 relationships: a 
>>>>> (based on FK a_id) into a normal-EC entity, and b (based on FK b_id) into 
>>>>> a shared-EC entity. Both are modelled the same way (simple join from the 
>>>>> FK in the source entity to the PK of the target entity). I set both of 
>>>>> them, like this:
>>>>> 
>>>>> ===
>>>>> ERXEC ec=....
>>>>> Foo foo=new Foo()
>>>>> ec.insertObject(foo)
>>>>> assert ec==someObject.editingContext()
>>>>> foo.a=someObject
>>>>> assert ec.sharedEditingContext()==someSharedObject.editingContext()
>>>>> foo.b=someSharedObject
>>>>> assert foo.b==someSharedObject
>>>>> ec.saveChanges()
>>>>> ===
>>>>> 
>>>>> Now, changes are saved, no error is reported, new object is properly 
>>>>> inserted into the database
>>>>> - its a_id is filled by someObject's PK
>>>>> - whilst its b_id is filled by NSKeyValueCoding$Null!
>>>>> 
>>>>> Same happens when editing: the relationships to SEC when changed never 
>>>>> seem to save the appropriate FK value. It seems completely ignored by the 
>>>>> saving process:
>>>>> 
>>>>> ===
>>>>> assert 
>>>>> foo.editingContext().sharedEditingContext()==anotherSharedObject.editingContext()
>>>>> foo.b=anotherSharedObject
>>>>> assert foo.b==anotherSharedObject
>>>>> assert foo.committedSnapshotValueForKey('b')==NSKeyValueCoding$Null
>>>>> assert foo.changesFromCommittedSnapshot==[b: anotherSharedObject]
>>>>> foo.editingContext().saveChanges()
>>>>> assert foo.b==null
>>>>> ===
>>>>> 
>>>>> other changes of foo (if any) are saved all right, but its b_id never 
>>>>> changes. No error is reported.
>>>>> 
>>>>> Does this make any sense, is it perhaps an expected behaviour? As always, 
>>>>> I might be overlooking something of importance, but this feels completely 
>>>>> wrong to me. Could it be caused by some bug at my side? If so, any idea 
>>>>> where and how to hunt for it?
>>>>> 
>>>>> Thanks a lot for any insight,
>>>>> 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/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/hill.chuck%40gmail.com
>>>>  
>>>> <https://lists.apple.com/mailman/options/webobjects-dev/hill.chuck%40gmail.com>
>>>> 
>>>> This email sent to hill.ch...@gmail.com <mailto:hill.ch...@gmail.com>
>>> 
>> 
> 
> _______________________________________________
> 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/prabier%40icloud.com
> 
> This email sent to prab...@icloud.com

 _______________________________________________
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

Reply via email to