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 :

JMS / Traitements en parallèle [EJB MDB]


Sujet :

Java EE

  1. #1
    Membre confirmé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 50
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 114
    Par défaut JMS / Traitements en parallèle
    Bonjour,
    Je souhaite utiliser JMS pour effectuer des traitements longs en parallèle. Savez comment paramétrer mon MDB pour que je puisse lancer maxi 5 traitements (méthode onMessage) en parallèle et que les autres messages restent dans la queue jusqu'à la fin d'un traitement ?
    Dois je implémenter moi même le mécanisme ?

    Pour info j'utilise JBoss 4.3.

  2. #2
    Membre confirmé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 50
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 114
    Par défaut
    J'aurais peut dû poser ma question sur le forum JBoss. J'ai trouvé la réponse toute seule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @ActivationConfigProperty(propertyName="maxSession", propertyValue="5")

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2008
    Messages : 39
    Par défaut Renseignement
    Salut je cherche à créer un EJB MDB qui me lance des batch en fonction des messages reçu dans le Topic JMS.
    Je ne sais pas trop comment m'y prendre !
    Pourrais tu me renseigner ?
    Merci.

  4. #4
    Membre confirmé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 50
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 114
    Par défaut
    Bonjour, voici un exemple avec une file (il suffit de changer les annotations pour un Topic).

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    @MessageDriven(activationConfig = {
    		@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/aipa/tts"),
    		@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
    		@ActivationConfigProperty(propertyName = "maxSession", propertyValue = "5") })
    /**
     * La gestion des transactions n'est pas laissée au container à cause d'un
     * problème de timeout de transaction pendant le process de vocalisation qui
     * peut être très long et les timeout du gestionnaire de transaction de JBoss 
     * claquent
     */
    @TransactionManagement(TransactionManagementType.BEAN)
    public class TTSJobMDB implements MessageListener {
     
     
           ...
     
            /**
             * Implémentation de {@link MessageListener} <br>
             * Ordre de vocalisation
             */
    	public void onMessage(Message message) {
    		try {
    			final Long ttstextid = message.getLongProperty("textid");
    			mLogger.debug("onMessage, ttstextid=" + ttstextid);
    			if (null != ttstextid) {
    				try {
    					performTTS(ttstextid);
    				} catch (Exception e) {
     
    					mLogger.error("onMessage ERROR", e);
    				}
    			}
    		} catch (Exception e) {
    			mLogger.warn("onMessage, error ", e);
    		} finally {
     
    		}
    	}
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2008
    Messages : 39
    Par défaut Merci
    Merci bcp.
    je suis arrivé a faire ce que je voulais.

  6. #6
    Candidat au Club
    Inscrit en
    Octobre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 3
    Par défaut
    Bonjour,

    J'ai un pb un peu similaire (traitement long à déclencher sur réception d'un message)...J'ai essayé de positionner le timeout sur les transactions (annot JBoss) mais ça ne semble pas fonctionner...

    Je me pose la question a propos des transactions de type 'BMT' car dans mon traitement, j'ai plusieurs méthodes qui font de la lecture/ecriture en BD (via hibernate) et il semblerait que la session hibernate expire (liée à la transaction courante ?)...

    D'avance merci

  7. #7
    Membre confirmé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 50
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 114
    Par défaut
    Ma solution a été de gérer "manuellement" les transactions, de libérer avant le traitement long pour reprendre de suite après.
    Je ne suis pas certaine que ce soit la bonne solution ... mais après avoir tout essayer avec les annotations pour allonger les timeout de transaction, je ne voyais pas quoi faire d'autre.

    Depuis je suis tombée là dessus : http://docs.jboss.org/ejb3/app-serve...xtensions.html, paragraphe 5.3, où JBoss propose une solution pour lancer des traitements lourd en asynchrone, mais rien est dit sur les transactions ... Je n'ai pas essayé mais c'est peut-être une autre piste.

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

Discussions similaires

  1. une méthode qui fait deux traitement en parallèle
    Par cyclopsnet dans le forum Langage
    Réponses: 26
    Dernier message: 21/10/2010, 16h02
  2. Réponses: 2
    Dernier message: 22/05/2010, 02h23
  3. DBMS_JOB - Traitement en parallèle
    Par nathieb dans le forum PL/SQL
    Réponses: 1
    Dernier message: 03/12/2008, 11h22
  4. traitement en parallèle
    Par qdqdfqfdqdxcwcrzsdfw dans le forum Struts 1
    Réponses: 4
    Dernier message: 16/05/2007, 15h50
  5. Réponses: 7
    Dernier message: 04/09/2006, 14h17

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