2014-08-30 63 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