Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 动态传递JNDI名称_Java_Jdbc_Websphere_Jndi_Spring Jdbc - Fatal编程技术网

Java 动态传递JNDI名称

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

我有很多Websphere服务器,其数据库连接的JNDI名称不同,因此我必须为每台服务器构建许多EAR文件。我想这样做:

<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一起使用