Передача имени JNDI динамически
У меня много серверов Websphere с разными именами JNDI для моего соединения с БД, поэтому мне нужно создать много ушей для каждого сервера. Я хотел бы сделать что-то вроде этого:
<bean id="dbDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="${SPECIFIC_JNDI_NAME}"/>
</bean>
Как я могу создать эту переменную SPECIFIC_JNDI_NAME?
2 ответа
Правильный способ сделать это в Java EE - использовать ссылки на ресурсы в вашем коде, например: java:comp/env/jdbc/myDSRef
затем эта ссылка на ресурс привязывается к фактическому имени JNDI во время процесса установки.
Вы либо определяете ссылки через @Resource
тег или запись в дескрипторе развертывания (web.xml
или же ejb-jar.xml
).
Вы сопоставляете его с именем JNDI через консоль администратора, wsadmin
установочный скрипт или ibm-web-bnd.xml
файл помещен в папку WEB-INF.
Можно использовать ссылки со Spring.
Это неправильный путь. Одно из преимуществ JNDI заключается в том, что вы можете связывать объекты (в данном случае источник данных) под одним именем JNDI, не заботясь о том, откуда оно появилось, как оно было создано и т. Д., Если оно было там во время первого обращения к нему.,
Вы (или кто-либо другой, кто настраивает имена JNDI) в основном пытаются отобрать это преимущество, связывая разные источники данных с разными именами JNDI.
Обходным путем может быть привязка "нестандартного" имени к "стандартному" имени JNDI, так что ваше приложение может по-прежнему ссылаться на "стандартное" имя, и ответственность за предоставление правильного компонента лежит на тех, кто настраивает JNDI, но на самом деле, если если вы зайдете так далеко, вы также можете просто дать источнику данных стандартное имя. Кроме того, я не уверен, что это даже возможно в JNDI, я просто знаю, что раньше это было возможно в собственной конфигурации Spring.