@ Ресурс не внедряет запись среды

1

Недавно я увидел сообщение, которое объяснялось в 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

  • 1
    Покажите код для класса, в котором вы используете @Resource .
  • 0
    Как аннотируется ваш pacakageName.ClassName? Вероятно, это создается неправильно.
Показать ещё 2 комментария
Теги:
java-ee-6
code-injection
environment-variables

2 ответа

3
Лучший ответ

Ваш класс не поддерживает аннотацию @Resource. Он должен быть компонентом Java EE, например EJB.

Это связано с тем, что контейнер является тем, который вводит ресурсы, и он рассматривает компоненты только как допустимые цели инъекции. Также по этой причине ресурс должен быть определен до запуска контейнера, поэтому вы не можете вводить ресурсы, которые вы вставляете в JNDI во время выполнения.

  • 0
    @ Kayaman .. Спасибо за ответ, но разве мы не можем сделать это в сервлете?
  • 0
    @ user3897395 Ну, ваш класс не похож на сервлет. Это не расширяет HttpServlet .
Показать ещё 3 комментария
1

Убедитесь, что у вас есть файл 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню