Re: No snapshot for gid _EOIntegralKeyGlobalID
Re: No snapshot for gid _EOIntegralKeyGlobalID
- Subject: Re: No snapshot for gid _EOIntegralKeyGlobalID
- From: Lachlan Deck <email@hidden>
- Date: Fri, 8 May 2009 06:54:41 +1000
On 08/05/2009, at 4:13 AM, David Avendasora wrote:
On May 7, 2009, at 1:37 PM, Mr. Pierre Frisch wrote:
Just glancing at the stack trace there a few things that I would
look for. You are using EC in threads?
Yeah. I'm using Quartz (http://www.opensymphony.com/quartz/) to do
some automated processing. Normally the jobs run at different times,
but it is possible for them to run simultaneously each using its own
thread.
This is usually hard to get right as you need to have the EC lock
before you fire any faults and you don't want to create deadlocks
between threads. How many thread to you have that access the DB?
Quartz right now is configured with 5 threads in the thread pool
(it's the default) but in practical terms there shouldn't be more
than 2 active and working at any one time, and that should only
happen occasionally. I only get the error occasionally, so it seems
likely that this could be causing the problem.
Also remember that ERXEC only auto-locks for request/response loops.
You are responsible for manually locking in background threads.
i.e., you _must_
public void run() {
ec.lock();
try {
// process
} finally {
ec.unlock();
}
}
Could you have one DB connexion per thread?
Are you suggesting that I should, or wondering if that is the
current situation? RIght now, I believe both threads would be using
the same DB connection. I'm certainly not setting up anything
differently than the standard (default) WO app setup.
In this case I would create one EOF stack per thread and lock the
stack when processing starts and unlock it at the end,
Okay. That makes sense. I would assume that Wonder's
ERXObjectStoreCoordinatorPool is the best way to do this?
this is by far the easiest model.
Even easier: I'm going to just configure Quartz to use one thread. I
think this way each job will just need to wait until the previous
job is finished before starting. I'll see how that works first, then
move onto multiple EOF stacks only if I really need them.
Do you transfer EO from one thread to the other?
Nope!
Thanks again!
Dave
Pierre
--
Pierre Frisch
email@hidden
On May 7, 2009, at 9:47, David Avendasora wrote:
Hi Pierre!
Glad to see you active on the lists again!
See my responses below:
On May 7, 2009, at 12:39 PM, Mr. Pierre Frisch wrote:
Dave,
Which version of WO?
WO 5.3.3
DO you use shared editing context?
No.
Is there any chance that the Editing Context is not locked when
the faults fires?
Yes. After 5 years of doing WO (mostly D2JC), this is one of the
first places I've started using ECs other than the default EC, so
I'm sure I'm abusing it. I'm just not sure where to look to fix it.
Pierre
--
Pierre Frisch
email@hidden
On May 5, 2009, at 13:52, David Avendasora wrote:
I've been getting this error seemingly randomly. I can't
reproduce it locally, it just happens a couple times a day and
the stack trace shows up in my inbox.
I'm assuming that I must be somehow creating an object in one EC
and then trying to use it in another, but I can't seem to find
it. Is there anything else that can cause this error?
Thanks,
Dave
Job DEFAULT.Sync Lot Codes threw an unhandled Exception:
java.lang.IllegalStateException: initializeObject: No snapshot
for gid _EOIntegralKeyGlobalID[ManufacturedPart
(java.lang.Long)206866]
at
com
.webobjects
.eoaccess
.EODatabaseContext.initializeObject(EODatabaseContext.java:3731)
at
com
.webobjects
.eocontrol
.EOObjectStoreCoordinator
.initializeObject(EOObjectStoreCoordinator.java:646)
at
com
.webobjects
.eocontrol
.EOEditingContext.initializeObject(EOEditingContext.java:3805)
at er.extensions.eof.ERXEC.initializeObject(ERXEC.java:1047)
at
com
.webobjects
.eoaccess.EODatabaseContext._fireFault(EODatabaseContext.java:
4301)
at
com
.webobjects
.eoaccess
.EOAccessFaultHandler
.completeInitializationOfObject(EOAccessFaultHandler.java:85)
at
com
.webobjects
.eocontrol.EOCustomObject.willRead(EOCustomObject.java:1189)
at com.webobjects.eocontrol._EOMutableKnownKeyDictionary
$Initializer
$
_GenericRecordBinding
.valueInObject(_EOMutableKnownKeyDictionary.java:519)
at
com
.webobjects
.eocontrol.EOCustomObject.storedValueForKey(EOCustomObject.java:
1736)
at
com
.bestmaid
.bakeryManagement
.server.lotCodeTracking._LotCode.lotCodeValue(_LotCode.java:96)
at sun.reflect.GeneratedMethodAccessor372.invoke(Unknown Source)
at
sun
.reflect
.DelegatingMethodAccessorImpl
.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.webobjects.foundation.NSKeyValueCoding$ValueAccessor
$1.methodValue(NSKeyValueCoding.java:684)
at com.webobjects.foundation.NSKeyValueCoding
$_MethodBinding.valueInObject(NSKeyValueCoding.java:1160)
at
com
.webobjects
.eocontrol.EOCustomObject.valueForKey(EOCustomObject.java:1559)
at com.webobjects.foundation.NSKeyValueCoding
$Utility.valueForKey(NSKeyValueCoding.java:498)
at com.webobjects.foundation.NSKeyValueCodingAdditions
$
DefaultImplementation
.valueForKeyPath(NSKeyValueCodingAdditions.java:212)
at
com
.webobjects
.eocontrol.EOCustomObject.valueForKeyPath(EOCustomObject.java:
1675)
at com.webobjects.foundation.NSKeyValueCodingAdditions
$Utility.valueForKeyPath(NSKeyValueCodingAdditions.java:149)
at
com
.webobjects
.eocontrol
.EOKeyValueQualifier.evaluateWithObject(EOKeyValueQualifier.java:
131)
at
com
.webobjects
.eocontrol.EOAndQualifier.evaluateWithObject(EOAndQualifier.java:
96)
at
com
.webobjects
.eocontrol
.EOQualifier.filteredArrayWithQualifier(EOQualifier.java:635)
at
com
.bestmaid.bakeryManagement.server.part._Part.lotCodes(_Part.java:
618)
at
com
.bestmaid.bakeryManagement.server.part._Part.lotCodes(_Part.java:
588)
at
com
.bestmaid
.bakeryManagement
.server
.integration
.ExternalInventoryTransactionLotCode
.synchronize(ExternalInventoryTransactionLotCode.java:136)
at
com
.bestmaid
.bakeryManagement
.server
.integration
.ExternalInventoryTransaction
.synchronize(ExternalInventoryTransaction.java:91)
at
com
.bestmaid
.bakeryManagement
.scheduledjobs
.jobs.SynchronizeLotCodes.execute(SynchronizeLotCodes.java:31)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool
$WorkerThread.run(SimpleThreadPool.java:525)
_______________________________________________
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
_______________________________________________
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
with regards,
--
Lachlan Deck
_______________________________________________
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