(I've added the method mymethod() in the thread to find the right Thread in the
stack)
Conclusion : I think that to get the email() value of the contact, my app has
to fetch a parameter value (using another editing context).
Question, I replace
EOEditingContext _localContext = new
EOEditingContext();
_localContext.setUndoManager(null);
_localContext.lock();
with
EOObjectStoreCoordinator parentObjectStore =
new EOObjectStoreCoordinator();
EOEditingContext _localContext = new
EOEditingContext(parentObjectStore);
_localContext.setUndoManager(null);
_localContext.lock();
And it works ! Is it normal ?
Jérémy
JVM version is 20.51-b01-457
Deadlock Detection:
java.lang.RuntimeException: Unable to deduce type of thread from address
0x00007f87be87d800 (expected type JavaThread, CompilerThread,
LowMemoryDetectorThread, JvmtiAgentThread, or SurrogateLockerThread)
at
sun.jvm.hotspot.runtime.Threads.createJavaThreadWrapper(Threads.java:155)
at sun.jvm.hotspot.runtime.JavaThread.next(JavaThread.java:118)
at
sun.jvm.hotspot.runtime.DeadlockDetector.createThreadTable(DeadlockDetector.java:149)
at
sun.jvm.hotspot.runtime.DeadlockDetector.print(DeadlockDetector.java:56)
at
sun.jvm.hotspot.runtime.DeadlockDetector.print(DeadlockDetector.java:39)
at sun.jvm.hotspot.tools.StackTrace.run(StackTrace.java:52)
at sun.jvm.hotspot.tools.StackTrace.run(StackTrace.java:45)
at sun.jvm.hotspot.tools.JStack.run(JStack.java:60)
at sun.jvm.hotspot.tools.Tool.start(Tool.java:221)
at sun.jvm.hotspot.tools.JStack.main(JStack.java:88)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.tools.jstack.JStack.runJStackTool(JStack.java:118)
at sun.tools.jstack.JStack.main(JStack.java:84)
Caused by: sun.jvm.hotspot.types.WrongTypeException: No suitable match for type
of address 0x00007f87be87d800
at
sun.jvm.hotspot.runtime.VirtualConstructor.instantiateWrapperFor(VirtualConstructor.java:95)
at
sun.jvm.hotspot.runtime.Threads.createJavaThreadWrapper(Threads.java:151)
... 15 more
Can't print deadlocks:Unable to deduce type of thread from address
0x00007f87be87d800 (expected type JavaThread, CompilerThread,
LowMemoryDetectorThread, JvmtiAgentThread, or SurrogateLockerThread)
Thread t@47363: (state = BLOCKED)
- com.myapp.myApp.MyAppApplication.getValeurForParametre(java.lang.String)
@bci=0, line=1915 (Interpreted frame)
-
com.myapp.myAppCRM.core.MyAppCRMParametres.getValeurForParametre(java.lang.String)
@bci=7, line=122 (Interpreted frame)
- com.myapp.myAppCRM.informations.MyAppCRMAnnuaireContact.email() @bci=8,
line=1556 (Interpreted frame)
- sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method,
java.lang.Object, java.lang.Object[]) @bci=0 (Interpreted frame)
- sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object,
java.lang.Object[]) @bci=87, line=39 (Interpreted frame)
- sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object,
java.lang.Object[]) @bci=6, line=25 (Compiled frame)
- java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[])
@bci=161, line=597 (Compiled frame)
-
com.webobjects.foundation.NSKeyValueCoding$ValueAccessor$1.methodValue(java.lang.Object,
java.lang.reflect.Method) @bci=6, line=636 (Compiled frame)
-
com.webobjects.foundation.NSKeyValueCoding$_MethodBinding.valueInObject(java.lang.Object)
@bci=9, line=1134 (Compiled frame)
- com.webobjects.eocontrol.EOCustomObject.valueForKey(java.lang.String)
@bci=14, line=1498 (Interpreted frame)
-
com.myapp.myApp.editing.EOGenericStateTransitionRecord.valueForKey(java.lang.String)
@bci=80, line=109 (Interpreted frame)
- com.webobjects.eocontrol.EOCustomObject.validateForSave() @bci=120,
line=1377 (Interpreted frame)
- com.webobjects.eocontrol.EOCustomObject.validateForUpdate() @bci=1,
line=1446 (Interpreted frame)
-
com.webobjects.eocontrol.EOEditingContext.validateTable(com.webobjects.foundation.NSSet,
int, com.webobjects.foundation.NSMutableArray[], boolean) @bci=72, line=2271
(Interpreted frame)
- com.webobjects.eocontrol.EOEditingContext.validateChangesForSave() @bci=175,
line=3020 (Interpreted frame)
- com.webobjects.eocontrol.EOEditingContext._prepareForPushChanges() @bci=141,
line=3249 (Interpreted frame)
- com.webobjects.eocontrol.EOEditingContext.saveChanges() @bci=38, line=3179
(Interpreted frame)
- com.myapp.myAppMatching.components.pages.MyAppMatchingPageParametres$2.run()
@bci=286, line=2786 (Interpreted frame)
- java.lang.Thread.run() @bci=11, line=680 (Interpreted frame)
Le 10 juil. 2013 à 21:29, Chuck Hill a écrit :
> The best thing to do is to cause a deadlock and then get a thread dump with
>
> sudo jstack -F <process ID>
>
> That should make it much faster to track down.
>
>
> Chuck
>
>
> On 2013-07-10, at 12:23 PM, Jérémy DE ROYER wrote:
>
>> Hi all,
>>
>> Following a case that hang my application which blocks all transactions
>> until we restart. I just managed to reproduce the case study below that
>> hangs my application too.
>>
>> Case : I have to update objects outside the user request/response loop.
>>
>> Code A
>> ===
>>
>> I use an action inside a component (live process) : everything works great.
>>
>> public WOComponent myAction() {
>>
>> EOEditingContext _localContext = new EOEditingContext();
>> _localContext.setUndoManager(null);
>> _localContext.lock();
>>
>> EOCompany currentCompany;
>>
>> NSArray<EOEnterpriseObject> _localCompanies =
>> EOCompany.fetchEOCompanies(_localContext,
>> new EOKeyValueQualifier(EOCompany.CONTACT_KEY,
>> EOQualifier.QualifierOperatorEqual, null),
>> new NSArray<EOSortOrdering>(new EOSortOrdering(EOCompany.TITLE_KEY,
>> EOSortOrdering.CompareAscending)));
>>
>> for (int i=0 ; i<_localObjects.count() ; i++)
>> {
>> currentCompany = _localCompanies.objectAtIndex(i);
>>
>> if (currentCompany.headquarter() != null)
>> {
>> currentCompany.setContactRelationship(currentCompany.headquarter().contact());
>> }
>>
>> try {
>> log.info("start saveChanges");
>> _localContext.saveChanges();
>> log.info("end saveChanges");
>> }
>> catch (Exception e) {
>>
>> e.printStackTrace();
>>
>> _localContext.revert();
>> }
>> }
>> }
>>
>> }
>> catch (Exception e) {
>>
>> e.printStackTrace();
>> }
>> finally {
>>
>> _localContext.unlock();
>> _localContext.dispose();
>> }
>> }
>>
>> (SQL log below)
>>
>> 2013-07-10 20:53:03,462 INFO [IndeXysMatchingPageParametres] - <start
>> saveChanges>
>> [...]
>> [2013-7-10 20:53:3 CEST] <WorkerThread10> 0 row(s) processed
>> [2013-7-10 20:53:3 CEST] <WorkerThread10> === Commit Internal Transaction
>> [2013-7-10 20:53:3 CEST] <WorkerThread10> === Begin Internal Transaction
>> [2013-7-10 20:53:3 CEST] <WorkerThread10> evaluateExpression:
>> <com.webobjects.jdbcadaptor.FrontbasePlugIn$FrontbaseExpression: "SELECT
>> t0."ADRESSE", t0."ADRESSE_2", t0."CODE_ACTION", t0."CODE_POSTAL",
>> t0."DATE_CLOTURE", t0."DATE_CREATION", t0."DATE_DEBUT",
>> t0."DATE_DERNIERE_MODIFICATION", t0."DATE_DERNIERE_MODIFICATION_ACTEUR",
>> t0."DATE_FIN", t0."DATE_FIN_REPETITION", t0."DUREE_CONSTATEE",
>> t0."EST_INTERNE", t0."EST_PRIVE", t0."EST_TERMINE", t0."ID", t0."ID_ACTEUR",
>> t0."ID_ACTEUR_CLOTURE", t0."ID_AUTEUR",
>> t0."ID_AUTEUR_DERNIERE_MODIFICATION", t0."ID_CAMPAGNE",
>> t0."ID_COMPTE_RENDU_CLOTURE", t0."ID_CONTACT", t0."ID_ENTREE_ORGANISATEUR",
>> t0."ID_ENTREE_ORIGINALE_REPETITION", t0."ID_ENTREPRISE", t0."ID_EVENEMENT",
>> t0."ID_RESSOURCE", t0."IS_VALID", t0."PRIORITE", t0."REFERENCE",
>> t0."STATUT", t0."TITRE", t0."TYPE_ACTIVITE", t0."VILLE" FROM
>> "INDEXYS_GESTION_ACTIVITE_ABSTRACT_ACTION" t0 WHERE t0."ID_CONTACT" =
>> 1000034" withBindings: >
>> [2013-7-10 20:53:3 CEST] <WorkerThread10> 0 row(s) processed
>> [2013-7-10 20:53:3 CEST] <WorkerThread10> === Commit Internal Transaction
>> [2013-7-10 20:53:3 CEST] <WorkerThread10> === Begin Internal Transaction
>> [2013-7-10 20:53:3 CEST] <WorkerThread10> evaluateExpression:
>> <com.webobjects.jdbcadaptor.FrontbasePlugIn$FrontbaseExpression: "SELECT
>> t0."CODE_NOTE_DE_FRAIS", t0."DATE_CREATION", t0."DATE_DECISION",
>> t0."DATE_DERNIERE_MODIFICATION", t0."DATE_NOTE_DE_FRAIS", t0."EST_SOLDEE",
>> t0."ID", t0."ID_ACTEUR", t0."ID_ACTEUR_SOLDE", t0."ID_ACTION",
>> t0."ID_AFFAIRE", t0."ID_AUTEUR", t0."ID_AUTEUR_DECISION",
>> t0."ID_AUTEUR_DERNIERE_MODIFICATION", t0."ID_CAMPAGNE",
>> t0."ID_CLASSE_NOTE_DE_FRAIS", t0."ID_COMMANDE", t0."ID_CONTACT",
>> t0."ID_DEVIS", t0."ID_ENTREPRISE", t0."ID_EVENEMENT", t0."ID_FACTURE",
>> t0."ID_FORFAIT_NOTE_DE_FRAIS", t0."ID_OPPORTUNITE", t0."ID_ORGANISATION",
>> t0."ID_PARTITION", t0."ID_PROJET", t0."ID_TYPE", t0."IS_VALID",
>> t0."MONTANT_HT", t0."MONTANT_TTC", t0."NOMBRE_KILOMETRE",
>> t0."NOMBRE_PERSONNE", t0."REFERENCE", t0."STATUT", t0."TITRE",
>> t0."TYPE_DECISION" FROM "INDEXYS_CRM_GESTION_ACTIVITE_NOTE_DE_FRAIS" t0
>> WHERE t0."ID_ENTREPRISE" = 1000034" withBindings: >
>> [2013-7-10 20:53:3 CEST] <WorkerThread10> 0 row(s) processed
>> [2013-7-10 20:53:3 CEST] <WorkerThread10> === Commit Internal Transaction
>> [2013-7-10 20:53:3 CEST] <WorkerThread10> === Begin Internal Transaction
>> [2013-7-10 20:53:3 CEST] <WorkerThread10> evaluateExpression:
>> <com.webobjects.jdbcadaptor.FrontbasePlugIn$FrontbaseExpression: "SELECT
>> t0."EST_INACTIVE", t0."ID", t0."ID_ABONNE", t0."ID_ADRESSE_EMAIL",
>> t0."ID_CAMPAGNE", t0."ID_CONTACT", t0."ID_DERNIER_ENVOI",
>> t0."ID_DERNIER_ENVOI_ACCESSED",
>> t0."ID_DERNIER_ENVOI_ACCESSED_SINCE_LAST_RESET",
>> t0."ID_DERNIER_ENVOI_DOWNLOADED",
>> t0."ID_DERNIER_ENVOI_DOWNLOADED_SINCE_LAST_RESET",
>> t0."ID_DERNIER_ENVOI_READ", t0."ID_DERNIER_ENVOI_READ_SINCE_LAST_RESET",
>> t0."ID_DERNIER_ENVOI_SINCE_LAST_RESET", t0."ID_DERNIER_ENVOI_UNSUBSCRIBE",
>> t0."ID_DERNIER_ENVOI_UNSUBSCRIBE_SINCE_LAST_RESET", t0."ID_DERNIER_ERREUR",
>> t0."ID_DERNIER_ERREUR_SINCE_LAST_RESET", t0."ID_ENTREPRISE",
>> t0."ID_UTILISATEUR", t0."LAST_ACCESSED", t0."LAST_DOWNLOADED",
>> t0."LAST_READ", t0."LAST_UNSUBSCRIBE", t0."NOMBRE_CONSULTATION",
>> t0."NOMBRE_CONSULTATION_SINCE_LAST_RESET", t0."NOMBRE_LIEN_INTERNET",
>> t0."NOMBRE_LIEN_INTERNET_SINCE_LAST_RESET" FROM
>> "INDEXYS_EMAILING_PARTICIPATION" t0 WHERE t0."ID_CONTACT" = 1000034"
>> withBindings: >
>> [2013-7-10 20:53:3 CEST] <WorkerThread10> 0 row(s) processed
>> [2013-7-10 20:53:3 CEST] <WorkerThread10> === Commit Internal Transaction
>> [2013-7-10 20:53:3 CEST] <WorkerThread10> === Begin Internal Transaction
>> [2013-7-10 20:53:3 CEST] <WorkerThread10> evaluateExpression:
>> <com.webobjects.jdbcadaptor.FrontbasePlugIn$FrontbaseExpression: "UPDATE
>> "INDEXYS_MATCHING_COMMANDE_CLIENT" SET "ID_CONTACT" = 1000034,
>> "ID_ENTREPRISE_CLIENT" = 1000027 WHERE ("ID" = 1000526 AND "CODE_COMMANDE" =
>> 'MON-CODE' AND "CODE_CONFIRMATION_PAIEMENT" = 830 AND "CODE_PARRAINAGE" is
>> NULL AND "CODE_PROMOTION" is NULL AND "DATE_ANNULATION" is NULL AND
>> "DATE_COMMANDE" = TIMESTAMP '2013-03-21 18:31:03.000' AND
>> "DATE_CONFIRMATION_FACTURATION" = TIMESTAMP '2013-03-21 18:59:23.000' AND
>> "DATE_CONFIRMATION_PAIEMENT" = TIMESTAMP '2013-03-21 18:52:13.000' AND
>> "DATE_CREATION" = TIMESTAMP '2013-03-21 18:31:02.000' AND "DATE_DEBUT" is
>> NULL AND "DATE_DERNIERE_FACTURE_CLI" = TIMESTAMP '2013-03-21 18:59:23.000'
>> AND "DATE_DERNIERE_FACTURE_FOU" is NULL AND "DATE_DERNIERE_MODIFICATION" =
>> TIMESTAMP '2013-03-21 18:59:18.000' AND "DATE_FIN" is NULL AND "DATE_SOLDE"
>> = TIMESTAMP '2013-03-21 18:52:13.000' AND "DATE_VALIDATION" = TIMESTAMP
>> '2013-03-21 18:50:58.000' AND "DEVISE" = '€' AND "EST_SOLDEE" is NULL AND
>> "ETAT_COMMANDE" is NULL AND "ID_ACTEUR" is NULL AND "ID_AFFAIRE" is NULL AND
>> "ID_AUTEUR" = 1000215 AND "ID_AUTEUR_ANNULATION" = 1000002 AND
>> "ID_AUTEUR_COMMANDE" = 1000215 AND "ID_AUTEUR_CONFIRMATION_FACTURATION" is
>> NULL AND "ID_AUTEUR_CONFIRMATION_PAIEMENT" is NULL AND
>> "ID_AUTEUR_DERNIERE_MODIFICATION" = 1000002 AND "ID_AUTEUR_SOLDE" is NULL
>> AND "ID_AUTEUR_VALIDATION" = 1000002 AND "ID_AUTORISATION" is NULL AND
>> "ID_CAMPAGNE" is NULL AND "ID_CLIENT" = 1000215 AND "ID_CLIENT_PARRAIN" is
>> NULL AND "ID_CONTACT" is NULL AND "ID_DEVIS" is NULL AND
>> "ID_ENTREPRISE_CLIENT" is NULL AND "ID_EVENEMENT" = 1000044 AND
>> "ID_OPPORTUNITE" is NULL AND "MODE_PAIEMENT" = 2 AND
>> "POINTS_AJOUTES_FILLEUL" is NULL AND "POINTS_AJOUTES_PARRAIN" is NULL AND
>> "POINTS_CONSOMMES_PARRAIN" is NULL AND "PRIX_AVEC_TVA" = 0 AND "REFERENCE" =
>> 'da615844-3dd0-4a51-8201-4d7fd217548e' AND "REFERENCE_AFFILIE" is NULL AND
>> "REFERENCE_PROCESS" is NULL AND "STATUT" is NULL AND "TITRE" is NULL AND
>> "TYPE_COMMANDE" = 1 AND "TYPE_PAIEMENT" = 2)" withBindings: >
>> [2013-7-10 20:53:3 CEST] <WorkerThread10> === Commit Internal Transaction
>> 2013-07-10 20:53:03,462 INFO [IndeXysMatchingPageParametres] - <end
>> saveChanges>
>>
>>
>> Code B
>> ===
>>
>> I use the same action but include my process inside a thread (used to
>> display a AjaxProgessBar), the process never save the changes and my
>> application hangs… and the SQL log show it never updates
>>
>> public WOComponent myAction() {
>>
>> Thread _localThread = new Thread(new Runnable()
>> {
>> public void run() {
>>
>> EOEditingContext _localContext = new EOEditingContext();
>> _localContext.setUndoManager(null);
>> _localContext.lock();
>>
>> EOCompany currentCompany;
>>
>> NSArray<EOEnterpriseObject> _localCompanies =
>> EOCompany.fetchEOObjects(_localContext,
>> new EOKeyValueQualifier(EOCompany.CONTACT_KEY,
>> EOQualifier.QualifierOperatorEqual, null),
>> new NSArray<EOSortOrdering>(new EOSortOrdering(EOCompany.TITLE_KEY,
>> EOSortOrdering.CompareAscending)));
>>
>> for (int i=0 ; i<_localObjects.count() ; i++)
>> {
>> currentCompany = _localCompanies.objectAtIndex(i);
>>
>> currentCompany.setContactRelationship(_localCompanies.headquarter().contact());
>>
>> try {
>> log.info("start saveChanges");
>> _localContext.saveChanges();
>> log.info("end saveChanges");
>> }
>> catch (Exception e) {
>>
>> e.printStackTrace();
>>
>> _localContext.revert();
>> }
>> }
>> }
>>
>> }
>> catch (Exception e) {
>>
>> e.printStackTrace();
>> }
>> finally {
>>
>> _localContext.unlock();
>> _localContext.dispose();
>> }
>> }
>> });
>>
>> _localThread.start();
>>
>> return null;
>> }
>>
>> 2013-07-10 20:53:03,462 INFO [IndeXysMatchingPageParametres] - <start
>> saveChanges>
>> [...]
>> [2013-7-10 20:58:3 CEST] <Thread-18> 0 row(s) processed
>> [2013-7-10 20:58:3 CEST] <Thread-18> === Commit Internal Transaction
>> [2013-7-10 20:58:3 CEST] <Thread-18> === Begin Internal Transaction
>> [2013-7-10 20:58:3 CEST] <Thread-18> evaluateExpression:
>> <com.webobjects.jdbcadaptor.FrontbasePlugIn$FrontbaseExpression: "SELECT
>> t0."DATE_CREATION", t0."DATE_DERNIERE_MODIFICATION", t0."DATE_INSCRIPTION",
>> t0."EMAIL_INSCRIPTION_HAS_BEEN_SENT", t0."ID", t0."ID_ACTEUR",
>> t0."ID_AUTEUR", t0."ID_AUTEUR_DERNIERE_MODIFICATION",
>> t0."ID_COMMANDE_CLIENT", t0."ID_CONTACT", t0."ID_ENTREPRISE",
>> t0."ID_EVENEMENT", t0."ID_PARTITION", t0."ID_PERIODE_PRESENCE",
>> t0."ID_PROFIL_PROPOSE", t0."ID_PROFIL_INSCRIPTION",
>> t0."ID_PROFIL_INSCRIPTION_TARIF", t0."ID_PROFIL_PARTICIPATION",
>> t0."ID_PROFIL_RECHERCHE", t0."ID_TYPE", t0."ID_UTILISATEUR", t0."IS_VALID",
>> t0."LAST_LOGIN", t0."LAST_NOTIFICATION_CONTACTS",
>> t0."LAST_NOTIFICATION_INSCRIPTIONS", t0."LAST_UPDATE_JE_PROPOSE",
>> t0."LAST_UPDATE_JE_RECHERCHE", t0."LAST_UPDATE_JE_SUIS",
>> t0."LAST_UPDATE_VOEUX_EMIS", t0."NOTE", t0."REFERENCE", t0."STATUT" FROM
>> "INDEXYS_MATCHING_PARTICIPATION" t0 WHERE t0."ID_COMMANDE_CLIENT" = 1000509"
>> withBindings: >
>> [2013-7-10 20:58:3 CEST] <Thread-18> 1 row(s) processed
>> [2013-7-10 20:58:3 CEST] <Thread-18> === Commit Internal Transaction
>> [2013-7-10 20:58:3 CEST] <Thread-18> === Begin Internal Transaction
>> [2013-7-10 20:58:3 CEST] <Thread-18> evaluateExpression:
>> <com.webobjects.jdbcadaptor.FrontbasePlugIn$FrontbaseExpression: "SELECT
>> t0."CREDIT_TTC", t0."DATE_CREATION", t0."DATE_DERNIERE_MODIFICATION",
>> t0."DATE_REGLEMENT", t0."DEBIT_TTC", t0."DEVISE", t0."ID", t0."ID_AUTEUR",
>> t0."ID_AUTEUR_DERNIERE_MODIFICATION", t0."ID_CLIENT", t0."ID_COMMANDE",
>> t0."ID_CONTACT", t0."ID_ENTREPRISE", t0."ID_FACTURE", t0."ID_LETTRAGE",
>> t0."ID_MODE_REGLEMENT", t0."ID_ORGANISATION", t0."ID_PARTITION",
>> t0."REFERENCE" FROM "INDEXYS_GESTION_COMMERCIALE_REGLEMENT" t0 WHERE
>> t0."ID_COMMANDE" = 1000509" withBindings: >
>> [2013-7-10 20:58:3 CEST] <Thread-18> 0 row(s) processed
>> [2013-7-10 20:58:3 CEST] <Thread-18> === Commit Internal Transaction
>> [2013-7-10 20:58:3 CEST] <Thread-18> === Begin Internal Transaction
>> [2013-7-10 20:58:3 CEST] <Thread-18> evaluateExpression:
>> <com.webobjects.jdbcadaptor.FrontbasePlugIn$FrontbaseExpression: "SELECT
>> t0."CODE_NOTE_DE_FRAIS", t0."DATE_CREATION", t0."DATE_DECISION",
>> t0."DATE_DERNIERE_MODIFICATION", t0."DATE_NOTE_DE_FRAIS", t0."EST_SOLDEE",
>> t0."ID", t0."ID_ACTEUR", t0."ID_ACTEUR_SOLDE", t0."ID_ACTION",
>> t0."ID_AFFAIRE", t0."ID_AUTEUR", t0."ID_AUTEUR_DECISION",
>> t0."ID_AUTEUR_DERNIERE_MODIFICATION", t0."ID_CAMPAGNE",
>> t0."ID_CLASSE_NOTE_DE_FRAIS", t0."ID_COMMANDE", t0."ID_CONTACT",
>> t0."ID_DEVIS", t0."ID_ENTREPRISE", t0."ID_EVENEMENT", t0."ID_FACTURE",
>> t0."ID_FORFAIT_NOTE_DE_FRAIS", t0."ID_OPPORTUNITE", t0."ID_ORGANISATION",
>> t0."ID_PARTITION", t0."ID_PROJET", t0."ID_TYPE", t0."IS_VALID",
>> t0."MONTANT_HT", t0."MONTANT_TTC", t0."NOMBRE_KILOMETRE",
>> t0."NOMBRE_PERSONNE", t0."REFERENCE", t0."STATUT", t0."TITRE",
>> t0."TYPE_DECISION" FROM "INDEXYS_CRM_GESTION_ACTIVITE_NOTE_DE_FRAIS" t0
>> WHERE t0."ID_ENTREPRISE" = 1000509" withBindings: >
>> [2013-7-10 20:58:3 CEST] <Thread-18> 0 row(s) processed
>> [2013-7-10 20:58:3 CEST] <Thread-18> === Commit Internal Transaction
>>
>> Code C
>> ===
>>
>> I include a loop that prints each objects that will be updated : works quite
>> great (some few times, my app hangs).
>>
>> public WOComponent myAction() {
>>
>> Thread _localThread = new Thread(new Runnable()
>> {
>> public void run() {
>>
>> EOEditingContext _localContext = new EOEditingContext();
>> _localContext.setUndoManager(null);
>> _localContext.lock();
>>
>> EOCompany currentCompany;
>>
>> NSArray<EOEnterpriseObject> _localCompanies =
>> EOCompany.fetchEOObjects(_localContext,
>> new EOKeyValueQualifier(EOCompany.CONTACT_KEY,
>> EOQualifier.QualifierOperatorEqual, null),
>> new NSArray<EOSortOrdering>(new EOSortOrdering(EOCompany.TITLE_KEY,
>> EOSortOrdering.CompareAscending)));
>>
>> for (int i=0 ; i<_localObjects.count() ; i++)
>> {
>> currentCompany = _localCompanies.objectAtIndex(i);
>>
>> currentCompany.setContactRelationship(_localCompanies.headquarter().contact());
>>
>> try {
>> for (int j=0 ; j<_localContext.updatedObjects().count() ; j++) {
>> log.info("_localContext.updatedObjects().objectAtIndex(j) >" +
>> _localContext.updatedObjects().objectAtIndex(j));
>> }
>>
>> log.info("start saveChanges");
>> _localContext.saveChanges();
>> log.info("end saveChanges");
>> }
>> catch (Exception e) {
>>
>> e.printStackTrace();
>>
>> _localContext.revert();
>> }
>> }
>> }
>>
>> }
>> catch (Exception e) {
>>
>> e.printStackTrace();
>> }
>> finally {
>>
>> _localContext.unlock();
>> _localContext.dispose();
>> }
>> }
>> });
>>
>> _localThread.start();
>>
>> return null;
>> }
>>
>> What's wrong with my code ?
>>
>>
>>
>> Thank's for any help, these random deadlocks are very uncomfortable
>>
>> Jérémy
>> _______________________________________________
>> 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/chill%40global-village.net
>>
>> This email sent to [email protected]
>
> --
> Chuck Hill
> Executive Managing Partner, VP Development and Technical Services
>
> Practical WebObjects - for developers who want to increase their overall
> knowledge of WebObjects or who are trying to solve specific problems.
> http://www.global-village.net/gvc/practical_webobjects
>
> Global Village Consulting ranks 13th in 2012 in BIV's Top 100 Fastest Growing
> Companies in B.C!
>
> Global Village Consulting ranks 44th in 25th annual PROFIT 500 ranking of
> Canada’s Fastest-Growing Companies by PROFIT Magazine!
>
>
>
>
>
>
>
>
>
>
>
>
_______________________________________________
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]