Re: 20 Second Delay on editingContext.saveChanges()
Re: 20 Second Delay on editingContext.saveChanges()
- Subject: Re: 20 Second Delay on editingContext.saveChanges()
- From: Ramsey Gurley <email@hidden>
- Date: Thu, 8 Jul 2010 10:38:12 -0400
On Jul 8, 2010, at 9:46 AM, Greg Lappen wrote:
Hi all,
I am running into a bizarre issue with our WebObjects Application.
I have searched the lists for quite a while, but could not find a
case where someone had the same problem.
What is even stranger is that our application is deployed on two
different servers, both with WebObjects 5.4.3 and in one environment
the issue occurs, and not in the other.
What I see is that calling editingContext.saveChanges() is returning
immediately in one case, and hanging for 20 seconds in the other
case. It's not really "hanging" - the CPU is pegged at over 100%,
and taking thread dumps during that 20 seconds shows something like
this:
"WorkerThread3" prio=5 tid=0x000000010296a800 nid=0x1519b2000
runnable [0x00000001519af000]
java.lang.Thread.State: RUNNABLE
at java.lang.reflect.Array.newInstance(Array.java:52)
at
com
.webobjects
.foundation
._NSCollectionPrimitives.copyArray(_NSCollectionPrimitives.java:123)
at com.webobjects.foundation.NSArray.objectsNoCopy(NSArray.java:356)
at
com
.webobjects
.foundation.NSMutableArray._removeObject(NSMutableArray.java:225)
at
com
.webobjects
.foundation.NSMutableArray.removeObject(NSMutableArray.java:247)
at
com
.webobjects
.foundation.NSMutableArray.removeObjects(NSMutableArray.java:399)
at
com
.webobjects
.foundation.NSMutableArray.removeObjectsInArray(NSMutableArray.java:
285)
at
com
.webobjects
.foundation
._NSArrayUtilities
.arrayExcludingObjectsFromArray(_NSArrayUtilities.java:173)
at
com
.webobjects
.eoaccess
.EODatabaseContext
.recordChangesInEditingContext(EODatabaseContext.java:5943)
at
com
.webobjects
.eocontrol
.EOObjectStoreCoordinator
.saveChangesInEditingContext(EOObjectStoreCoordinator.java:373)
at
com
.webobjects
.eocontrol.EOEditingContext.saveChanges(EOEditingContext.java:3192)
at net.paperfree.lightbeam.model.LPFile.setFileData(LPFile.java:102)
Seems like the EODatabaseContext is doing some housekeeping before
executing the SQL....here's the Java code in question:
public class LPFile extends _LPFile {
....
....
public synchronized void setFileData(NSData fileData) throws
IOException {
// Update forms by deleting existing ones, then adding new ones
for (int i=lpFileForms().count()-1; i>=0; i--) {
final LPFileForm lpFileForm = (LPFileForm)
lpFileForms().objectAtIndex(i);
this.removeFromLpFileForms(lpFileForm);
editingContext().deleteObject(lpFileForm);
}
// Get new form list via SOAP call
Element docInfoElm =
LPServer.threadLocal().exportDocumentInfo(this);
List formElms = formsElm.getChildren("form");
for (int i = 0; i < formElms.size(); i++) {
Element formElm = (Element) formElms.get(i);
You have violated the commandments below. Thou shalt not modify an EO
before inserting it into an EC.
http://wiki.objectstyle.org/confluence/display/WO/EOF-Using+EOF-The+EOF+Commandments
LPFileForm lpFileForm = new LPFileForm();
// extract data from xml, put into lpFileForm
// Setup relationships to lpForm and lpFile
lpFileForm.setLpForm(lpForm);
lpFileForm.setLpFormID(lpForm.id());
lpFileForm.setLpFile(this);
lpFileForm.setLpFileID(this.fileID());
this.addToLpFileForms(lpFileForm);
editingContext().insertObject(lpFileForm);
}
editingContext().saveChanges();
}
....
....
}
Does the above code have anything obviously wrong with it? It's
basically clearing a one-to-many relationship, then re-populating
it. I call this.addToLpFileForms() because I want the relationship
updated in memory as well as in the database.
Any insight would be hugely appreciated.
Thanks,
Greg
_______________________________________________
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