Servlet et Thread non exécutée
Bjr,
A partir d'une carte miniPC disposant de nombreuses E/S et fonctionnant sous Linux, je veux afficher les états des entrées dans une page web. J'ai donc installé java et Tomcat.
Au point de vue code, j'ai pour l'accés direct aux entrées la classe Gpio https://github.com/MohammadAdib/GPIO.../GPIO_Pin.java
J'ai ensuite un objet DataBean qui effectue le lien entre les valeurs des E/S et l'affichage de la page :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public class DataBean {
private int PIN_0 = 0;
.....
private Gpio pinZero;
.....
private String valeurPinZero ;
.....
public DataBean(){
pinZero = new Gpio(PIN_0);
pinZero.setModeINPUT();
.....
}
// setters pour mise à jour
public void setValeurPinZero() {
valeurPinZero = pinZero.getPinStatus();
}
...
// getters pour affichage page jsp
public String getValeurPinZero() {
return(valeurPinZero);
}
... |
Indépendamment de l'affichage, je mets à jour la variable de type DataBean toutes le 3 secondes, je crée donc un Thread Acquisition
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public class Acquisition extends Thread {
private DataBean dataInput;
public void referenceBean(DataBean db){
dataInput = db;
}
@Override
public void run(){
while (this.isAlive()) {
synchronized (dataInput){
dataInput.setValeurPinZero();
.....
}
try {
this.sleep(3000);
}
catch (InterruptedException ex) {}
}
}
} |
Et tout celà géré au niveau d'une servlet ServletIO :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| public void init(ServletConfig c) throws ServletException {
context = c.getServletContext();
db = new DataBean();
// Création du thread
th = new Acquisition();
th.referenceBean(db);
th.start();
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setAttribute("data", db);
context.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response);
} |
Et lors de l'éxécution de l'application, si je crée bien une instance de DataBean avec ses initialisations, il me semble que le thread n'est pas exécuté : il est certain que je ne passe pas dans la méthode run().
Comme je n'ai pas trop l'habitude des threads, je ne sais pas trop ou chercher.
Peut-être faut-il un paramètrage de Tomcat pour l'éxécution des threads?
Et lors de l'arrêt de Tomcat, que faut-il mettre dans la méthode destroy() de la servlet pour supprimer le thread?