Java 动态传递JNDI名称
我有很多Websphere服务器,其数据库连接的JNDI名称不同,因此我必须为每台服务器构建许多EAR文件。我想这样做:Java 动态传递JNDI名称,java,jdbc,websphere,jndi,spring-jdbc,Java,Jdbc,Websphere,Jndi,Spring Jdbc,我有很多Websphere服务器,其数据库连接的JNDI名称不同,因此我必须为每台服务器构建许多EAR文件。我想这样做: <bean id="dbDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="${SPECIFIC_JNDI_NAME}"/> </bean> 如何创建这个特定的\u JNDI\u
<bean id="dbDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="${SPECIFIC_JNDI_NAME}"/>
</bean>
如何创建这个特定的\u JNDI\u NAME变量?这样做是错误的。JNDI的一个优点是,您可以将对象(在本例中是数据源)绑定到一个JNDI名称下,而无需考虑对象的来源、实例化方式等,只要它在第一次访问时就存在 您(或配置JNDI名称的人)基本上是在试图通过在不同的JNDI名称上绑定不同的数据源来消除这种优势
一种解决方法是将“自定义”名称绑定到“标准”JNDI名称,这样您的应用程序仍然可以引用“标准”名称,提供正确bean的责任在于配置JNDI的人员,但实际上,如果您走得太远,您也可以给数据源一个标准名称。另外,我甚至不确定这在JNDI中是否可行,我只知道它在Spring自己的配置中曾经是可行的。正确的JavaEE方法是在代码中使用资源引用,如:
Java:comp/env/jdbc/myDSRef
,然后在安装过程中将此资源引用绑定到实际的JNDI名称
您可以通过@Resource
标记或部署描述符中的条目(web.xml
或ejb jar.xml
)定义引用
您可以通过管理控制台、wsadmin
安装脚本或放置在web-INF文件夹中的IBMWebBND.xml
文件将其映射到JNDI名称
可以将引用与Spring一起使用