@Resource不注入环境条目

时间:2014-09-02 19:59:50

标签: java xml environment-variables java-ee-6 code-injection

我最近看到一篇在JAVA EE中解释的帖子,而不是使用.properites文件,更好的方法是在web.xml文件中指定配置属性,然后将它们注入到Class中的需要属性。

这是我的Web.xml

 <env-entry> 
   <env-entry-name>pacakageName.ClassName/number</env-entry-name> 
   <env-entry-type>java.lang.Integer</env-entry-type> 
   <env-entry-value>123</env-entry-value> 
 </env-entry>

 <env-entry> 
   <env-entry-name>country</env-entry-name> 
   <env-entry-type>java.lang.String</env-entry-type> 
   <env-entry-value>Spain</env-entry-value> 
 </env-entry>

在我的Java类中,当我使用JNDI方式时,我能够获得值

InitialContext initialContext = new javax.naming.InitialContext();  
String countryName = (String) initialContext.lookup("java:comp/env/country");

这很有效,但是当我尝试使用@Resources的新方法并注入值时,不会从web.xml

中读取值
  @Path("loginService")
  public class LoginService{
    @Resource() int number;
     //constructor and other methods
   }

我正在使用Tomcat 7 ......任何人都可以帮助我解决我的错误。

我提到了这个文档: http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/env_entry/env_entry.html

2 个答案:

答案 0 :(得分:3)

您的课程不支持@Resource注释。它必须是Java EE组件,例如EJB。

这是因为容器是注入资源的容器,它只将组件视为有效的注入目标。同样由于这个原因,必须在容器启动之前定义资源,这样就无法注入在运行时放入JNDI的资源。

答案 1 :(得分:1)

确保WEB-INF文件夹中有beans.xml个文件(这会启用CDI),然后将变量更改为java.lang.Integer,如下所示:

@Resource(name="pacakageName.ClassName/number") 
Integer number;

@Resource(name="country") 
String country;

它在支持CDI的Java EE 6容器中工作正常,例如WebSphere Liberty profile