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 :
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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); } ...
Et tout celà géré au niveau d'une servlet ServletIO :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 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().
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
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?
Partager