动态传递JNDI名称

时间:2015-06-24 11:45:30

标签: 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>

如何创建此SPECIFIC_JNDI_NAME变量?

2 个答案:

答案 0 :(得分:2)

正确的Java EE方法是在代码中使用资源引用,如:java:comp/env/jdbc/myDSRef,然后在安装过程中将此资源引用绑定到实际的JNDI名称。

您可以通过@Resource标记定义引用,也可以在部署描述符(web.xmlejb-jar.xml)中定义条目。

您可以通过管理控制台,wsadmin安装脚本或放置在WEB-INF文件夹中的ibm-web-bnd.xml文件将其映射到JNDI名称。

可以在Spring中使用引用。

答案 1 :(得分:0)

这是错误的方法。 JNDI的一个优点是,您可以将对象(在本例中为数据源)绑定在一个JNDI名称下,而无需关心它来自何处,如何实例化等等,只要它在第一次访问时就在那里。

您(或任何配置JNDI名称的人)基本上都试图通过在不同的JNDI名称上绑定不同的数据源来消除这种优势。

解决方法可能是将“自定义”名称绑定到“标准”JNDI名称,这样您的应用程序仍然可以引用“标准”名称,并且提供正确bean的责任在于配置JNDI但是实际上,如果你走得那么远,你也可以给数据源标准名称。另外,我不确定在JNDI中是否可能,我只知道它曾经可以在Spring自己的配置中使用。