3

JMS に最初のショットを与えて、注入しようとすると@Resource(lookup="jms/ConnectionFactory")、次のエラーが発生します。

注釈型 Resource の属性ルックアップは未定義です

Java ee 6 @Resource アノテーションの使用方法を読んだばかりですが、Maven をまだ勉強していないので、Maven を使用するのではなく、他の方法でこの問題を修正できるかどうか疑問に思っていました。

ちなみにEclipseを使っています。

4

3 に答える 3

1

Java EE 6 開発者が遭遇する一般的な問題の 1 つは、JDK 組み込みの @javax.annotation.Resource と競合する @Resource アノテーションの使用です。ここでは、Eclipse と Maven でコンパイルの問題を解決する方法を示します。

Java EE 6 に含まれる @Resource アノテーションを見ると、lookup 属性が含まれています。残念ながら、前述したように、JDK 自体は、この属性を持たない独自のバージョンの @javax.annotation.Resource を出荷しています。これにより、Eclipse または Maven を使用している場合、コンパイルの問題が発生します。

public class MyCache {
    @Resource(lookup="java:jboss/infinispan/container/cluster")
    private CacheContainer container;
}

[ERROR] symbol : method lookup() [ERROR] location: @interface javax.annotation.Resource Eclipse 環境で問題を解決するのは非常に簡単です: @Resource アノテーションの JBoss EE 6 実装を追加するだけです - AND - JDK ライブラリの前に置く

@resource maven lookup JBoss ライブラリは、AS 7 リリースおよび jboss-annotations-api_1.1_spec-1.0.1 では、jboss-annotations-api_1.1_spec-1.0.0.Final.jar (またはそのようなもの) という名前にする必要があります。 EAP 6 の Final-redhat-2.jar

Maven でコンパイルしている場合、この問題を解決する最も簡単な方法は、注釈 JAR ライブラリを JDK の承認されたディレクトリに追加して、デフォルトの @Resource 実装をオーバーライドすることです。

アノテーション JAR は、JDK ディストリビューションの JAVA_HOME/jre/lib/endorsed にコピーする必要があります。

別の方法として、-Djava.endorsed.dirs を JVM パラメーターに渡すことができます。これは、次の Eclipse からの Maven ビルドに示されています。

于 2015-04-20T12:46:24.860 に答える
1

mappingName 属性を次のように使用してみてください。

@Resource(mappedName="jms/ConnectionFactory")

また、引き続きルックアップを使用する場合は、使用している javax.annotation.jar を確認してください。Lookup 属性は JavaEE 6 で導入されました。おそらく古いバージョンを使用しています。

于 2013-08-02T13:54:30.577 に答える