Hi René,

Just to avoid anybody else getting confused like I got: You removed the 
conditional that checked that property in a second commit back then. So the fix 
is active in any wonder version younger than 2018-09-04.

cheers, Fabian

> Am 15.01.2020 um 11:53 schrieb René Bock via Webobjects-dev 
> <webobjects-dev@lists.apple.com>:
> 
> Hi,
> 
> if you are using multiple ObjectStores in one WO-Application, you should set
> 
> er.extensions.eof.ERXObjectStoreCoordinatorSynchronizer.localNotifyOfRemoteUpdates
>  = true
> 
> 
> to ensure, that changes are propagated between the different object stores.  
> Because of Wonder Issue #866, you should use a rather fresh version of Wonder 
> ( > 17-7-2018)
>   
> 
>> Am 14.01.2020 um 18:34 schrieb OCsite via Webobjects-dev 
>> <webobjects-dev@lists.apple.com>:
>> 
>> Chuck,
>> 
>>> On 14 Jan 2020, at 6:31, Chuck Hill <hill.ch...@gmail.com> wrote:
>>> On Jan 13, 2020, at 5:42 AM, OCsite <o...@ocs.cz> wrote:
>>>>> 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.
>> 
>> As always, indeed, correct you are.
>> 
>> Since my app makes sure to use only one of all the coordinators for the 
>> normal work and for sessions (keeping the rest of coordinators from the pool 
>> solely for my background tasks), I was pretty sure this can't happen... 
>> until I tried to log out the coordinators, and indeed, they did differ. 
>> Seems the SEC coordinator gets assigned in some weird way.
>> 
>> With fixing, I am afraid I am outta luck; one possibility would be to get 
>> rid of the SEC altogether, another probably the delegate hack which works 
>> around the problem — for having revisited the app meantime, alas, I recalled 
>> I can't do without those extra coordinators for the background tasks. Some 
>> of them could write many objects into DB, and alas, I can't let the users in 
>> normal sessions wait for that long :(
>> 
>>>> 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.
>> 
>> For the moment, I am using both. The EO cache you mean would probably be 
>> ERXEnterpriseObjectArrayCache? I am using the thing pretty widely to cache 
>> normal EOs to lower the number of DB roundtrips needed (nevertheless it 
>> seems the turning the cached GIDs to objects is rather at the slow side too, 
>> and I am considering to extend the code to try to cache the objects 
>> themselves while there's a memory galore in some sort of a weak map — 
>> incidentally, to all, has someone already tried that? I haven't found this 
>> kind of cache in ERX; either it does not exist, or I have searched 
>> improperly.)
>> 
>> SEC serves for my „static“ objects, which are never changed (more precisely, 
>> they might be changed in a special task upon launch, before the first 
>> session is created; and never ever again). A majority of these „static“ 
>> objects then are shared by essentially all sessions — in my current 
>> application there's lots of those, which is also the very reason I have 
>> started to use SEC at all (for the first time in twenty-odd years of using 
>> WO ;))
>> 
>> For this very reason I would rather like to keep the SEC, far as it proves 
>> manageable; but of course, we'll see...
>> 
>>> This might be of use too:
>>> https://en.wikibooks.org/wiki/WebObjects/EOF/Using_EOF/Caching_and_Freshness#EOEntity's_Cache-In-Memory_Setting
>> 
>> Thanks! I have considered that, too; but I have eventually chosen SEC 
>> because it not only caches, but also ensures the objects are actually shared 
>> betw. all sessions. Far as I understand, in-memory entities would cause each 
>> session to have its own full cache of all the „static“ objects, which might 
>> be a bit of a memory problem with more users working with the app at once.
>> 
>> Perhaps it was a wrong decision and the memory waste would be a cost well 
>> worth of not bumping into those SEC quirks...
>> 
>> Thanks again,
>> OC
>> 
>>>>>> On Jan 12, 2020, at 4:13 PM, OCsite via Webobjects-dev 
>>>>>> <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> 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)
>>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>>> https://lists.apple.com/mailman/options/webobjects-dev/ocs%40ocs.cz
>>>>>>> 
>>>>>>> This email sent to 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/hill.chuck%40gmail.com
>>>>>> 
>>>>>> This email sent to 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/bock%40salient-doremus.de
>> 
>> This email sent to b...@salient-doremus.de
> 
> Mit freundlichen Grüßen 
> 
> René Bock
> 
> --
> Telefon: +49 69 650096 18
> 
> salient GmbH, Lindleystraße 12, 60314 Frankfurt
> Telefon Zentrale: 069 / 65 00 96 - 0  |  www.salient-doremus.de
> 
> _______________________________________________
> 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/lists.fabian%40e-lumo.com
> 
> This email sent to lists.fab...@e-lumo.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