CDI - usando la clase de interceptor de la biblioteca

¿Podemos usar un interceptor basado en anotaciones en ejb-jar desde un ejb-jar diferente? Lo probé con el ejemplo de @Logged, pero me quedé con él. alguien me puede ayudar?

En core.jar:

@Inherited
@InterceptorBinding
@Retention(RUNTIME)
@Target({METHOD, TYPE})
public @interface Logged {}

and

@Logged
@Interceptor
public class LoggedInterceptor implements Serializable {

    private static final long serialVersionUID = 1L;

    public LoggedInterceptor() {
    }

    @AroundInvoke
    public Object logMethodEntry(InvocationContext invocationContext)
            throws Exception {
        System.out.println("Entering method: "
            + invocationContext.getMethod().getName() + " in class "
            + invocationContext.getMethod().getDeclaringClass().getName());

        return invocationContext.proceed();
    }
}

La pregunta es: ¿cómo usar este interceptor desde otro ejb-jar (dentro de una aplicación empresarial)? Por ejemplo: registro de llamadas de métodos comerciales, donde los métodos se pueden encontrar en diferentes módulos:

módulo1.jar:

public class ModuleClass{
    @Logged public void doSomething(){...}
}

he tratado de poner

Gracias por cualquier consejo!

preguntado el 12 de junio de 12 a las 12:06

2 Respuestas

Eso definitivamente debería funcionar, aunque recuerdo que jugué bastante con JBoss 6.

Tendrás que activar el interceptor en el beans.xml del JAR donde está definido, y yo pensar hubo un problema con las implementaciones de EAR, pero eso fue hace bastante tiempo y ya no tengo acceso al código fuente.

Si eso no funciona, juegue con la activación en el beans.xml en ambos JAR. Trate de consultar el BeanManager si el interceptor está registrado.

Respondido el 12 de junio de 12 a las 13:06

Gracias por la ayuda, pero descubrí en JIRA de Glassfish que esta es una "característica" y se solucionará solo en v4 (se omite v3.2). java.net/jira/browse/GLASSFISH-15119 - user1451106

Tuve exactamente el mismo problema con mi interceptor de registro en JBoss 7 y lo arregló por superposición el tarro del interceptor completo en la aplicación.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <overlays>
                    <overlay>
                        <groupId>com.github.t1</groupId>
                        <artifactId>logging-interceptor</artifactId>
                        <type>jar</type>
                        <targetPath>WEB-INF/classes</targetPath>
                    </overlay>
                </overlays>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>com.github.t1</groupId>
        <artifactId>logging-interceptor</artifactId>
        <version>1.1</version>
        <optional>true</optional>
    </dependency>
</dependencies>

Aún tendrá que activar el interceptor en la aplicación breans.xml.

No es agradable, pero funciona. En Java EE 7, funciona sin la activación anotando el interceptor como @Priority.

Respondido 27 Abr '14, 21:04

La @Priority la anotación solucionó mi problema. Gracias :) - zaerymoghaddam

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.