1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| @Override
public Boolean call() throws Exception {
System.out.println("Thread " + Thread.currentThread().getId());
Iterator<IStep> it = run.getSteps();
IStep lastRepFwdStep = run.getLastStepRepFwd();
IStep step = null;
if (debut != null) {
while (it.hasNext()) {
step = (IStep) it.next();
if (step.getName().equals(debut)) {
break;
}
}
}
while (it.hasNext() && !isEnd && !Thread.currentThread().isInterrupted()) {
// Si pas de début spécifié ou que le debut demandé a été
// exécuté on
// passe à l'étape suivante
if (debut == null || debutExec) {
step = (IStep) it.next();
}
if (step.getName().equals(fin)) {
isEnd = true;
}
currentStep = step;
// notifyObservers();
// On met a true pour dire que l'étape debut demandé va être
// exécuté, on pourra passer au suivante apres
debutExec = true;
if (((Step) step).getType().equals("fwd")) {
StepForward stf = (StepForward) step;
while (q.isEmpty()) {
//Thread.sleep(100);
// System.out.println("Attente qu'un message arrive dans le superviseur...");
}
System.out.println("Message arrivé");
stf.setMessage(q.poll());
stf.setDestinataire(destinataire);
IdataRetour data = stf.runStep();
list_dataPost = stf.getListData();
System.out.println("Retour de l'étape " + step.getName()
+ " : " + data.getMessage());
System.out.println("Queue réponse avant : " + qRep.size());
qRep.add(data.getMessage());
System.out.println("Queue réponse après : " + qRep.size());
} else if (((Step) step).getType().equals("rep")) {
messArenvoyer = null;
if (!qRep.isEmpty()) {
messArenvoyer = qRep.poll();
}
System.out.println("Réponse : " + step.getName()
+ messArenvoyer);
if (lastRepFwdStep != null
&& lastRepFwdStep.getName().equals(step.getName())) {
System.out
.println("On notifie que c'est la dernière étape");
notifyLastStep();
}
notifyObservers();
} else {
step.setDataPost(list_dataPost);
IdataRetour retour_data = step.runStep();
System.out.println("Retour de l'étape " + step.getName()
+ " : " + retour_data.getCode());
}
}
System.out.println("Fini par interruption : "+Thread.currentThread().isInterrupted());
Proxy.hotBilling = false;
majTablesProxy();
return true;
} |
Partager