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 (エンタープライズ アプリケーション内) からこのインターセプターを使用する方法です。例: ビジネス メソッドの呼び出しをログに記録します。メソッドはさまざまなモジュールで見つけることができます。

module1.jar:

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

<interceptor><class..... をbeans.xmlにも入れようとしましたが、うまくいきません。

アドバイスをありがとう!

4

2 に答える 2

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 に答える
2

JBoss 6 をかなりいじったことを思い出しても、これは間違いなく機能するはずです。

beans.xml定義されている JAR でインターセプターをアクティブ化する必要があります。EAR の展開に問題があったと思いますが、それはかなり前のことであり、ソース コードにはもうアクセスできません。

beans.xmlそれが機能しない場合は、両方の JAR でアクティベーションを試してください。インターセプターが登録されている場合は、 BeanManagerを照会してみてください。

于 2012-06-12T12:15:49.177 に答える