• 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
Re: Cannot obtain globalId for an object failure
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Cannot obtain globalId for an object failure


  • Subject: Re: Cannot obtain globalId for an object failure
  • From: Chuck Hill <email@hidden>
  • Date: Mon, 21 Mar 2011 14:06:34 -0700

On Mar 19, 2011, at 1:28 AM, Giles Palmer wrote:
>>> Hi
>>>
>>> I have just had an exception thrown on some relatively recent code, that has worked fine until now..
>>>
>>> java.lang.IllegalStateException:  Cannot obtain globalId for an object which is registered in its editingContext,
>>> object: <indoc.app.entities.Container pk:"496">,
>>> databaseContext: er.extensions.eof.ERXDatabaseContext@ee260b,
>>> object's editingContext: er.extensions.eof.ERXEC@1fe6055,
>>> databaseContext's active editingContext: null
>>
>> That last part:
>>> databaseContext's active editingContext: null
>>
>> Indicates the problem.
>
> Yeah, I just don't quite understand what "active editingContext" means to the databaseContext or how it can be null.

The only way that I can think of is the result of unlocked access to the EC or DBC.


>>> Context:
>>>
>>> This is part of a background notification system which works roughly like:
>>>
>>> 1) NSNotificationCenter triggers a callback that...
>>>
>>> 2) Creates a new Runnable and globalIds of objects are passed into this runnable from their original editing context.  A ThreadPoolExecutor the executes the thread.
>>>
>>> 3) The new thread creates a new editing context that uses an ERXRoundRobinCollection to grab an EOObjectStoreCoordinator.  This EOObjectStoreCoordinator is only used in the notification part of the application, and the ERXRoundRobinCollection contains just a couple of instances of a EOObjectStoreCoordinator at a time.
>>>
>>> The ec is created with:
>>> ERXEC notificationtEC = (ERXEC) ERXEC.newEditingContext(objectStoreCollection.nextObjectStoreCoordinator());
>>>
>>> and the EOObjectStoreCoordinators with:
>>> ERXObjectStoreCoordinator osc = new ERXObjectStoreCoordinator(true);
>>>
>>>
>>> 4) I then use the newly created notificationtEC to convert the globalIds back to EOs like.. eo = ERXEOControlUtilities.convertGIDtoEO(notificationtEC, gid);
>>
>> Are you locking the EC that you created?
>>
>
> No I am not explicitly locking anything.  The app is a full blown Wonder app and I was under the impression that this relinquished me from having to worry about locking provided I was using ERXEC to create my editing contexts etc.  Is this not the case then?

The Wonder auto-locking is really intended for use within the Request-Response loop.  I think it might work OK for threads if you have the correct properties set, but that manual locking is generally recommended for threads.  And Wonder does not do anything for auto-locking of the DB context etc. (IIRC).


Chuck



