Précédent   Forum du club des développeurs et IT Pro > Java > Serveurs, conteneurs, et Java EE > Java EE
Java EE Forum d'entraide sur la norme Java EE (EJB, JMS, etc.). Avant de poster -> FAQ Java EE
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 19/11/2012, 11h44   #1
ekremyilmaz
Membre régulier
 
Inscription : juillet 2007
Messages : 341
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 341
Points : 74
Points : 74
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 :
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.
ekremyilmaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2012, 18h45   #2
ekremyilmaz
Membre régulier
 
Inscription : juillet 2007
Messages : 341
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 341
Points : 74
Points : 74
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 :
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 :
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.
ekremyilmaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2012, 21h01   #3
ekremyilmaz
Membre régulier
 
Inscription : juillet 2007
Messages : 341
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 341
Points : 74
Points : 74
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é.
ekremyilmaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 20h44.


 
 
 
 
Partenaires

Hébergement Web