4 votes

L'intercepteur AroundInvoke sur une méthode annotée @Timeout ne fonctionne pas

Serveur d'application : JBOss 4.2

J'ai une méthode que je veux intercepter, une méthode annotée @Timeout et invoquée par l'instance javax.ejb.TimerService.

La signature de la méthode :

@Stateless
class A 
        @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    @Timeout
        @Interceptors(AnInterceptor.class)
    public void doSomething(Timer timer)...

J'ai maintenant la classe d'intercepteur :

public class AnInterceptor {
       @AroundInvoke
       public Object intercept(InvocationContext ic) throws Exception{...
        System.out.prin(...)

Cela fonctionne avec d'autres méthodes (qui ne sont pas annotées avec @Timeout)

Merci, Rod

1voto

bkail Points 16610

Selon la spécification, AroundInvoke n'est pas supporté pour les méthodes de timeout (interface métier, interface de composant et point d'extrémité de webservice uniquement). En cherchant sur Google, AroundTimeout semble arriver dans EJB 3.1 (pages 12 et 22) :

http://www.ow2.org/xwiki/bin/download/Events2009AnnualConference/Program/JavaEE6-EasyBeans-F-Benoit.pdf

En attendant, vous pouvez contourner le problème en injectant une référence au même haricot dans lui-même. En d'autres termes, injectez (ou consultez) un autre "A" à l'intérieur de "A", puis créez et invoquez une nouvelle méthode "doTimeout" à partir de votre méthode "doSomething".

1voto

gus3001 Points 51

Au lieu d'utiliser @AroundInvoke Essayez d'utiliser @AroundTimeout

"Les intercepteurs des méthodes de temporisation du service EJB timer peuvent être définis à l'aide de l'annotation @AroundTimeout sur les méthodes de la classe cible ou d'une classe d'intercepteurs. Une seule méthode @AroundTimeout par classe est autorisée."

Vous pouvez voir ici comment l'utiliser, dans la section "Interception des événements de délai d'attente" http://docs.oracle.com/javaee/6/tutorial/doc/gkedm.html#gkedu

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X