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 :

AOP Dans un block try catch


Sujet :

Java EE

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut AOP Dans un block try catch
    Bonjour,

    J'ai plusieurs méthodes qui redéfinisse onMessage de la classe javax.jms.MessageListener

    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
     
     
    public void onMessage(Message msg) {
          TextMessage message = (TextMessage) msg;
          int JMSXDeliveryCount = 0;
     
            try {
     
          	JMSXDeliveryCount = message.getIntProperty("JMSXDeliveryCount");
    	//ici méthode qui traite le message
    	}
           catch (Exception e) {
               //j'aimerai injecter le code sql ici pour insérer en base le message
               //mais uniquement si le nombre de tentative est supérieur à N.
            }
    J'ai un block try catch (Exception e) dans chaque méthode onMessage.

    J'aimerai injecter un bout de code avec l'aop dans le block Exception.

    Dans cette méthode, si au bout de n tentatives, le message n'a pas pu être traité, je dois insérer en base le message et le consommer pour éviter de bloquer la file.

    J'aimerai le faire en AOP, comment faire ? je n'arrive pas à voir comment ?

    Juste pour info, c'est pas au niveau de la mise en place de l'AOP qui me gène pb, mais plus au niveau du pointcut, je ne sais pas comment faire pour lui indiquer que c'est au niveau du catch

    merci d'avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut
    en fait, j'ai modifié mon code en ajoutant un throw Exception dans la signature de la méthode onMessage.

    ça fonctionne bien pour le moment.

    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
    @MessageDriven(name = "ServiceMetier", messageListenerInterface = MessageListener.class, activationConfig = {
    	@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
    	@ActivationConfigProperty(propertyName = "destinationName", propertyValue = "jms/nomQueue) })
    public class ServiceMetier{
    	@Resource
    	private MessageDrivenContext context;
     
    	public MessageDrivenContext getContext() {
    		return this.context;
    	}
     
     
    	public void onMessage(Message message) throws Exception {
                        JaxbService.unmarshall() etc...
     
    	}
    }
    Ensuite dans mon code AOP, dans la méthode afterThrowingMethod, je récupère bien le message et le contexte.

    Or ce que j'aimerai aussi (en plus de l'enregistrement en base du message, c'est consommer le message... et j'ai utilisé context.getUserTransaction().commit, mais j'obtiens une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Method Not Allowed Exception: See Message-drive Bean Component Contract section of the applicable EJB Specification.
    .

    Sauriez-vous comment faire pour consommer ce message et qu'il ne soit plus dans la file d'attente.

    Pour info, j'injecte un message bidon "ex toto" pour obtenir une exception et ainsi enregistrer ce message en base. Mais mon problème est la consommation du message. Je ne veux plus qu'il apparaisse dans la file d'attente.

    Merci d'avance.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut
    finalement, j'ai rajouté un try catch dans la méthode onMessage.

    Puis dans l'aop, je teste si j'ai une exception, si oui, j'enregistre en base.

    et à la fin le commit est effectué automatiquement et le message est donc consommé.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 06/10/2010, 17h06
  2. Faire un return dans un bloc try catch
    Par alizee971 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 13/08/2008, 19h38
  3. Problème try-catch dans mon code
    Par little pepito dans le forum Langage
    Réponses: 7
    Dernier message: 11/06/2007, 12h22
  4. Try catch dans une dll - possible ?
    Par Pendary dans le forum C++Builder
    Réponses: 1
    Dernier message: 02/03/2007, 16h48
  5. Réponses: 3
    Dernier message: 12/12/2006, 18h58

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