From: Mike S. <ms...@md...> - 2007-04-26 13:23:20
|
hmm .. looking at that code in Wonder, it's: EODatabaseContext._EOAssertSafeMultiThreadedAccess(dbc); dbc.lock(); seems a little weird and unnecessary? On Apr 26, 2007, at 8:39 AM, Frank Stock wrote: > Hi, > > When control the Locking in one of my routines with an update I get > the following: > > 28079 [Thread-1] DEBUG NSLog - *** EODatabaseContext: access > without lock! > [2007-04-26 14:28:48 CEST] <Thread-1> java.lang.Exception: This is > not a real exception, just a stack trace of the location of the > missing lock: > at > com.webobjects.eoaccess.EODatabaseContext._EOAssertSafeMultiThreadedAc > cess(EODatabaseContext.java:4452) > at er.extensions.ERXObjectStoreCoordinatorSynchronizer > $ProcessChangesQueue._process > (ERXObjectStoreCoordinatorSynchronizer.java:429) > at er.extensions.ERXObjectStoreCoordinatorSynchronizer > $ProcessChangesQueue.process > (ERXObjectStoreCoordinatorSynchronizer.java:450) > at er.extensions.ERXObjectStoreCoordinatorSynchronizer > $ProcessChangesQueue.run(ERXObjectStoreCoordinatorSynchronizer.java: > 524) > at java.lang.Thread.run(Thread.java:613) > > This is all the information I get. > > This is the routine, sorry for the long code. It is indicated when > the error occures: > > public void setWebtext_F (String webtext, String language, String > value, String edited) { > //ec = session().defaultEditingContext(); > ERXEC ec=(ERXEC) ERXEC.newEditingContext(); > try{ > ec.lock(); > EOQualifier aQual; > NSMutableArray qbind; > EOFetchSpecification fs; > > Webtext wObject; > Language lObject; > LanguageWebtext lwObject; > > if ((null==edited) || (edited.equals(""))) > edited = "N"; > > // Bepaal het webtext-object voor de gegeven webtext > qbind=new NSMutableArray(); > qbind.addObject(webtext); > aQual = EOQualifier.qualifierWithQualifierFormat("(webtext=% > @)",qbind); > fs = new EOFetchSpecification("Webtext",aQual,null); > NSArray arWebtext = ec.objectsWithFetchSpecification(fs); > > try { > wObject=(Webtext)EOUtilities.objectMatchingKeyAndValue > (ec,"Webtext","webtext",webtext); > } > catch (Exception e) { > wObject=null; > } > // In principe mag er maximum 1 resultaat zijn > > if (null ==wObject) { > // Indien er geen resultaat is -> maak eerst deze webtext aan > wObject = new Webtext(); > wObject.setWebtext(webtext); > ec.insertObject(wObject); > wObject.validateForSave(); > ec.saveChanges(); > } > > // Bepaal het language-object voor de gegeven language > > try { > lObject=(Language)EOUtilities.objectMatchingKeyAndValue > (ec,"Language","language",language); > } > catch (Exception e) { > lObject=null; > } > > if (null==lObject) { > // Indien er geen resultaat is -> maak eerst deze language aan > lObject = new Language(); > ec.insertObject(lObject); > lObject.setLanguage(language); > lObject.validateForSave(); > ec.saveChanges(); > } > > // Bepaal het language_webtext-object voor de combinatie van > webtext-object en language-object > qbind=new NSMutableArray(); > qbind.addObject(language); > aQual = EOQualifier.qualifierWithQualifierFormat("(language=% > @)",qbind); > NSArray arLanguageWebText = EOQualifier.filteredArrayWithQualifier > (wObject.languagewebtext(),aQual); > > // In principe mag er maximum 1 resultaat zijn > int iLW = arLanguageWebText.count(); > if (iLW > 0) { > // pas de waarde aan voor deze languagewebtext > for (int i=0;i<iLW;i++) { > lwObject = (LanguageWebtext)arLanguageWebText.objectAtIndex(i); > lwObject.setValue(value); > lwObject.setEdited(edited); > lwObject.validateForSave(); > -------> ec.saveChanges(); <----------------------- Here Is > the lock > } > } else { > // er bestaat nog geen dergelijke languagewebtext > lwObject = new LanguageWebtext(); > lwObject.setValue(value); > lwObject.setLanguage(lObject); > lwObject.addObjectToBothSidesOfRelationshipWithKey > (lObject,"language"); > lwObject.setWebtext(wObject); > lwObject.addObjectToBothSidesOfRelationshipWithKey > (wObject,"webtext"); > lwObject.setEdited(edited); > ec.insertObject(lwObject); > ec.saveChanges(); > } > > } > finally { > ec.unlock(); > ec.dispose(); > } > } > > > Thanks, > Frank Stock > ---------------------------------------------------------------------- > --- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > Wonder-disc mailing list > Won...@li... > https://lists.sourceforge.net/lists/listinfo/wonder-disc > |