Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1992 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Threads sur un serveur J2EE ? Thread en tant que Singleton?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Threads sur un serveur J2EE ? Thread en tant que Singleton?

n°1362187
brisssou
8-/
Posté le 09-05-2006 à 10:44:56  profilanswer
 

Rapidement, le contexte : sur un serveur J2EE, je doit pouvoir lancer un thread qui scrute un répertoire pour repérer l'arrivée de nouveaux fichiers et faire... des trucs avec.
 
Je pensait donc lancer le thread avec un plugin struts, et le controller (start/stop) avec une page web à la con.
 
En écrivant le message, je suis en train de penser que mon thread est un singleton, et je me demande si je me suis pas un peu emballé là.

Code :
  1. public class FolderScan extends Thread {
  2. private static final FolderScan INSTANCE = new FolderScan();
  3. private FolderScan() {
  4.  setName("FolderScan" );
  5. }
  6. public static FolderScan getInstance(){return INSTANCE;}
  7. private boolean running;
  8. public void run() {
  9.  while (running) {
  10.   ...
  11.  }
  12. }
  13. public synchronized void start() {
  14.  super.start();
  15.  LOG.info(Messages.getString("scan.ctrl.started" ));
  16. }
  17. public synchronized void stopIt(){
  18.  setRunning(false);
  19.  LOG.info(Messages.getString("scan.ctrl.stopped" ));
  20. }
  21. }


Ca se fait ça, ou pas trop en fait ?
 
Enfin, quoi qu'il en soit, impossible de lancé le thread :

Code :
  1. if (!FolderScan.getInstance().isAlive()) {
  2. FolderScan.getInstance().start();
  3. }


Le isAlive() passe, mais le start tue le serveur sans message dans sysout ou syserr. J'ai testé avec JOnAS et WAS6.
 
edit: j'ai changé le titre, parce que j'ai testé ça comme code :

Code :
  1. public class ScanController extends DispatchAction {
  2. private boolean running;
  3. private Thread test = new Thread(){
  4.  public void run() {
  5.   while(running){
  6.    System.out.println("je tourne..." );
  7.   }
  8.  }
  9.  public synchronized void start() {
  10.   running = true;
  11.   super.start();
  12.  }
  13. };
  14. private Thread getFolderScan() {
  15.  return test;
  16. }
  17. public ActionForward start(ActionMapping mapping, ActionForm form,
  18.   HttpServletRequest request, HttpServletResponse response) throws Exception {
  19.  if (!getFolderScan().isAlive()) {
  20.   getFolderScan().start();
  21.  }
  22.  return mapping.findForward("scanCtrl" );
  23. }
  24. public ActionForward stop(ActionMapping mapping, ActionForm form,
  25.   HttpServletRequest request, HttpServletResponse response) throws Exception {
  26.  if (getFolderScan().isAlive()) {
  27.   running = false;
  28.  }
  29.  request.setAttribute("message", "scan.ctrl.stopped" );
  30.  return mapping.findForward("scanCtrl" );
  31. }
  32. }


 
donc du coup, je vois bien que c'est de faire des threads singletons qui fait merdoyer le truc... mais du coup, je vois pas trop comment gérer ce thread de scan... vais chercher...


Message édité par brisssou le 09-05-2006 à 11:46:43

---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
mood
Publicité
Posté le 09-05-2006 à 10:44:56  profilanswer
 

n°1362265
the real m​oins moins
Posté le 09-05-2006 à 12:14:23  profilanswer
 

tu ne "peux pas" créer de threads en j2ee. cfr la spec.
certains serveurs te laissent faire, pas tous.
une des solutions alternative c'est un ejb-timer (ejb2.1 je crois?) ou un mbean schedulé (ça je sais pas si ça existe en dehors de jboss, j'imagine que d'autres solutions propriétaires existent)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1362271
verdoux
And I'm still waiting
Posté le 09-05-2006 à 12:18:35  profilanswer
 

C'est bizarre que le serveur meurt, au mieux il doit créer le thread et ça ne posera pas de problème outre mesure (si ce n'est pas pour le rédéploiement à chaud), au pire le serveur devrait lever une exception à la création du thread.

n°1362318
brisssou
8-/
Posté le 09-05-2006 à 13:14:55  profilanswer
 

et pourtant... bon, ben je regarde du cotédes EJB alors... fait chier, j'y entrave que dal aux EJB... c'est l'occasion...


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
n°1362327
the real m​oins moins
Posté le 09-05-2006 à 13:26:51  profilanswer
 

kestufous sur un jonas ou was si tu fais que du web?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1362331
brisssou
8-/
Posté le 09-05-2006 à 13:33:37  profilanswer
 

s'pas moi que j'choisis les serveurs d'applications :o
 
chui plus struts/hibernate moi. Après, JCA, EJB, JMS, WebServices... j'ai pas encore pratiqué. Mais kekchoz me dit qiue ça va pas tarder...


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
n°1362408
brisssou
8-/
Posté le 09-05-2006 à 14:35:15  profilanswer
 

désolé de te demander ça, ne me jète pas tout de suite...
 
Mais en fait, je viens de chercher pas mal sous Google, et je trouve pas grand chose sur ejb-timer.... (et là, tu me sors une super recherche qui sort 500 miyons de résultats...). Et comme tu semblais dire que c'est une des solutions altérnatives, est-ce que tu pourrais me dire quelles seraient les autres ?
 
Ce que je voudrais, c'est un un thread  qui démarre avec l'application J2EE et qui donc scrute un répertoire (fais des trucs en somme, ça j'en ferai mon affaire, quand même). Si je peut avoir un contrôle sur on/off, c'est cool, mais pas indispensable.
 
Sinon, je pense regarde du coté des jobs scheduler, genre quartz...
 
merci de ton aide !


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
n°1362416
the real m​oins moins
Posté le 09-05-2006 à 14:40:29  profilanswer
 

* la spec dit que tu peux pas démarrer de thread toi même (pour la bonne et simple raison que les threads sont poolés par ton A.S et que si tu commences à créer tes propres threads, c'est la porte ouverte à toutes les fenêtres)
* http://www.google.com/search?q=ejb%20timer
* une des, parce que, comme dit, tu peux aussi scheduler l'execution d'mbeans (jmx donc) avec jboss (et peut-être d'autre)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1363573
Smanux
Posté le 10-05-2006 à 16:47:50  profilanswer
 

Pour le déploiement je te suggère de lancer et de stopper cette tache en utilisant un ServletContextListener.
 
Je demande à voir un serveur d'appli qui bloque l'exécution de threads, à mon avis t'emmerde pas avec des mbean/ejb ou autre et fais un truc simple avec un bon vieux thread des familles. Je pense que ce qui est déconseillé c'est de lancer un nouveau thread suite à une requete, dans une action Struts par exemple, parce que le serveur utilise généralement des ThreadLocale pour attacher des informations de contexte (une transaction par exemple) au Thread en cours. En démarrant un nouveau thread on perd ces informations ce qui peut vite poser problème. Mais là pour une simple tache de fond je vois pas de mal à lancer un Thread.


---------------
Commons Configuration - http://jakarta.apache.org/commons/configuration
n°1363600
the real m​oins moins
Posté le 10-05-2006 à 17:02:15  profilanswer
 

Smanux a écrit :

Je demande à voir un serveur d'appli qui bloque l'exécution de threads


serveur d'appli j2ee != moteur de servlet
c'est "interdit" par la spec ejb(ou j2ee, enfin), autorisé par la spec servlet; et comme il l'a mentionné il utilise (va savoir pourquoi) un serveur d'appli ejb complet ...

Message cité 1 fois
Message édité par the real moins moins le 10-05-2006 à 17:02:38

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
mood
Publicité
Posté le 10-05-2006 à 17:02:15  profilanswer
 

n°1363652
Smanux
Posté le 10-05-2006 à 17:49:32  profilanswer
 

S'il n'utilise que des servlets dans son serveur d'application complet je vois pas le problème non plus.


---------------
Commons Configuration - http://jakarta.apache.org/commons/configuration
n°1363662
the real m​oins moins
Posté le 10-05-2006 à 18:02:12  profilanswer
 

ben, le serveur aime pas [:el g]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1363729
sebi
Posté le 10-05-2006 à 19:04:09  profilanswer
 

Topic intéressant, en cherchant un peu je suis tombé sur ca Work Manager API :  
Comme le dit --  l'article raconte qu'il est déconseillé d'ouvrir un thread indépendant au sein de son serveur EE et qu'une alternative peut etre le work manager :
http://www.devx.com/Java/Article/28815
 
Quelqu'un connait ?


Message édité par sebi le 11-05-2006 à 11:39:55
n°1364022
brisssou
8-/
Posté le 11-05-2006 à 10:44:14  profilanswer
 

the real moins moins a écrit :

serveur d'appli j2ee != moteur de servlet
c'est "interdit" par la spec ejb(ou j2ee, enfin), autorisé par la spec servlet; et comme il l'a mentionné il utilise (va savoir pourquoi) un serveur d'appli ejb complet ...


 
euh... remarque peu constructive.  
chui pas décideur, mais juste développeur. spa moi qui choisit le serveur d'appli.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
n°1364132
the real m​oins moins
Posté le 11-05-2006 à 12:18:07  profilanswer
 

et ?  


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1364228
brisssou
8-/
Posté le 11-05-2006 à 14:48:31  profilanswer
 

et tout ça pour dire que quartz fait ce que je veut


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Threads sur un serveur J2EE ? Thread en tant que Singleton?

 

Sujets relatifs
Ouvrir une URL à partir du serveur web (apache) !Ajax : Récupérer un flux XML coté serveur
j'arrive pas à creer mon threadDécrypter un dialogue serveur/client
IIS PB serveurserveur de message smtp et pop3
[Batch] script executé par serveur pour systeme de backupquestion à propos de J2EE, JDK, JSC, NetBeansIDE, JSA....
Cherche docs/info sur threads.htaccess serveur windows
Plus de sujets relatifs à : Threads sur un serveur J2EE ? Thread en tant que Singleton?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR