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

Java EE Discussion :

Threads et Java EE


Sujet :

Java EE

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 87
    Par défaut Threads et Java EE
    Bonjour,

    J'ai un problème avec mon application Java EE déployée sur un serveur glassfish 3.0.1. Le but de l'application est d'executer différentes actions regroupées en liste dans des entités.

    En gros j'ai un EntityBean entite qui contien une liste d'actions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @Entity
    public class Entite implements Serializable {
        ...
        @OneToMany(mappedBy="entite", cascade = CascadeType.ALL)
        private List<Action> actionList = new ArrayList<Action>();
        ...
    }
    Pour pouvoir exécuter les actions de plusieurs entités en même temps je démarre un thread pour chaque liste d'action à exécuter:

    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
    @Override
    public void run() {
     
        for (Action action : entite.getActionList()) {
            // exécution de l'action...
     
            // Wait the needed time after action execution.
            try {
                Thread.sleep(action.getWaitDelay() * 1000);
            } catch (InterruptedException ex) {
                logger.log(Level.SEVERE, null, ex);
            }
        }
     
        // Callback pour notifier le session bean de la fin de l'execution.
        entiteSessionBean.entiteExecuted(entite);
     
    }
    Les threads sont lancés par un Stateless session bean qui est notifié a la fin de l'exécution des actions de chaque entité. A ce moment la il "persist" l'entité pour modifier sont état à "exécutée".

    Lorsque j'exécute les actions de plusieurs entités à la fois mon application deviens instable et ne réponds plus aux requêtes du front.

    Est-ce que ma démarche vous semble correcte?
    Est que l'exécution de plusieurs threads accedant à des entity beans et a un session beans est une chose qui se fait bien en Java EE?
    Avez-vous une piste qui pourrait me mettre sur la voie de mon problème?

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Si tu veux faire de l'asynchrone, il te faut regarder du côté des message driven bean.

    Il est déconseillé d'utiliser des threads dans une application J2EE.

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fr1man Voir le message
    Il est déconseillé d'utiliser des threads dans une application J2EE.
    Plutôt dans les EJB... JEE, c'est vaste...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Oui, mais je pensais également aux servlets, jsp etc...

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fr1man Voir le message
    Oui, mais je pensais également aux servlets, jsp etc...
    Mauvais exemples... les servlets (et donc les jsp) sont multi-thread
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Ce n'est pas du tout ce que je dis.
    Je dis qu'il n'est pas conseillé d'utiliser de nouveaux threads pour effectuer des tâches asynchrones. On a plus aucun moyen de gérer les montés en charges à partir du serveur d'application, d'où l'utilisation de MDB.

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 87
    Par défaut
    Citation Envoyé par fr1man Voir le message
    Si tu veux faire de l'asynchrone, il te faut regarder du côté des message driven bean.

    Il est déconseillé d'utiliser des threads dans une application J2EE.
    Merci pour l'information, je vais banir les threads de mon application.

    Je viens de trouver l'interface WorkManager qui semble être une alternative aux MDB. Qu'en pensez vous? Connaissez vous un moyen d'utiliser cette interface avec Glassfish?

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par piemur2000 Voir le message
    Merci pour l'information, je vais banir les threads de mon application.

    Je viens de trouver l'interface WorkManager qui semble être une alternative aux MDB. Qu'en pensez vous? Connaissez vous un moyen d'utiliser cette interface avec Glassfish?
    Si tu cherches à exécuter des actions de manière asynchrone et/ou planifiées, tu peux également utiliser Quartz.

    Ceci dit, si l'aspect performance est important, je te suggère tout de même les MDB... comme le propose fr1man...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Exception in thread main ! (Java+MySQL)
    Par condor_01 dans le forum Général Java
    Réponses: 12
    Dernier message: 24/04/2008, 09h25
  2. thread en java
    Par tarik1099 dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 22/05/2007, 23h35
  3. probleme avec thread en java
    Par manelinfo dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 20/05/2007, 18h27
  4. Suppression et lancement d'un thread en java
    Par noutnout53 dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 13/03/2006, 11h05
  5. Exception in thread "main" java.lang.ArrayIndexOut
    Par Poseidon62 dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 04/11/2005, 01h38

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