>>> 5) I then use the same notificationtEC to fetch various objects etc to build the notifications and send out an email.
>>>
>>> The full stack trace is below.
>>>
>>> I was under the impression that having a new database stack should be a pretty safe way to do such a task in a separate thread. Do you have any idea what I am doing wrong?
>>>
>>> I do not quite understand the meaning of the above java.lang.IllegalStateException   Any ideas much appreciated.
>>>
>>> Thanks
>>>
>>> Giles
>>>
>>> Mar 18 12:32:10 OLWAInDoc[2001] pool-3-thread-1 ERROR indoc.app.event.IDEventObserverCoordinator$ChannelRunnable  - Error in ChannelRunnable.run() Cannot obtain globalId for an object which is registered in its editingContext, object: <indoc.app.entities.Container pk:"496">, databaseContext: er.extensions.eof.ERXDatabaseContext@ee260b, object's editingContext: er.extensions.eof.ERXEC@1fe6055, databaseContext's active editingContext: null
>>> java.lang.IllegalStateException: Cannot obtain globalId for an object which is registered in its editingContext, object: <indoc.app.entities.Container pk:"496">, databaseContext: er.extensions.eof.ERXDatabaseContext@ee260b, object's editingContext: er.extensions.eof.ERXEC@1fe6055, databaseContext's active editingContext: null
>>> 	at com.webobjects.eoaccess.EODatabaseContext._globalIDForObject(EODatabaseContext.java:4660)
>>> 	at com.webobjects.eoaccess.EODatabaseContext.valuesForKeys(EODatabaseContext.java:6509)
>>> 	at com.webobjects.eocontrol.EOObjectStoreCoordinator.valuesForKeys(EOObjectStoreCoordinator.java:326)
>>> 	at com.webobjects.eoaccess.EOQualifierSQLGeneration$_KeyValueQualifierSupport.schemaBasedQualifierWithRootEntity(EOQualifierSQLGeneration.java:439)
>>> 	at er.extensions.ERXExtensions$KeyValueQualifierSQLGenerationSupport.schemaBasedQualifierWithRootEntity(ERXExtensions.java:355)
>>> 	at com.webobjects.eoaccess.EOQualifierSQLGeneration$Support._schemaBasedQualifierWithRootEntity(EOQualifierSQLGeneration.java:179)
>>> 	at com.webobjects.eoaccess.EOQualifierSQLGeneration$_AndQualifierSupport.schemaBasedQualifierWithRootEntity(EOQualifierSQLGeneration.java:530)
>>> 	at com.webobjects.eoaccess.EOQualifierSQLGeneration$Support._schemaBasedQualifierWithRootEntity(EOQualifierSQLGeneration.java:179)
>>> 	at com.webobjects.eoaccess.EOQualifierSQLGeneration$_AndQualifierSupport.schemaBasedQualifierWithRootEntity(EOQualifierSQLGeneration.java:530)
>>> 	at com.webobjects.eoaccess.EOQualifierSQLGeneration$Support._schemaBasedQualifierWithRootEntity(EOQualifierSQLGeneration.java:179)
>>> 	at com.webobjects.eoaccess.EOQualifierSQLGeneration$_OrQualifierSupport.schemaBasedQualifierWithRootEntity(EOQualifierSQLGeneration.java:567)
>>> 	at com.webobjects.eoaccess.EOQualifierSQLGeneration$Support._schemaBasedQualifierWithRootEntity(EOQualifierSQLGeneration.java:179)
>>> 	at com.webobjects.eoaccess.EODatabaseChannel.selectObjectsWithFetchSpecification(EODatabaseChannel.java:227)
>>> 	at com.webobjects.eoaccess.EODatabaseContext._objectsWithFetchSpecificationEditingContext(EODatabaseContext.java:3055)
>>> 	at er.extensions.eof.ERXDatabaseContext._objectsWithFetchSpecificationEditingContext(ERXDatabaseContext.java:66)
>>> 	at com.webobjects.eoaccess.EODatabaseContext.objectsWithFetchSpecification(EODatabaseContext.java:3195)
>>> 	at com.webobjects.eocontrol.EOObjectStoreCoordinator.objectsWithFetchSpecification(EOObjectStoreCoordinator.java:488)
>>> 	at com.webobjects.eocontrol.EOEditingContext.objectsWithFetchSpecification(EOEditingContext.java:4069)
>>> 	at er.extensions.eof.ERXEC.objectsWithFetchSpecification(ERXEC.java:1206)
>>> 	at com.webobjects.eocontrol.EOEditingContext.objectsWithFetchSpecification(EOEditingContext.java:4444)
>>> 	at indoc.app.entities._IDEventRegistration.fetchIDEventRegistrations(_IDEventRegistration.java:351)
>>> 	at indoc.app.event.IDEventObserverCoordinator$ChannelRunnable.processEventRegistrations(IDEventObserverCoordinator.java:238)
>>> 	at indoc.app.event.IDEventObserverCoordinator$ChannelRunnable.run(IDEventObserverCoordinator.java:143)
>>> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>>> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>>> 	at java.lang.Thread.run(Thread.java:619)
>>>
>>> _______________________________________________
>>> 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
>>
>> --
>> Chuck Hill             Senior Consultant / VP Development
>>
>> Practical WebObjects - for developers who want to increase their overall knowledge of WebObjects or who are trying to solve specific problems.
>> http://www.global-village.net/products/practical_webobjects
>>
>>
>>
>>
>>
>>
>>
>

--
Chuck Hill             Senior Consultant / VP Development

Practical WebObjects - for developers who want to increase their overall knowledge of WebObjects or who are trying to solve specific problems.
http://www.global-village.net/products/practical_webobjects







Attachment: smime.p7s
Description: S/MIME cryptographic signature

 _______________________________________________
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

References: 
 >Cannot obtain globalId for an object failure (From: Giles Palmer <email@hidden>)
 >Re: Cannot obtain globalId for an object failure (From: Chuck Hill <email@hidden>)
 >Re: Cannot obtain globalId for an object failure (From: Giles Palmer <email@hidden>)

  • Prev by Date: Re: duplicating an EO
  • Next by Date: Re: Mutiple ERAttachment DBs
  • Previous by thread: Re: Cannot obtain globalId for an object failure
  • Next by thread: Re: Cannot obtain globalId for an object failure
  • Index(es):
    • Date
    • Thread