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

Weblogic Java Discussion :

Probleme récurrent, threads/EJB/Servlets


Sujet :

Weblogic Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 137
    Par défaut Probleme récurrent, threads/EJB/Servlets
    Bonjour,

    Je viens parler d'un probleme que je vois partout dans les forum disponible sur la toile !

    Est-ce vrai que nous ne pouvons pas exécuter de thread a partir d'un EJB ? (ça je crois comprendre qu'en effet, c'est pas possible) MAIS SURTOUT si on ne peu pas, peut-on en créer et en exécuter dans une serlvet ?

    Cette deuxième question est souvent posée, mais a toujours des réponses différentes qui ne me satisfont pas...

    Soit on peut le faire, donc, c'est cool, soit on peut pas et dans ces cas la, aucunes solutions alternative n'est proposée...

    J'aimerais donc, une fois pour toute, avoir une réponse sur ce probleme car il me faut des threads à partir d'une servlet !!!

    MERCI BEAUCOUP A QUI POURRA ME REPONDRE !!!!

  2. #2
    Membre confirmé Avatar de austin P.
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Par défaut
    pour etre clair techniquement tu peux le faire : en effet rien ne t'empeche de lancer un thread.
    C'est plutot en terme de conception que cela pose un probleme : en effet c'est le container qui gere le cycle de vie des objets et tu transgresse ce principe en créant des threads.

    En effet que devient ta poigné sur ton thread lorsque ton ejb est passivé ? et meme si tu ne garde pas de poignée sur ton thread tu peux avoir potentiellement un ensemble de thread que le container ne peut gérer. En plus si je dis pas de betise, le container doit utiliser des ThreadLocal et cela peut etre problematique.

    J'ai moi meme fais le test de créer des threads et cela fonctionne, cependant je te deconseille d'appeler des EJB depuis ces threads pour les raisons évoqués précedemment.

    pose toi la question de l'interet des threads avant tout : ne peut tu pas faire autrement ?

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 137
    Par défaut
    En fait, j'ai plein d'ejb qui se connecte chacun a une base différente et renvoi des données...

    Le but est de créer un thread par EJB dans la servlet, chaque EJB retourne alors les réponses qui sont concaténés dans la servlet. Ceci permet de ne pas attendre et cumuler tous les temps d'attente de chaque base !

    Si il y a 1 seconde d'attente de connection a une base et que je fais 100 demande, je vais avoir 100 seconde d'attente, si je fait des demandes en parallele, les temps d'attente se s'additionneront plus. Mais comment puis-je faire sous weblo... On m'a parlé d'RMI, croyez vous que ça peut m'aider ??!!

    Merci beaucoup !

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 137
    Par défaut
    Je précise qu'en fait, les thread ont une durée de vie relativement courte... Il interroge la base et retourne des info, point !!!

    Donc, la fonction run() s'exécute très vite, et quand elle se termine, elle kill le thread en principe !! Donc, il ne devrait pas y avoir de probleme !! Enfin, je prefere quand meme avoir l'avis d'expert !!

  5. #5
    Membre confirmé Avatar de austin P.
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Par défaut
    dans ce cas utilise plutot des EJB MDB. Ce sont des ejb asynchrones qui utilisent des files d'attentes jms.

    Dans ton cas il suffit d'interroger un ejb session qui va exploser ta requete en plusieurs appel mdb. comme c'est asynchrone ta servlet recoit le retour de l'ejb avant meme que le travail soit terminé. Il suffit que ta servlet se redirige vers une queue JMS et attende le résultat. Pendant ce temps ton ejb session explose la requete vers plusieurs mdb qui lui répondent en retour aussi par jms et une fois que tout le travail est terminé il envoie le résultat dans une file JMS au bout de laquelle attend la servlet.

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 137
    Par défaut
    Oulala !!

    Comme on dis chez moi, "c'est prendre une pelleteuse pour arracher une marguerite" non ???

    JMS, ça implique un serveur JMS qui n'est pas forcément des plus rapide !! Et si j'ai 100 clients de connectent en meme temps !!

    Je pense que l'idée des threads n'est pas mauvaise, j'aimerais juste savoir comment et ou les exécuter !!! Mais je vais quand meme voir plus d'info sur ces EJB MDB, tu as un liens qui explique bien tout ça ??? (en français, si possible, sinon, anglais)

    Merci encore en tout cas !

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 137
    Par défaut
    Bonjour,

    je répond a ma question pour que cela puisse servir a d'autre !!
    (Par cotnre, c'est ce que j'ai compris, ça serait cool de me corriger si je dit une c.......)

    La question d'origine était : Est-ce vrai que nous ne pouvons pas exécuter de thread a partir d'un EJB ? (ça je crois comprendre qu'en effet, c'est pas possible) MAIS SURTOUT si on ne peu pas, peut-on en créer et en exécuter dans une serlvet ?

    Dans l'EJB, clairement : NON, c'est dit dans la spec :

    "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. These functions are reserved for the EJB Container. Allowing the enterprise bean to manage threads would decrease the Container's ability to properly manage the runtime environment.”

    ça, c'est clair !!

    Pour la servlet, c'est déconseillé dans le sens ou les servlet ne sont pas "thread safe". En fait, cela vient de leur mode d'éxécution (un thread par méthode service() mais une seul instance). Donc cela peu poser probleme dans la gestion des threads, mais pour des threads court et bien géré, il n'y a aucune interdiction... Voila voila ce que j'ai compris !!

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

Discussions similaires

  1. Probleme de threads et de pipes
    Par Marc san dans le forum C
    Réponses: 7
    Dernier message: 22/02/2006, 21h32
  2. Probleme de threads
    Par cryptorchild dans le forum Langage
    Réponses: 7
    Dernier message: 02/02/2006, 02h27
  3. Problème de threads avec pthread_create
    Par 180degrés dans le forum Linux
    Réponses: 6
    Dernier message: 19/12/2005, 12h07
  4. Probleme fermeture Thread
    Par Raton dans le forum MFC
    Réponses: 4
    Dernier message: 29/09/2005, 09h51
  5. [Kylix] Problème de thread
    Par moltov dans le forum EDI
    Réponses: 1
    Dernier message: 22/06/2005, 13h28

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