Thank you for all of the advice.

Samuel: I would say yes to both questions…

Chuck: I have renamed any background threads so next time I have a deadlock, it 
might be easier…

Jon: I am contemplating switching to ERXTask which will use a OSC pool as you 
describe, should this crop up again.

Mark

> On 6 Apr 2016, at 16:27, Samuel Pelletier <[email protected]> wrote:
> 
> Hi Mark,
> 
> You do not take the globalId of Document, because it is not an EO and does 
> not have any EO attributes right ?
> 
> Is Report and ExternalDocumentStore are committed to the database when this 
> code is running ?
> 
> If you answered yes to both questions, I think your problem is in another 
> piece of code.
> 
> Samuel
> 
> 
>> Le 5 avr. 2016 à 18:14, Mark Wardle <[email protected] 
>> <mailto:[email protected]>> a écrit :
>> 
>> Thanks Chuck. I have looked at this code. I do spin out a separate thread to 
>> do some background processing after a particular request. I thought that 
>> passing a EOGlobalID would be safe. The class below takes a Document (an 
>> immutable and thread-safe POJO), a Report and an ExternalDocumentStore (both 
>> EOEnterpriseObjects). I just wonder whether I should use 
>> ERXEOGlobalIDUtilities.fetchObjectWithGlobalID() instead of 
>> EOEditingContext.faultForGlobalID() as the former seems to be much more 
>> complex and this might be for a good reason?
>> 
>> 
>>      static class ReportPublisher implements Runnable {
>>              final Document _document;
>>              final EOGlobalID _reportGlobalId;
>>              final EOGlobalID _storeGlobalId;
>> 
>>              ReportPublisher(final Document doc, Report report, 
>> ExternalDocumentStore store) {
>>                      if (doc == null || report == null || store == null) {
>>                              throw new NullPointerException("A document, 
>> report and store must be supplied.");
>>                      }
>>                      _document = doc;
>>                      _reportGlobalId = report.permanentGlobalID();
>>                      _storeGlobalId = store.permanentGlobalID();
>>              } 
>> 
>>              @Override
>>              public void run() {
>>                      log.debug("Publishing document '" + 
>> _document.description() +"' in background thread...");
>>                      NSTimestamp started = new NSTimestamp();
>>                      EOEditingContext ec = ERXEC.newEditingContext();
>>                      try {
>>                              ec.lock();
>>                              ExternalDocumentStore store = 
>> (ExternalDocumentStore) ec.faultForGlobalID(_storeGlobalId, ec);
>>                              if (store != null) {
>>                                      log.debug("Publishing using repository 
>> from class: " +store.implementationClassName());
>>                                      Class<?> clazz = 
>> Class.forName(store.implementationClassName());
>>                                      Object reposObject = 
>> clazz.newInstance();
>>                                      if (reposObject instanceof 
>> DocumentRepository) {
>>                                              DocumentRepository repos = 
>> (DocumentRepository) reposObject;
>>                                              DocumentReceipt receipt = 
>> repos.publishDocument(_document);
>>                                              NSTimestamp finished = new 
>> NSTimestamp();
>>                                              log.debug(receipt.message());
>>                                              if (receipt.success()) {
>>                                                      log.debug("Successfully 
>> published document:" + _document.description());
>>                                                      Report r = (Report) 
>> ec.faultForGlobalID(_reportGlobalId, ec);
>>                                                      PublishedReport pr = 
>> r.createPublishedReportsRelationship();
>>                                                      
>> pr.setExternalDocumentStoreRelationship(store);
>>                                                      
>> pr.setReportRelationship(r);
>>                                                      
>> pr.setDateTimeStarted(started);
>>                                                      
>> pr.setDateTimeFinished(finished);
>>                                                      ec.saveChanges();
>>                                              }
>>                                      } else {
>>                                              log.debug("Instance of class 
>> not a type of DocumentRepository.");
>>                                      }
>>                              }
>>                              else {
>>                                      log.debug("No store found for global 
>> id: " +_storeGlobalId);
>>                              }
>>                      } catch 
>> (ClassNotFoundException|InstantiationException|IllegalAccessException e) {
>>                              e.printStackTrace();
>>                      }
>>                      finally {
>>                              ec.unlock();
>>                      }
>>              }
>>      }
>> 
>> 
>> Am I doing something wrong converting a EOGlobalID to a proper EO in a 
>> background thread?
>> 
>> Mark
>> 
>> 
>>> On 1 Apr 2016, at 06:03, Chuck Hill <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> 
>>> Hi Mark
>>> 
>>> Found one Java-level deadlock:
>>> =============================
>>> "WorkerThread127":
>>>   waiting for ownable synchronizer 0x00000000ec9b7b48, (a 
>>> java.util.concurrent.locks.ReentrantLock$NonfairSync),
>>>   which is held by "Thread-5”
>>> 
>>> So this is waiting for an OSC lock:
>>> "WorkerThread127":
>>> at sun.misc.Unsafe.park(Native Method)
>>> - parking to wait for  <0x00000000ec9b7b48> (a 
>>> java.util.concurrent.locks.ReentrantLock$NonfairSync)
>>> at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
>>> at 
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
>>> at 
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
>>> at 
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
>>> at 
>>> java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
>>> at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
>>> at 
>>> com.webobjects.eocontrol.EOObjectStoreCoordinator.lock(EOObjectStoreCoordinator.java:420)
>>> at 
>>> com.webobjects.eocontrol.EOEditingContext.lockObjectStore(EOEditingContext.java:4666)
>>> 
>>> "Thread-5":
>>>   waiting for ownable synchronizer 0x00000000f60726a0, (a 
>>> java.util.concurrent.locks.ReentrantLock$NonfairSync),
>>>   which is held by "WorkerThread5"
>>> 
>>> This thread is holding the OSC lock and is waiting for an EC lock:
>>> "Thread-5":
>>> at sun.misc.Unsafe.park(Native Method)
>>> - parking to wait for  <0x00000000f60726a0> (a 
>>> java.util.concurrent.locks.ReentrantLock$NonfairSync)
>>> at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
>>> at 
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
>>> at 
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
>>> at 
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
>>> at 
>>> java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
>>> at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
>>> at 
>>> com.webobjects.eocontrol.EOEditingContext.lock(EOEditingContext.java:4617)
>>> 
>>> 
>>> "WorkerThread5":
>>>   waiting for ownable synchronizer 0x00000000ec9b7b48, (a 
>>> java.util.concurrent.locks.ReentrantLock$NonfairSync),
>>>   which is held by "Thread-5"
>>> 
>>> And this thread has the EC lock and is waiting for the OSC lock:
>>> "WorkerThread5":
>>> at sun.misc.Unsafe.park(Native Method)
>>> - parking to wait for  <0x00000000ec9b7b48> (a 
>>> java.util.concurrent.locks.ReentrantLock$NonfairSync)
>>> at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
>>> at 
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
>>> at 
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
>>> at 
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
>>> at 
>>> java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
>>> at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
>>> at 
>>> com.webobjects.eocontrol.EOObjectStoreCoordinator.lock(EOObjectStoreCoordinator.java:420)
>>> 
>>> What you have here is lock order inversion.  How is it that Thread-5 and 
>>> WorkerThread5 are using the same EC?  Or is that the Shared EC?  Are you 
>>> using the SEC?  
>>> 
>>> Understanding what this line is doing is probably key:
>>> at com.eldrix.rsdb.model._Report.addToPublishedReports(_Report.java:319)
>>> 
>>> Chuck
>>> 
>>> 
>>> From: <[email protected] 
>>> <mailto:[email protected]>> on 
>>> behalf of Mark Wardle <[email protected] <mailto:[email protected]>>
>>> Date: Thursday, March 31, 2016 at 12:07 PM
>>> To: WebObjects Dev Apple <[email protected] 
>>> <mailto:[email protected]>>
>>> Subject: Deadlock / stack interpretation
>>> 
>>> Hi all,
>>> 
>>> I have a deadlocked app and I am not sure how to interpret the jstack 
>>> output. jstack output is shown below.
>>> 
>>> I have 
>>> er.extensions.ERXEC.safeLocking=true
>>> 
>>> 
>>> It looks to me that in each case it is the auto-locking that is causing the 
>>> problem. i.e. I am not manually locking or unlocking. The most complicated 
>>> thread is WorkerThread5 which is initiating a fetch to resolve a KVC lookup 
>>> to perform an aggregated function with a qualifier and so attempting a lock.
>>> 
>>> Is there anything else I can do to either work out where the problem lies 
>>> or solve it? 
>>> 
>>> Thank you,
>>> 
>>> Mark
>>>  
>>> 
>>> Found one Java-level deadlock:
>>> =============================
>>> "WorkerThread127":
>>>   waiting for ownable synchronizer 0x00000000ec9b7b48, (a 
>>> java.util.concurrent.locks.ReentrantLock$NonfairSync),
>>>   which is held by "Thread-5"
>>> "Thread-5":
>>>   waiting for ownable synchronizer 0x00000000f60726a0, (a 
>>> java.util.concurrent.locks.ReentrantLock$NonfairSync),
>>>   which is held by "WorkerThread5"
>>> "WorkerThread5":
>>>   waiting for ownable synchronizer 0x00000000ec9b7b48, (a 
>>> java.util.concurrent.locks.ReentrantLock$NonfairSync),
>>>   which is held by "Thread-5"
>>> 
>>> =====
>>> 
>>> "WorkerThread127":
>>> at sun.misc.Unsafe.park(Native Method)
>>> - parking to wait for  <0x00000000ec9b7b48> (a 
>>> java.util.concurrent.locks.ReentrantLock$NonfairSync)
>>> at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
>>> at 
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
>>> at 
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
>>> at 
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
>>> at 
>>> java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
>>> at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
>>> at 
>>> com.webobjects.eocontrol.EOObjectStoreCoordinator.lock(EOObjectStoreCoordinator.java:420)
>>> at 
>>> com.webobjects.eocontrol.EOEditingContext.lockObjectStore(EOEditingContext.java:4666)
>>> at er.extensions.eof.ERXEC.lockObjectStore(ERXEC.java:793)
>>> at 
>>> com.webobjects.eocontrol.EOEditingContext.objectsWithFetchSpecification(EOEditingContext.java:4067)
>>> at er.extensions.eof.ERXEC.objectsWithFetchSpecification(ERXEC.java:1308)
>>> at 
>>> com.webobjects.eocontrol.EOEditingContext.objectsWithFetchSpecification(EOEditingContext.java:4444)
>>> at 
>>> er.extensions.eof.ERXFetchSpecification.fetchObjects(ERXFetchSpecification.java:155)
>>> at com.eldrix.rsdb.model._User.refetchUsers(_User.java:488)
>>> at com.eldrix.rsdb.model._User.refetchUser(_User.java:517)
>>> at com.eldrix.rsdb.model._User.refetchUser(_User.java:497)
>>> at com.eldrix.rsdb.model.User.authenticatedUser(User.java:172)
>>> [some stuff snipped]…
>>> 
>>> ===========
>>> 
>>> "Thread-5":
>>> at sun.misc.Unsafe.park(Native Method)
>>> - parking to wait for  <0x00000000f60726a0> (a 
>>> java.util.concurrent.locks.ReentrantLock$NonfairSync)
>>> at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
>>> at 
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
>>> at 
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
>>> at 
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
>>> at 
>>> java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
>>> at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
>>> at 
>>> com.webobjects.eocontrol.EOEditingContext.lock(EOEditingContext.java:4617)
>>> at er.extensions.eof.ERXEC.lock(ERXEC.java:571)
>>> at er.extensions.eof.ERXEC.autoLock(ERXEC.java:703)
>>> at er.extensions.eof.ERXEC.globalIDForObject(ERXEC.java:932)
>>> at 
>>> com.webobjects.eoaccess.EODatabaseContext._fireDeferredFaultWithSourceObject(EODatabaseContext.java:2370)
>>> at 
>>> com.webobjects.eoaccess.EOAccessDeferredFaultHandler.createFaultForDeferredFault(EOAccessDeferredFaultHandler.java:49)
>>> at 
>>> com.webobjects.eocontrol.EOCustomObject.willReadRelationship(EOCustomObject.java:1279)
>>> at 
>>> er.extensions.eof.ERXGenericRecord.willReadRelationship(ERXGenericRecord.java:380)
>>> at 
>>> com.webobjects.eocontrol._EOMutableKnownKeyDictionary$Initializer$_LazyGenericRecordBinding.valueInObject(_EOMutableKnownKeyDictionary.java:614)
>>> at 
>>> com.webobjects.eocontrol.EOCustomObject.storedValueForKey(EOCustomObject.java:1634)
>>> at 
>>> er.extensions.eof.ERXDatabaseContextDelegate.batchFetchToManyFault(ERXDatabaseContextDelegate.java:654)
>>> at 
>>> er.extensions.eof.ERXDatabaseContextDelegate.databaseContextShouldFetchArrayFault(ERXDatabaseContextDelegate.java:391)
>>> at sun.reflect.GeneratedMethodAccessor62.invoke(Unknown Source)
>>> at 
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>> at java.lang.reflect.Method.invoke(Method.java:483)
>>> at 
>>> com.webobjects.foundation.NSSelector._safeInvokeMethod(NSSelector.java:122)
>>> at com.webobjects.foundation._NSDelegate._perform(_NSDelegate.java:223)
>>> at com.webobjects.foundation._NSDelegate.perform(_NSDelegate.java:163)
>>> at 
>>> com.webobjects.eoaccess.EODatabaseContext._fireArrayFault(EODatabaseContext.java:4236)
>>> at 
>>> com.webobjects.eoaccess.EOAccessArrayFaultHandler.completeInitializationOfObject(EOAccessArrayFaultHandler.java:77)
>>> at 
>>> com.webobjects.eocontrol._EOCheapCopyMutableArray.willRead(_EOCheapCopyMutableArray.java:39)
>>> at 
>>> com.webobjects.eocontrol._EOCheapCopyMutableArray.count(_EOCheapCopyMutableArray.java:99)
>>> at com.webobjects.foundation.NSArray.containsObject(NSArray.java:460)
>>> at 
>>> com.webobjects.eocontrol.EOCustomObject.includeObjectIntoPropertyWithKey(EOCustomObject.java:904)
>>> at 
>>> er.extensions.eof.ERXGenericRecord.includeObjectIntoPropertyWithKey(ERXGenericRecord.java:1234)
>>> at com.eldrix.rsdb.model._Report.addToPublishedReports(_Report.java:319)
>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>> at 
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>>> at 
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>> at java.lang.reflect.Method.invoke(Method.java:483)
>>> at 
>>> com.webobjects.foundation.NSSelector._safeInvokeMethod(NSSelector.java:122)
>>> at 
>>> com.webobjects.eocontrol.EOCustomObject.addObjectToPropertyWithKey(EOCustomObject.java:940)
>>> at 
>>> com.webobjects.eocontrol.EOCustomObject.addObjectToBothSidesOfRelationshipWithKey(EOCustomObject.java:1028)
>>> at 
>>> er.extensions.eof.ERXGenericRecord.addObjectToBothSidesOfRelationshipWithKey(ERXGenericRecord.java:584)
>>> at 
>>> com.eldrix.rsdb.model._Report.createPublishedReportsRelationship(_Report.java:354)
>>> at 
>>> com.eldrix.news.controllers.ReportController$ReportPublisher.run(ReportController.java:212)
>>> at java.lang.Thread.run(Thread.java:745)
>>> 
>>> 
>>> =======
>>> 
>>> 
>>> "WorkerThread5":
>>> at sun.misc.Unsafe.park(Native Method)
>>> - parking to wait for  <0x00000000ec9b7b48> (a 
>>> java.util.concurrent.locks.ReentrantLock$NonfairSync)
>>> at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
>>> at 
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
>>> at 
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
>>> at 
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
>>> at 
>>> java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
>>> at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
>>> at 
>>> com.webobjects.eocontrol.EOObjectStoreCoordinator.lock(EOObjectStoreCoordinator.java:420)
>>> at 
>>> com.webobjects.eoaccess.EODatabaseContext.registeredDatabaseContextForModel(EODatabaseContext.java:999)
>>> at 
>>> com.webobjects.eoaccess.EODatabaseContext.registeredDatabaseContextForModel(EODatabaseContext.java:1033)
>>> at 
>>> er.extensions.eof.ERXEOControlUtilities._aggregateFunctionWithQualifierAndAggregateAttribute(ERXEOControlUtilities.java:862)
>>> at 
>>> er.extensions.eof.ERXEOControlUtilities.objectCountWithQualifier(ERXEOControlUtilities.java:732)
>>> at com.eldrix.rsdb.model.User.numberOfUnreadMessages(User.java:342)
>>> at com.eldrix.rsdb.model.User.hasUnreadMessages(User.java:325)
>>> at sun.reflect.GeneratedMethodAccessor138.invoke(Unknown Source)
>>> at 
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>> at java.lang.reflect.Method.invoke(Method.java:483)
>>> at 
>>> com.webobjects.foundation.NSKeyValueCoding$ValueAccessor$1.methodValue(NSKeyValueCoding.java:636)
>>> at 
>>> com.webobjects.foundation.NSKeyValueCoding$_MethodBinding.valueInObject(NSKeyValueCoding.java:1134)
>>> at 
>>> com.webobjects.eocontrol.EOCustomObject.valueForKey(EOCustomObject.java:1498)
>>> at 
>>> com.webobjects.foundation.NSKeyValueCoding$Utility.valueForKey(NSKeyValueCoding.java:447)
>>> at 
>>> com.webobjects.foundation.NSKeyValueCodingAdditions$DefaultImplementation.valueForKeyPath(NSKeyValueCodingAdditions.java:212)
>>> at 
>>> com.webobjects.eocontrol.EOCustomObject.valueForKeyPath(EOCustomObject.java:1588)
>>> at 
>>> com.webobjects.foundation.NSKeyValueCodingAdditions$Utility.valueForKeyPath(NSKeyValueCodingAdditions.java:149)
>>> at 
>>> com.webobjects.foundation.NSKeyValueCodingAdditions$DefaultImplementation.valueForKeyPath(NSKeyValueCodingAdditions.java:217)
>>> at com.webobjects.appserver.WOSession.valueForKeyPath(WOSession.java:1780)
>>> at 
>>> com.webobjects.foundation.NSKeyValueCodingAdditions$Utility.valueForKeyPath(NSKeyValueCodingAdditions.java:149)
>>> at 
>>> com.webobjects.foundation.NSKeyValueCodingAdditions$DefaultImplementation.valueForKeyPath(NSKeyValueCodingAdditions.java:217)
>>> at 
>>> com.webobjects.appserver.WOComponent.valueForKeyPath(WOComponent.java:1804)
>>> at 
>>> er.extensions.appserver.navigation.ERXNavigationMenuItem.resolveValue(ERXNavigationMenuItem.java:222)
>>> at 
>>> er.extensions.appserver.navigation.ERXNavigationMenuItem.hasActivity(ERXNavigationMenuItem.java:229)
>>> at 
>>> er.extensions.appserver.navigation.ERXNavigationMenuItem.hasActivityAndIsEnabled(ERXNavigationMenuItem.java:235)
>>> at sun.reflect.GeneratedMethodAccessor38.invoke(Unknown Source)
>>> at 
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>> at java.lang.reflect.Method.invoke(Method.java:483)
>>> at 
>>> com.webobjects.foundation.NSKeyValueCoding$ValueAccessor$1.methodValue(NSKeyValueCoding.java:636)
>>> at 
>>> com.webobjects.foundation.NSKeyValueCoding$_MethodBinding.valueInObject(NSKeyValueCoding.java:1134)
>>> at 
>>> com.webobjects.foundation.NSKeyValueCoding$DefaultImplementation.valueForKey(NSKeyValueCoding.java:1324)
>>> at com.webobjects.appserver.WOComponent.valueForKey(WOComponent.java:1736)
>>> at 
>>> com.webobjects.foundation.NSKeyValueCoding$Utility.valueForKey(NSKeyValueCoding.java:447)
>>> at 
>>> com.webobjects.foundation.NSKeyValueCodingAdditions$DefaultImplementation.valueForKeyPath(NSKeyValueCodingAdditions.java:212)
>>> at 
>>> com.webobjects.appserver.WOComponent.valueForKeyPath(WOComponent.java:1804)
>>> at 
>>> com.webobjects.appserver._private.WOKeyValueAssociation.valueInComponent(WOKeyValueAssociation.java:50)
>>> at 
>>> com.webobjects.appserver.WOAssociation.booleanValueInComponent(WOAssociation.java:276)
>>> at 
>>> com.webobjects.appserver._private.WOConditional.evaluateCondition(WOConditional.java:60)
>>> at 
>>> com.webobjects.appserver._private.WOConditional.invokeAction(WOConditional.java:85)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
>>> at 
>>> com.webobjects.appserver._private.WOConditional.invokeAction(WOConditional.java:86)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
>>> at 
>>> com.webobjects.appserver._private.WOGenericContainer.invokeAction(WOGenericContainer.java:29)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
>>> at 
>>> com.webobjects.appserver._private.WOConditional.invokeAction(WOConditional.java:86)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
>>> at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
>>> at er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:168)
>>> at 
>>> er.extensions.components.ERXNonSynchronizingComponent.invokeAction(ERXNonSynchronizingComponent.java:66)
>>> at 
>>> com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
>>> at 
>>> er.extensions.components._private.ERXWORepetition.invokeAction(ERXWORepetition.java:547)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
>>> at 
>>> com.webobjects.appserver._private.WOGenericContainer.invokeAction(WOGenericContainer.java:29)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
>>> at 
>>> com.webobjects.appserver._private.WOConditional.invokeAction(WOConditional.java:86)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
>>> at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
>>> at er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:168)
>>> at 
>>> er.extensions.components.ERXNonSynchronizingComponent.invokeAction(ERXNonSynchronizingComponent.java:66)
>>> at 
>>> er.extensions.appserver.navigation.ERXNavigationMenu.invokeAction(ERXNavigationMenu.java:150)
>>> at 
>>> com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
>>> at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
>>> at er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:168)
>>> at 
>>> er.extensions.components.ERXNonSynchronizingComponent.invokeAction(ERXNonSynchronizingComponent.java:66)
>>> at 
>>> com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
>>> at 
>>> er.extensions.components.conditionals.ERXWOConditional.invokeChildrenAction(ERXWOConditional.java:116)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
>>> at 
>>> er.extensions.components.conditionals.ERXWOConditional.invokeAction(ERXWOConditional.java:108)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
>>> at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
>>> at er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:168)
>>> at 
>>> er.extensions.components.ERXNonSynchronizingComponent.invokeAction(ERXNonSynchronizingComponent.java:66)
>>> at 
>>> com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105)
>>> at 
>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115)
>>> at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079)
>>> at er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:168)
>>> at com.webobjects.appserver.WOSession.invokeAction(WOSession.java:1357)
>>> at 
>>> com.webobjects.appserver.WOApplication.invokeAction(WOApplication.java:1745)
>>> at 
>>> er.extensions.appserver.ajax.ERXAjaxApplication.invokeAction(ERXAjaxApplication.java:119)
>>> at 
>>> er.extensions.appserver.ERXApplication.invokeAction(ERXApplication.java:2006)
>>> at er.ajax.AjaxResponse.generateResponse(AjaxResponse.java:67)
>>> at 
>>> com.webobjects.appserver._private.WOComponentRequestHandler._dispatchWithPreparedPage(WOComponentRequestHandler.java:229)
>>> at 
>>> com.webobjects.appserver._private.WOComponentRequestHandler._dispatchWithPreparedSession(WOComponentRequestHandler.java:298)
>>> at 
>>> com.webobjects.appserver._private.WOComponentRequestHandler._dispatchWithPreparedApplication(WOComponentRequestHandler.java:332)
>>> at 
>>> com.webobjects.appserver._private.WOComponentRequestHandler._handleRequest(WOComponentRequestHandler.java:369)
>>> at 
>>> com.webobjects.appserver._private.WOComponentRequestHandler.handleRequest(WOComponentRequestHandler.java:445)
>>> at er.ajax.AjaxRequestHandler.handleRequest(AjaxRequestHandler.java:20)
>>> at 
>>> com.webobjects.appserver.WOApplication.dispatchRequest(WOApplication.java:1687)
>>> at 
>>> er.extensions.appserver.ERXApplication.dispatchRequestImmediately(ERXApplication.java:2127)
>>> at 
>>> er.extensions.appserver.ERXApplication.dispatchRequest(ERXApplication.java:2092)
>>> at 
>>> com.webobjects.appserver._private.WOWorkerThread.runOnce(WOWorkerThread.java:144)
>>> at 
>>> com.webobjects.appserver._private.WOWorkerThread.run(WOWorkerThread.java:226)
>>> at java.lang.Thread.run(Thread.java:745)
>>> 
>>> Found 1 deadlock.
>> 
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list      ([email protected] 
>> <mailto:[email protected]>)
>> Help/Unsubscribe/Update your Subscription:
>> https://lists.apple.com/mailman/options/webobjects-dev/samuel%40samkar.com 
>> <https://lists.apple.com/mailman/options/webobjects-dev/samuel%40samkar.com>
>> 
>> This email sent to [email protected]
> 

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to