Hi,

On 2015-02-26, 12:25 AM, "OC" wrote:
On 26. 2. 2015, at 5:14, Ken Anderson 
<kenli...@anderhome.com<mailto:kenli...@anderhome.com>> wrote:

First, why are you expecting the object to be deleted when you just remove it 
from the relationship?

For it is an owning relationship (and it does work all right in the first 
case). I might be missing some important point here, but I've always thought 
that is sort of the very purpose of owning relationships?

Second, have you removed calls to lock() and unlock(), or are you not calling 
them?

I am not. Again I might be missing something, but I understand ERXEC does 
autolock -- even in a background thread -- as needed, albeit possibly not in 
the most efficient manner (e.g., 
http://lists.apple.com/archives/Webobjects-dev/2007/May/msg00578.html).

Assuming you have the properties set properly.


(Besides frankly, I don't really see the need to lock an EC at all, given the 
EC is created, used and released in one separate thread and never shared anyhow 
with other threads; but then, superfluous locking does not harm anything but 
efficiency, and efficiency is not paramount with background threads.)

You not seeing the need, does not mean the need is not there.  :-)  EOF sends 
out a lot of notifications, an unlocked EC will process those notifications 
immediately and that can mutate the EO state (attributes, relationships).  You 
won't have a consistent view of the world in an unlocked EC.  The object state 
can change on you at any time, without warning.  Have fun with that!  :-)

Chuck



Thanks and all the best,
OC

On Feb 25, 2015, at 7:07 PM, OC <o...@ocs.cz<mailto:o...@ocs.cz>> wrote:
Hello there,
I've bumped into rather a weird (at least to me) behaviour. Is this normal and 
am I just overlooking something by expecting it to work?
I've noticed lately that my background tasks (each of which uses its own EC) 
stopped to delete old objects. Pursuing the culprit, I have found that it began 
when I (by Ramsey's advice) stopped moving objects betwixt those ECs using 
localInstanceIn, replacing it by explicit globalID-based creation (only, by 
Chuck's advice, I am using faultForGlobalID instead of 
ERXEOGlobalIDUtilities.fetchObjectWithGlobalID).
I am able to repeat the problem e.g., this way:
=== launched very early in Application, no session/component created yet ===
def ec=ERXEC.newEditingContext()
def auction=EOUtilities.objectWithPrimaryKeyValue(ec,'DBAuction',1000003)
def records=auction.importedRecords()
println "owning rel: 
${auction.ownsDestinationObjectsForRelationshipKey('importedRecords')} inverse 
'${auction.inverseForRelationshipKey('importedRecords')}' #$records.count" // 
just to make sure it's all right
def lr=records.lastObject()
println "-- in 'default' EC removing $lr from $auction..."
lr.removeObjectFromBothSidesOfRelationshipWithKey(auction,'auction')
auction.editingContext().saveChanges() // my delegate logs out all adaptor ops: 
this does delete all right
def ec2=ERXEC.newEditingContext(new EOObjectStoreCoordinator())
auction=ec2.faultForGlobalID(auction.permanentGlobalID(),ec2) // this is how I 
'move' objects to background tasks...
lr=ec2.faultForGlobalID(records.lastObject().permanentGlobalID(),ec2) // ... is 
it indeed the right way?
println "-- in EC in extra OSC removing $lr from $auction..."
lr.removeObjectFromBothSidesOfRelationshipWithKey(auction,'auction')
auction.editingContext().saveChanges() // for this one DOES NOT delete, see the 
logs below!
===
This code -- along with the logs in databaseContextWillPerformAdaptorOperations 
-- prints out this:
===
owning rel: true inverse 'auction' #2
-- in 'default' EC removing <DBRecord@1532707037 PK:1004656 /EC:829232957> from 
<DBAuction@357286753 PK:1000003 /EC:829232957>...
- 1: DELETE on 'DBRecord' (uid = 1004656)
-- in EC in extra OSC removing <DBRecord@2038388710 PK:1004657 /EC:489384291> 
from <DBAuction@325329592 PK:1000003 /EC:489384291>...
- 1: UPDATE on 'DBRecord' (uid = 1004657) 
1{auction_id:<com.webobjects.foundation.NSKeyValueCoding$Null>}
===
Does it make any sense?
Note: if I replace the 'lr.removeObjectFromBothSidesOfRelationshipWithKey' by 
ec2.deleteObject(lr), it works all right, deleting the record in both cases.
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/kenlists%40anderhome.com
This email sent to kenli...@anderhome.com<mailto:kenli...@anderhome.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/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)
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