给 JMS 第一次尝试,当我尝试注入时@Resource(lookup="jms/ConnectionFactory")
,我得到了错误:
注释类型资源的属性查找未定义
我刚刚阅读了How to use java ee 6 @Resource annotation,但我还没有研究过 Maven,所以我想知道,是否可以通过其他方式解决这个问题而不是使用 Maven?
顺便说一句,我正在使用 Eclipse。
给 JMS 第一次尝试,当我尝试注入时@Resource(lookup="jms/ConnectionFactory")
,我得到了错误:
注释类型资源的属性查找未定义
我刚刚阅读了How to use java ee 6 @Resource annotation,但我还没有研究过 Maven,所以我想知道,是否可以通过其他方式解决这个问题而不是使用 Maven?
顺便说一句,我正在使用 Eclipse。
解决这个问题的正确方法是在 Eclipse 中右键单击您的项目,Java Build Path -> Order and Exports,选择 JRE System Library 并单击底部。
Java EE 6 开发人员遇到的一个常见问题是使用 @Resource 注释,这与 JDK 内置的 @javax.annotation.Resource 冲突。在这里,我们将展示如何解决 Eclipse 和 Maven 中的编译问题。
如果您查看 Java EE 6 中包含的 @Resource 注释,它包含查找属性。不幸的是,正如我们所说,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 实现 -并且 - 把它放在 JDK 库之前
@resource maven 查找 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 构建所示
尝试使用 mappedName 属性:
@Resource(mappedName="jms/ConnectionFactory")
此外,如果您仍想使用查找,请查看您正在使用的 javax.annotation.jar。JavaEE 6 中引入了 Lookup 属性。可能您的版本较旧。