2012-08-07 48 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

相關問題