我有很多Websphere服务器,其数据库连接的JNDI名称不同,所以我必须为每个服务器构建许多ear文件。我想做这样的事情:
<bean id="dbDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="${SPECIFIC_JNDI_NAME}"/>
</bean>
如何创建此SPECIFIC_JNDI_NAME变量?
答案 0 :(得分:2)
正确的Java EE方法是在代码中使用资源引用,如:java:comp/env/jdbc/myDSRef
,然后在安装过程中将此资源引用绑定到实际的JNDI名称。
您可以通过@Resource
标记定义引用,也可以在部署描述符(web.xml
或ejb-jar.xml
)中定义条目。
您可以通过管理控制台,wsadmin
安装脚本或放置在WEB-INF文件夹中的ibm-web-bnd.xml
文件将其映射到JNDI名称。
可以在Spring中使用引用。
答案 1 :(得分:0)
这是错误的方法。 JNDI的一个优点是,您可以将对象(在本例中为数据源)绑定在一个JNDI名称下,而无需关心它来自何处,如何实例化等等,只要它在第一次访问时就在那里。
您(或任何配置JNDI名称的人)基本上都试图通过在不同的JNDI名称上绑定不同的数据源来消除这种优势。
解决方法可能是将“自定义”名称绑定到“标准”JNDI名称,这样您的应用程序仍然可以引用“标准”名称,并且提供正确bean的责任在于配置JNDI但是实际上,如果你走得那么远,你也可以给数据源标准名称。另外,我不确定在JNDI中是否可能,我只知道它曾经可以在Spring自己的配置中使用。