Estoy construyendo una aplicación Java EE usando JBoss 7.1.Interceptores Java EE y @ViewScoped bean
Para obtener una auditoría completa de las acciones del usuario, estoy planeando usar Interceptores para registrar cada invocación de los métodos de mis beans.
para hacerlo tengo el siguiente biding:
@Inherited
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Logged {
}
Luego defino mi clase interceptor:
@Logged
@Interceptor
public class UserActionInterceptor implements Serializable {
private static final long serialVersionUID = 1L;
private Logger log = LoggerFactory.getLogger(UserActionInterceptor.class);
public UserActionInterceptor() {
}
@AroundInvoke
public Object logMethodEntry(InvocationContext invocationContext) throws Exception {
log.debug(invocationContext.getMethod().getName() + " invoked.");
return invocationContext.proceed();
}
}
bien hasta ahora esto está funcionando. Si enlace una clase usando este Interceptor, obtengo un poco de registro. Sin embargo, se vuelve más complicado cuando quiero orientar mis clases de frijoles.
Si tengo un bean del tipo @RequestScoped y lo ato a mi interceptor, funciona. Sin embargo, si tengo un bean de tipo @ViewScoped, entonces no es.
busqué la definición de @ViewScoped y me encontré:
@Retention(value=RUNTIME)
@Target(value=TYPE)
@Inherited
public @interface ViewScoped
tengo la sensación de que el problema radica en el hecho de que esta anotación no tiene el método del tipo de destino y que impide que mi interceptor intercepte llamadas a los métodos de clase.
¿Alguien ha tenido el mismo problema anteriormente? ¿Alguien sabe si es posible ampliar el alcance del bean para que sus métodos puedan ser interceptados sin cambiar la naturaleza de @ViewScoped?