Недавно я увидел сообщение, которое объяснялось в JAVA EE, вместо использования файла .properites
лучший способ указать Configuration Properties - это web.xml
а затем впрыснуть их внутри класса, в котором необходимы свойства.
Это мой 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
Ваш класс не поддерживает аннотацию @Resource
. Он должен быть компонентом Java EE, например EJB.
Это связано с тем, что контейнер является тем, который вводит ресурсы, и он рассматривает компоненты только как допустимые цели инъекции. Также по этой причине ресурс должен быть определен до запуска контейнера, поэтому вы не можете вводить ресурсы, которые вы вставляете в JNDI во время выполнения.
HttpServlet
.
Убедитесь, что у вас есть файл beans.xml
папке WEB-INF (это включает CDI), а затем измените вашу переменную на java.lang.Integer
следующим образом:
@Resource(name="pacakageName.ClassName/number")
Integer number;
@Resource(name="country")
String country;
Он отлично работает в контейнере Java EE 6, который поддерживает CDI, например, профиль WebSphere Liberty
@Resource
.