3

我们可以在来自不同 ejb-jar 的 ejb-jar 中使用基于注释的拦截器吗?我使用@Logged 示例进行了尝试,但还是坚持了下来。有人可以帮帮我吗?

在 core.jar 中:

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

@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();
    }
}

问题是:如何从另一个 ejb-jar(在企业应用程序中)使用这个拦截器?例如:记录业务方法调用,其中方法可以在不同的模块中找到:

模块1.jar:

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

我也尝试将 <interceptor><class..... 放到 beans.xml 中,但它对我不起作用。

感谢您的任何建议!

4

2 回答 2

2

这绝对应该有效,即使我记得我在 JBoss 6 上摆弄了很多。

您将必须在beans.xml定义它的 JAR 中激活拦截器,我认为EAR 部署存在问题,但那是很久以前的事了,我无法再访问源代码了。

如果这不起作用 - 玩beans.xml两个 JAR 中的激活。尝试查询BeanManager是否注册了拦截器。

于 2012-06-12T12:15:49.177 回答
2

我在 JBoss 7 上的日志拦截器遇到了完全相同的问题,并通过将完整的拦截器的 jar覆盖到应用程序中来修复它。

<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>

您仍然必须在应用程序的breans.xml.

不好,但它的工作原理。在 Java EE 7 中,它通过将拦截器注释为@Priority.

于 2014-04-27T20:57:22.510 回答