Dependency injection 在使用@Resource注入JavaEE6和GlassFish3.1资源时遇到问题

Dependency injection 在使用@Resource注入JavaEE6和GlassFish3.1资源时遇到问题,dependency-injection,glassfish,java-ee-6,Dependency Injection,Glassfish,Java Ee 6,在Java EE 6和Glassfish 3.1(嵌入式)中使用@Resource注释时遇到了问题。我想查找一个JNDI数据源,所以我试图让它与Glassfish中的默认数据源一起工作。在我的代码中,我有: @Resource(lookup = "java:global/env/jdbc/__default") DataSource dataSource; 它编译得很好。我在用Maven+这个建议 但是,当我部署.war时,总是会出现以下错误: WARNING: Incorrect @Reso

在Java EE 6和Glassfish 3.1(嵌入式)中使用@Resource注释时遇到了问题。我想查找一个JNDI数据源,所以我试图让它与Glassfish中的默认数据源一起工作。在我的代码中,我有:

@Resource(lookup = "java:global/env/jdbc/__default")
DataSource dataSource;
它编译得很好。我在用Maven+这个建议

但是,当我部署.war时,总是会出现以下错误:

WARNING: Incorrect @Resource annotation class definition - missing lookup attribute
  symbol: FIELD
  location: javax.sql.DataSource ResourceLookup.dataSource
这是一个如此简单的例子,如果它是一个bug,我会非常惊讶。我一定是做错了什么。有什么想法吗?

作为测试,您可以尝试使用“jdbc/\u default”作为查找字符串吗?对于我的数据源,我使用我指定的jndi名称查找它们,总是使用模式“jdbc/MyDataSourceName”


@资源(lookup=“jdbc/MyDataSourceName”)运行良好。从未尝试过查找默认ds,尤其是通过java:global命名空间。

p.S.我希望您在生产中不要使用jdbc/\uu默认,它是Glassfish默认安装上的derby数据库。进一步看,Glassfish显示此错误时,是因为它得到了NoSuchMethodError异常,这意味着您得到了错误版本的资源注释编译代码。您很可能遇到了类路径问题。您的.war或类似产品中是否捆绑了j2ee.jar?如果您的war中只有您的代码,而没有j2ee或jee库,那么可以尝试新的Glassfish副本。还有可能是你的JDK太旧了。请参阅底部。这个链接是3.0代码,我无法在线快速找到3.1代码,但我的机器上有它,注释是:/,可能意味着没有设置lib-assessed-dir,并且正在从JDK获取旧版本的//资源。//不要将此视为致命错误。Jim,为了方便起见,我只使用jdbc/\uu默认值。你说得对,java:global/是不需要的。你的第二条和第三条评论看起来是正确的。我正在使用maven embedded glassfish插件,在快速浏览了源代码之后,我认为它没有设置java.annowed.dirs。在一个独立的Glassfish安装中,一切都可以正常工作。谢谢你给我指出了正确的方向。成功了,谢谢!3天以来一直在思考这个问题(GlassFish 4)。