数据源自动绑定

时间:2014-08-30 09:09:29

标签: java jdbc websphere jython wsadmin

我在WebSphere中定义了一个名为'jdbc / dataSource1'的JDBC数据源 在我的基于Spring的应用程序中,我希望使用jndi查找获取数据源,但是使用其他名称,例如'jdbc / dataSource2'。
为了实现这一点,我创建了ibm-web-bnd.xml文件,其中我定义了如下链接:

<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,options),其中options变量仅包含有关虚拟主机映射的选项。

所以问题是我应该怎么做,因此WebSphere将从ibm-web-bnd.xml文件中获取数据源映射选项?

2 个答案:

答案 0 :(得分:3)

您需要将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

完成任务的最快方法是启用&#34;命令帮助记录&#34;然后通过AdminConsole继续安装。在命令帮助日志中,您将找到部署的准确AdminApp.install语法以及资源引用到实际资源的映射。

广告模式 (我正在为下面提到的OSS项目做出贡献)

如果您考虑更复杂的自动化项目(而不仅仅是一个应用程序安装),那么您可能会发现WDR库很有用。使用WDR,您可以将所有应用程序设置导出到清单文件中,其中包括MapResEnvRefToRes设置。然后,您可以基于该清单部署应用程序。

答案 1 :(得分:3)

尝试在没有选项的情况下调用AppAdmin.install(path_to_ear)。然后从bnd文件中读取选项,并且没有验证错误。并确保ibm-web-bnd.xml文件位于ear文件中。

更新

好的,我发现了你的错误。在你的绑定文件中,它应该是相反的方式:

<resource-ref name="jdbc/MyRef" binding-name="jdbc/JNDI" />

所以在你的情况下,name是datasource2,绑定是jndiname - 所以datasource1:

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