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]
