[
https://issues.jboss.org/browse/DROOLS-610?page=com.atlassian.jira.plugin...
]
Nathalie ravenel updated DROOLS-610:
------------------------------------
Attachment: image001.jpg
Dear Mario,
It is possible we don’t use correctly drools. We have a program what receives some events
and updates the “working memory”. Inside the function modifier-element (to update the
facthandle), we update the facthandle and after we fireAllRules. Please find below the
corresponding java code.
We don’t have to fireAllRules ?
Nathalie
public void modifier_element(String nom_slot, String valeur) {
String tmp;
// on passe le nom en minuscule
nom_slot = nom_slot.toLowerCase();
//
if(debug)
//executer_commande("echo
\""+nom_slot+": "+valeur+"\" >>
../debug/console.txt");
//System.out.println("Modifier element (str/str) :
"+nom_slot+" valeur "+valeur);
try {
// on parcourt la liste de noms
for (String nom : listeDesNoms) {
// si le nom du slot
contient le nom (ex : data_srv_1_choc contient data_srv_1)
//if(debug &
nom_slot.contains("courant_commande")) System.out.println("Nom slot
"+nom_slot+" valeurs:" +valeur+"\n");
if
(nom_slot.contains(nom)) {
// be carefull element serveur_choc ... not dealed
by this command
// find the element and the string attribute
tmpO =
listeElements.get(nom);
tmp=tmpO.getString(nom_slot);
/*if (nom_slot.contains("_choc")) {
System.out.println("Element (str/str)
"+nom_slot+" (initial/update) :"+tmp+"
/"+valeur+"\n");
}*/
// si la
valeur du slot est differente de l'ancienne
//if(debug) System.out.println("Nom associe
str/str "+nom+" slot: "+nom_slot+" valeurs: "+tmp+
"/"+valeur+"\n");
if ( tmp
== null || !tmp.equals(valeur)){
//if (!tmpO.getString(nom_slot).equals(valeur) )
{
// on recupere le factHandle relatif a
l'objet
try{
tmpFH = listeFactHandle.get(tmpO.getNom());
}
catch(NullPointerException e){
System.err.println("erreur de recuperation dans le fact
handle...");
}
// on modifie son attribut
tmpO.modifierAttributString(nom_slot,
valeur);
// update memory
//this.session.update(listeFactHandle.get("myBool"), myBool );
this.session.update(tmpFH, tmpO);
this.session.fireAllRules();
//if(debug)
System.out.println("Modifié en memoire (str) "+tmpO.getNom()+" slot:
"+nom_slot+" valeur: "+valeur);
//if((debug)&
(nom_slot.contains("courant"))) System.out.println("Fin modif (str) objet
"+tmpO.getNom()+" slot: "+nom_slot+" valeur: "+valeur);
}
// pas
propre mais gain de temps
break;
}
}
// si le nom est pas trouve on
l'imprime a l'ecran
} catch (NullPointerException e) {
//if(!nom_slot.contains("_phase") & !nom_slot.contains("_seuil")
& !nom_slot.contains("_color") & !nom_slot.contains("_left")
& !nom_slot.contains("_right") &
!nom_slot.contains("_middle")) {
if(debug)
System.out.println("Objet non reference dans les slots (str): " + nom_slot+
" valeur "+valeur);
//}
}
// RAZ de elements temporaires
tmpO = null;
tmpFH = null;
}
De : Mario Fusco (JIRA) [mailto:issues@jboss.org]
Envoyé : mercredi 24 septembre 2014 19:56
À : RAVENEL Nathalie 161957
Objet : [JBoss JIRA] (DROOLS-610) drools-worker-2 thread blocked and the main program
blocks
[Image supprimée par l'expéditeur.]
Mario
Fusco<https://issues.jboss.org/secure/ViewProfile.jspa?name=mfusco> commented
on [Bug]
DROOLS-610<https://issues.jboss.org/browse/DROOLS-610>
Re: drools-worker-2 thread blocked and the main program
blocks<https://issues.jboss.org/browse/DROOLS-610>
Nathalie,
for what I can see from the stack you attached, the deadlock is caused by the fact that
you're misusing drools. In particular drools-worker-2.PNG shows that you're
invoking a fireAllRules inside the execution of a drools consequence. For what I know this
doesn't make any sense and I cannot see a valid reason for doing this, even because if
a consequence is firing it means that you're already inside a fireAllRules.
Please let me know if you have a use case that requires to do this, so we could discuss
it. Otherwise I'll close this ticket as invalid.
Cheers,
Mario
[Add
Comment]<https://issues.jboss.org/browse/DROOLS-610#add-comment>
Add
Comment<https://issues.jboss.org/browse/DROOLS-610#add-comment>
This message was sent by Atlassian JIRA (v6.3.1#6329-sha1:7df76f1)
[Atlassian logo]
drools-worker-2 thread blocked and the main program blocks
----------------------------------------------------------
Key: DROOLS-610
URL:
https://issues.jboss.org/browse/DROOLS-610
Project: Drools
Issue Type: Bug
Affects Versions: 6.1.0.Final
Environment: linux
Reporter: Nathalie ravenel
Assignee: Mario Fusco
Attachments: blocked.PNG, drools-worker-2.PNG, image001.jpg, main thread.PNG,
pool-1-thread1.PNG
Running our program, we got some deadlock on one thread (drools-worker-2). We
investigated the problem using java memory control. The thread is blocked and the program
also. The stack traces was registered for the different threads. The last trace for the
thread was : org.drools.core.common.SynchronizedLeftTuplesSets.takeAll.
There are 1111 Blocked count on one DeadLock on the thread.
--
This message was sent by Atlassian JIRA
(v6.3.1#6329)