Ramsey, On 19. 2. 2015, at 19:15, Ramsey Gurley <rgur...@smarthealth.com> wrote: > You do a lot of weird stuff :)
Actually _this_ should not be weird, this should be quite a normal code; the only requirement is that check-and-save, i.e., conceptually, === if (eo.someRelationship().someAttribute()<newAttributeValue) { def new=EOUtilities.createAndInsertInstance(eo.editingContext(),'SomeRelationshipTarget') new.someAttribute=newAttributeValue eo.editingContext().saveChanges() } === so that I can be absolutely sure that no two users from two sessions may store the same attribute value. The current application is running single-instance, which makes the problem somewhat easier, but surprisingly, not easy by far, given WOAllowsConcurrentRequestHandling=YES. Is there a well-known pattern for this? (Hmmm... now it occurred to me, perhaps I might set up an UNIQUE db restraint? That would probably simplify the code mightily, _and_ work for multi-instance case just as well...) Other parts of my code though -- eg. the primary-key-based „static“ objects which in the old version I, triple alas, can't get rid of for time reasons -- definitely are, and then some :) > Have you installed jadclipse yet? > https://wiki.wocommunity.org/display/documentation/Useful+Eclipse+Plugins > You can probably answer a lot of your questions just looking at the source. I can hardly install the thing, for I am not using Eclipse anymore -- can't speak for other platforms, but on Mac, I have never seen a worse IDE. Nevertheless thanks again, as soon as I have some extra time I'll check the sources (along with those of FreshnessExplorer). > If I had this problem, I’d probably first try providing my own EC subclass > through the ERXEC factory with deleteObject(eo) overridden. If that didn’t > catch it, then I’d dig around in the WO source to find where in the save > changes process owns destination comes into play. The WO sources are available (though perhaps unofficially)? I have thought Apple keeps them well locked out. How can one get them? Thanks again a very big lot, OC > On Feb 19, 2015, at 7:48 AM, OC <o...@ocs.cz> wrote: > >> Hello there, >> >> occassionally, an object gets deleted which should not be. Now, just before >> "ec.saveChanges()" I am logging out >> >> === >> lognow "saving INS:$ec.insertedObjects.count >> UPD:$ec.updatedObjects.count DEL:$ec.deletedObjects.count" >> === >> >> and in my "databaseContextWillPerformAdaptorOperations" delegate method I am >> logging out all the operations, and the results I sort of can't decode: >> >> === >> 14:38:16.299|WorkerThread14 --- saving INS:2 UPD:4 DEL:0 >> ... about to perform 4 DB operations >> - 1: INSERT on 'DBPriceOffer' 8{validOffer:false, >> sheetConfirmed:<com.webobjects.foundation.NSKeyValueCoding$Null>, >> uid:1022548, auction_id:1000233, >> amount:<com.webobjects.foundation.NSKeyValueCoding$Null>, price:1142, >> creationDate:2015-02-19 13:38:15 Etc/GMT, creator_id:1000058} >> - 2: INSERT on 'DBAudit' 8{creator_id:1000058, uid:1031224, >> creationDate:2015-02-19 13:38:15 Etc/GMT, kind:8, auction_id:1000233, >> title:cenov? návrh 1142 CZK/MWh, aktuální auk?ní cena 11…, >> market_id:1000001, ipAddress:212.27.219.66} >> - 3: UPDATE on 'DBAuction' ((uid = 1000233) and (commodityTimechunksString = >> 'LVO-1022542: 1140/null (true/0) 2015-02-19 13:38:10 Etc/GMT BY EONenergie >> (1000048) USR EONenergie (1000048) ===> prc 1139 CU RWEEnergie USR >> RWEEnergie BR Hurtova (RB false)') and (commodityPriceSelectionType = >> 1022547)) 1{commodityTimechunksString:LVO-1022547: 1139/null (true/0) >> 2015-02-19 13:38:1…} >> - 4: DELETE on 'DBUserAuction' ((user_id = 1000058) and (auction_id = >> 1000233)) >> === >> >> Those inserts make complete sense, no problem with them at all. They should >> happen, and their contents is OK. >> >> There were 4 updates in editing context, but there's only one update >> operation. Now, do please correct me if I am wrong, but I understand the >> editing context saves all changes (regardless the value might be same as >> before) and consider them “updates”; when saving though, it compares them >> against the snapshot and makes an operation only if the value differs. Thus, >> UPD:4 make sense too, and the one update which changes only a string >> attribute 'commodityTimechunksString' of auction 1000233 makes complete >> sense. It should happen, and the contents is OK. >> >> The 4th operation is the problem. It should not happen. >> >> From the fact just before save ec.deletedObjects.count==0 (DEL:0) I infer >> that EOF decided to delete the object based on ownership or cascade deletion >> rules. Given nothing other got deleted, it _must_ be ownership -- the object >> having been removed from some owned relationship. There indeed are two of >> them. >> >> Now, the trick is that I am pretty sure I am _not_ removing any of these >> object from either of the relationships: at the very least, I can't recall I >> would (the DBUserAuction objects are not intended to be ever deleted, unless >> the user or auction to which they belong are deleted too), and nor I can >> find any usage of removeObjectFromBothSides... nor other APIs with the >> relationships in question. >> >> Is there some trick to catch the code which actually causes the deletion? >> >> I've tried to observe >> EOEditingContext.ObjectsChangedInEditingContextNotification, but it seems it >> does not get posted even if I add a removeObjectFromBothSides... manually to >> test. >> >> Will be grateful for any advice, >> 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/rgurley%40smarthealth.com >> >> This email sent to rgur...@smarthealth.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