Я просто потратил слишком много времени на попытки выяснить некоторые ошибки при подключении некоторого фабричного компонента JNDI. Проблема оказалась в том, что вместо этого ...
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/loc"/>
</bean>
Я действительно написал это ...
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/loc"/>
</bean>
Я предполагаю, что, java:comp/env/
возможно, ссылается на некоторую переменную среды и делает так, чтобы в конечном итоге просматривался мой файл контекста. Единственная разница java:comp/env/
. Что это из уст эксперта?
Без java:comp/env/
префикса в значении я бы получил сообщение об ошибке «Имя jdbc не привязано в этом контексте» .
jdbc/loc
и, следовательноjava:comp/env/jdbc/loc
, правильный), в то время как ответ cherouvim подразумевает, что вы неправильно использовали первый пример (java:comp/env/jdbc/loc
и, следовательноjdbc/loc
, правильный). Тем не менее, настоящий ответ таков: это зависит от текущего контекста.Ответы:
Цитата https://web.archive.org/web/20140227201242/http://v1.dione.zcu.cz/java/docs/jndi-1.2/tutorial/beyond/misc/policy.html
Таким образом, привязка, которую вы сделали из spring или, например, из дескриптора контекста tomcat, по умолчанию идет в java: comp / env /
Например, если ваша конфигурация:
Затем вы можете получить к нему доступ напрямую, используя:
или вы можете сделать промежуточный шаг, чтобы вам не нужно было указывать «java: comp / env» для каждого извлекаемого ресурса:
источник
Существует также свойство
resourceRef
вJndiObjectFactoryBean
том , что есть, когда установленоtrue
, используется для автоматического предварять строку ,java:comp/env/
если она уже не присутствует.источник
После нескольких попыток и глубокого изучения исходного кода Tomcat я обнаружил, что простое свойство useNaming = "false" помогло !! Теперь Tomcat разрешает имена java: / liferay вместо java: comp / env / liferay
источник