2012-04-25 2 views
1

Я хочу удалить ENV-запись из web.xmlНе удалось найти свойство в контексте JNDI с помощью PropertyPlaceholderConfigurer

<env-entry> 
    <description>String used in masking process</description> 
    <env-entry-name>default_mask</env-entry-name> 
    <env-entry-value>*</env-entry-value> 
    <env-entry-type>java.lang.String</env-entry-type> 
</env-entry> 

поэтому я создал файл свойств, имеющих (с: /my.properties)

default_mask=9999 

Поэтому я стараюсь использовать существующие решения, как JndiPropertyPlaceholderConfigurer (от Spring Jndi Context and PropertyPlaceholderConfigurer ) и настроен следующим в applicationContext.xml весеннем как

<bean 
class="com.test.webappl.JndiPropertyPlaceholderConfigurer"> 
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/> 
<property name="ignoreResourceNotFound" value="true"/> 
<property name="location" value="file:c:\my.properties"/> 

Запуск Tomcat сервер считывает файл свойств, как

.......com.test.webappl.JndiPropertyPlaceholderConfigurer] Loading properties file from URL [file:c:/my.properties] 

Сейчас в Java, когда я прочитал

Context context = new InitialContext(); 
String resource = context.lookup("java:comp/env/default_mask"); 

приложение бросками следующая ошибка

**javax.naming.NameNotFoundException: Name default_mask is not bound in this Context** 

также моя весна настройки в web.xml являются

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:applicationcontext.xml</param-value> 
</context-param> 

Кто-нибудь знает, если я использую правильный путь? Я знаю, что это был дан ответ в Spring Jndi Context and PropertyPlaceholderConfigurer но почему-то не работает в моем случае

Заранее спасибо

ответ

0

Если вы устанавливаете что-либо на любом сервере приложений, это хорошая идея, чтобы упаковать все необходимые ресурсы для устройства развертывания (война в вашем случае).

Чтобы ответить на ваш вопрос: если вы используете весну для ввода чего-либо в контейнер JNDI, вы также должны позволить весне найти все для вас.

Таким образом, вы не можете использовать

new InitialContext(); // this has nothing to do with spring. 

Надеется, что это помогает :)

0

То, что вы пытаетесь (или ожидая), чтобы сделать это «Bind пары значений имени из my.properties в контекст JNDI» ,

НО

Пример, который вы упомянули, не делать этого. Это просто делает следующие вещи

  1. Если есть свойство заполнитель упоминается в файле контекста (как ${my.name}), то он разрешит его из JNDI (предполагая, что его уже там)
  2. Если его нет в наличии из JNDI затем разрешите его для некоторого по умолчанию чтения из файла свойств.
  3. Нигде подробности о привязке переменных к JNDI. Ссылка на метод bind() отсутствует.

Теперь Чтобы решить вашу проблему т.е. получить какой-то способ чтения файла свойств и связать, что JNDI дерево, один из способов будет следующая

  1. Вы можете создать класс JndiPropertyBinder и впрыснуть jndiTemplate в нем.
  2. Вставьте свой файл недвижимости в этом классе
  3. Теперь напишите init hook на bean-компоненте, где в нем будут прочитаны все свойства в файле и привяжите их к дереву jndi.
  4. Сделайте этот компонент очень загруженным, чтобы его загрузили перед всеми другими компонентами, которые его используют.
+0

все еще, будет ли это решение работать с простым новым InitialContext() ?? Вам не нужно искать свойства с самой весны? – WeMakeSoftware

+0

'plain new InitialContext()' все равно будет работать. JNDI не является частью весны. Его другая сущность. 'InitialContext' позволяет вам взаимодействовать с деревом JNDI. Фактически jndiTemplate внутренне использует «InitialContext». См. [This] (http://www.jarvana.com/jarvana/view/org/springframework/spring/2.5.2/spring-2.5.2-sources.jar!/org/springframework/jndi/JndiTemplate.java? format = ok) link – Santosh

+0

Tomcat бросает ошибку, когда пытается связать ключ/значение @java: comp/env ....... Контекст доступен только для чтения – Anu

Смежные вопросы