IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Thread,scheduler dans un j2EE?


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2002
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 30
    Par défaut Thread,scheduler dans un j2EE?
    Bonjour, j'ai un probleme qui est nouveau pour moi en j2EE, je voudrais le partager avec vous pour avoir vos idées lumineuses.

    J'ai créé une sorte de chat room en j2ee (ressemblant un peu a de l'irc mais avec un seul salon), les gens se connectent directement avec leur login. Chaque personne vois la liste des gens presents sur le salon.
    Lorsqu'un utilisateur se deconnecte la liste des utilisateurs devrait avoir le nom de cette personne s'effacer (equivalent du ping timeout). Comme je ne peux pas recuperer d'action sur la fermeture de sa fenetre, la deconnection ou n'importe quelle autre facon de partir d'une personne qui etait dans la room, je me trouve a chercher une solution pour inspecter regulierement depuis quand telle ou telle personne n'a rien demandé au serveur afin de les "dégager" de la liste les deconnectés.

    Coté client j'ai un ajax qui interoge regulierement le serveur pour mettre a jour le chat, coté serveur je stock en meme temps la derniere fois que chaque utilisateur a demandé une mise a jour du chat. Il me suffit donc de regarder si ca fait par exemple 3 minutes que la personne a rien demandé, si c'est le ca c'est qu'il est deconnecté.
    Mon probleme reste seuleument sur comment lancer cette inspection a intervalle regulié sur ma liste des connectés d'un salon?
    Une solution simple serait que je le fasse a chaque requete de rafraichissement du salon, mais je trouve ca lourd et inadequate.
    J'ai lu sur internet qu'on ne devait pas gerer nos propres threads en j2EE...
    J'ai decouvert quartz aussi mais je me demande comment lui donner les objets stockés dans le contexte, c.a.d ce que je dispose dans une servlet mais qui serait aussi disponible dans le thread.

    Voila j'espere avoir plus ou moins assez clair!! N'hesitez pas pour les questions.

  2. #2
    Membre expérimenté Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Par défaut
    J'ai lu sur internet qu'on ne devait pas gerer nos propres threads en j2EE...
    Ah bon ?
    Et pourquoi pas ?
    Ton problème ne me semble pas très complexe...
    Je ne vois pas en quoi le lancement d'un petit thread serait problématique...

  3. #3
    Membre averti
    Inscrit en
    Août 2002
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 30
    Par défaut
    C'est dans les specifications j2EE. En meme temps je suis pas trop là pour discuter des specs, de plus je lancerais qu'un seul thread au niveau du demarrage du serveur qui inspecte tous les chats donc spec ou pas ca me derange pas si ca marche quand meme...
    Par contre dans mon thread je dois avoir le ServletContext d'accessible pour inspecter regulierement mes chats qui sont dans une hashMap du servletContext, comment je lui passe ca a mon thread?

  4. #4
    Membre expérimenté Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Par défaut
    C'est dans les specifications j2EE.
    Ah bon ?
    Pourrais-tu me donner le lien du site où tu as lu ça (sans remettre en cause ce que tu dis) ?
    Si je demande ça, c'est parce que j'utilise souvent des threads dans mes applications J2EE et je ne vois pas en quoi c'est problématique dans le cadre d'un développement web (pour autant que les threads soient correctement gérés).
    Par contre dans mon thread je dois avoir le ServletContext d'accessible pour inspecter regulierement mes chats qui sont dans une hashMap du servletContext, comment je lui passe ca a mon thread?
    Si j'étais toi, je ne passerais pas ton servletContext mais bien directement une référence vers la hashMap que tu places dans ton servletContext.
    Tu éviteras ainsi d'utiliser dans ton thread (et donc dans ta couche business) des éléments propres aux servlets (et donc à ta couche web).

  5. #5
    Membre averti
    Inscrit en
    Août 2002
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 30
    Par défaut
    Citation Envoyé par aJavaDeveloper
    Ah bon ?
    Pourrais-tu me donner le lien du site où tu as lu ça (sans remettre en cause ce que tu dis) ?
    Si je demande ça, c'est parce que j'utilise souvent des threads dans mes applications J2EE et je ne vois pas en quoi c'est problématique dans le cadre d'un développement web (pour autant que les threads soient correctement gérés).
    J'ai vu ca un peu partout sur les dicussions et blogs en cherchant une solution a mon probleme, du coup j'ai voulu me renseigner aussi et j'ai trouvé une discussion serieuse ici : http://blog.w1c.ca/?p=92
    En particulier à la fin on a :

    “The EJB 2.0 and 2.1 specifications prohibit an EJB from managing threads. This includes starting, stopping, suspending and resuming threads.

    EJB 2.0, Section 24.1.2 and EJB 2.1, Section 25.1.2 state the following:

    Programming Restrictions
    The enterprise bean must not attempt to manage threads. The enterprise bean must not attempt to start, stop, suspend, or resume a thread; or to change a thread’s priority or name. The enterprise bean must not attempt to manage thread groups.

    For a servlet, the J2EE 1.3 and 1.4 specifications allow web components to create and manage threads, however, the execution and behavior of these threads must be tightly monitored by the application, not the application server. The specifications state the following:

    J2EE 1.3 and J2EE 1.4:
    J2EE.4.2.1.1 Transaction Requirements
    If a web component creates a thread, the J2EE platform must ensure that the newly created thread is not associated with any JTA transaction.

    J2EE.4.2.3 Transactions and Threads
    JTA transactions should be started and completed in the thread in which the service method is called. Additional threads that are created for any purpose should not attempt to start JTA transactions.”
    Je ne suis pas tres forte en anglais mais je pense que c'est moins restreint que ce les gens disent non?

    Sinon pour mon thread je vais passer la hashMap qui contient les variables qui sont modifiés en cours d'execution du serveur, je vais voir ce que ca donne.

  6. #6
    Membre expérimenté Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Par défaut
    Merci pour ta référence.
    Apparemment, l'utilisation des threads est prohibée lorsque tu utilises des EJB.
    Comme je n'ai jamais utilisé d'EJB, je ne le savais pas .
    Pour ce qui est des servlets, l'utilisation de threads ne semble poser aucun problème pour autant
    • qu'ils soient correctement gérés par l'application
    • qu'ils ne soient pas associés à des transactions JTA

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Thread] Blocage dans mon programme
    Par Xo Sonic oX dans le forum EDT/SwingWorker
    Réponses: 4
    Dernier message: 18/06/2005, 17h12
  2. [Thread] DB dans un thread
    Par Pedro dans le forum Bases de données
    Réponses: 5
    Dernier message: 02/06/2005, 13h14
  3. [Thread] Recherche dans une BDD
    Par Pedro dans le forum Bases de données
    Réponses: 3
    Dernier message: 04/05/2005, 14h03
  4. [Thread] Erreur dans une classe interne
    Par totof2308 dans le forum Général Java
    Réponses: 5
    Dernier message: 03/06/2004, 08h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo