我最近看到一篇在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
答案 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