2014-08-30 61 views
3

我在WebSphere中定義了一個名爲'jdbc/dataSource1'的JDBC數據源。
在我的基於Spring的應用程序中,我想使用jndi查找獲取數據源,但是使用其他名稱,如'jdbc/dataSource2'。
爲了實現這一點,我創建IBM的Web-bnd.xml文件,其中i的定義的連接如下:數據源自動綁定

<resource-ref binding-name="jdbc/dataSource2" name="jdbc/dataSource1"/> 

此外,我在web.xml文件中定義的數據源如下:

<resource-ref> 
    <description>some awesome datasource</description> 
    <res-ref-name>jdbc/dataSource2</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

該解決方案僅在使用IBM Web Console進行部署時起作用。當我使用wsadmin工具嘗試部署使用自定義Jython腳本,我得到以下錯誤:

ADMA0007E: A Validation error occurred in task Mapping resource references to re 
sources. The Java Naming and Directory Interface (JNDI) name is not specified f 
or reference binding jdbc/dataSource2 in module <application_name>.war" 

在wsadmin腳本來我使用AdminApp.install(path_to_ear,期權),其中選擇變量只包含關於虛擬主機的選擇映射。

所以問題是我該怎麼做,所以WebSphere將從ibm-web-bnd.xml文件中獲取數據源映射選項?

+0

http://stackoverflow.com/questions/ 19096482/binding-container-managed-authentication-alias-with-datasource-using-jython-scri – 2014-08-30 14:23:40

回答

3

嘗試調用沒有選項的AppAdmin.install(path_to_ear)。然後從bnd文件中讀取選項,並且沒有驗證錯誤。並確保ibm-web-bnd.xml文件位於ear文件中。

UPDATE

好,我注意到你的錯誤。在你的綁定文件應該是周圍的其他方法:

<resource-ref name="jdbc/MyRef" binding-name="jdbc/JNDI" /> 
你的情況名

所以是datasource2和有約束力的是jndiname - 所以datasource1:

<resource-ref binding-name="jdbc/dataSource1" name="jdbc/dataSource2"/> 
+1

我試過了,我給了我提出的錯誤。 至於'ibm-web-bnd.xml' - 在我的應用程序中它位於耳文件內的war文件中。我做對了嗎? :) – crew4ok 2014-08-30 19:38:44

+0

它應該在WEB-INF文件夾中,就在您的web.xml – Gas 2014-08-30 19:42:28

+1

@ crew4ok旁邊,您在綁定文件中有錯誤,請參閱我的更新答案。 – Gas 2014-08-30 19:48:44

2

您需要將MapResEnvRefToRes選項添加到AdminApp.install調用將資源引用映射到資源。檢查此鏈接瞭解更多:

http://www-01.ibm.com/support/knowledgecenter/api/content/SSEQTP_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/rxml_taskoptions.html#rxml_taskoptions__cmd56

把它做的最快方法是讓「命令援助日誌」,並通過AdminConsole繼續安裝。在命令幫助日誌中,您可以找到部署的確切的AdminApp.install語法以及將資源引用映射到實際資源。

廣告模式如果考慮更復雜的自動化項目(不只是一個應用安裝)(我參與下文提到的OSS項目)

,那麼你會發現WDR庫有用。藉助WDR,您可以將所有應用程序設置導出到清單文件中,其中包括MapResEnvRefToRes設置。然後,您可以基於該清單部署應用程序。

+1

我認爲Map *選項是一種解決方法,因爲它似乎不是數據源定義的重複?我已經在我的web.xml和ibm-web-bnd中定義了它。xml文件,如果沒有我指定兩次(我的意思是在ibm-web-bnd.xml和部署腳本中),WebSphere不能找出數據源映射? – crew4ok 2014-08-30 18:58:47

+1

順便提一句,你提到的庫似乎對我真的很有用,但是由於我可以得到它包含許多文件(例如,與wsadminlib.py中的單個文件相對),我嘗試使部署腳本儘可能小可能是因爲它應該通過許多WS實例上的ssh複製。 – crew4ok 2014-08-30 19:04:35