2012-08-07 90 views
3

因此,我有一种情况,我将部署多个耳朵文件,每个耳朵文件都需要使用不同的数据库(可能)进行配置。如何在JBoss中拥有多个具有相同JNDI名称的数据源?

现在我有一个在JBoss中部署的* -ds.xml文件,它带有一个JNDI名称,表示我的所有portlet和servlet用来查找数据库连接。如果我使用* -ds.xml文件部署多个ear文件,该文件指向不同的数据库,但使用相同的JNDI名称部署barfs。在部署不同的应用程序以隔离它们时,JNDI不应该更模块化以防止命名冲突。

需要一段时间才能在代码中更改我的查找,那么有没有一种方法可以部署?我唯一的想法是将JNDI属性设置为要查找的数据源名称的值,然后首先查找该JNDI属性并根据检索到的“密钥”检索数据源。这对我来说似乎有点...

+1

你的arent在这种情况下missusing JNDI? JNDI只是简单地将数据源映射到应用程序服务器级别的标识符。这样你的部署就与它工作的数据源分开了。不同的数据源应该获得不同的JNDI标识符,尽管它们实际上是猜测它是不同的数据源。把它看作一个简单的'Map '。 JNDI在服务器范围内定义,不在部署范围内。 – Paranaix 2012-08-07 21:27:32

+0

Re:“JNDI有什么意义”,在一个盛大的假设下使用某些东西的重点是什么?你没有验证过,然后指责这个工具?在这种情况下,您只是假设每个.ear都有自己的名称空间。你有这个假设的基础吗? – EJP 2012-08-07 21:39:32

+0

这似乎是一个合理的想法,每个耳朵部署在Web服务器上将有自己的名称空间; IE:您可以部署多个不同的ear文件,每个文件引用相同的JNDI名称,每个文件都有不同的数据库值。例如,我正在与其他开发人员一起工作,如果我需要对数据库进行彻底更改,那么我不希望为每个人都更改数据库查找名称,因为我可以保留相同的数据库名称。 – Shinzul 2012-08-07 21:54:17

回答

3

您可以在应用程序服务器上定义具有不同名称的不同数据源(在服务器名称空间上),然后将其映射到resource-ref名称(此时为组件名称空间,所以每个应用程序可以有自己的一个)通过部署XML文件。

对于JBoss之前AS7:https://community.jboss.org/wiki/HowDoICreateAResourceRef为AS7:https://community.jboss.org/message/629666

+0

这看起来与我上面描述的非常相似 - '将JNDI属性设置为要查找的数据源名称的值,然后首先查找该JNDI属性并根据检索到的“键”检索数据源。“是我正确的做出这种关联? – Shinzul 2012-08-07 21:57:54

+1

不,JNDI查找会直接返回数据源。使用as7命名约定:在覆盖整个应用程序服务器的java:/ jboss名称空间下定义数据源。在应用程序中,您可以将此jboss名称绑定到java:comp/env名称。在你的应用程序中,所有查找都将通过java:comp(或者java:app,如果你在耳朵上定义的话)名字空间来完成的,这个名字空间仅限于war/ear。因此,您有一个java:comp/env(或java:app/env)名称,它将成为java:jboss的同义词。每个数据源的java:jboss名称将需要不同。 – Kazaag 2012-08-08 16:28:17

相关问题