java - 数据源自动绑定(bind)

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

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

最佳答案

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

更新

好的,我注意到你的错误。在你的绑定(bind)文件中,它应该是相反的:

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

所以在你的案例中,名称是 datasource2,绑定(bind)是 jndiname - 所以 datasource1:

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

关于java - 数据源自动绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25580798/

相关文章:

java - Java中的executeUpdate方法是线程安全的吗

java - jdbc、tomcat、apache 和 mod-jk 错误 "No suitable driver"

java - 使用 Java 和 JDBC 将无符号 64 位数字插入 BigInt MySQL 列

tomcat - Websphere 中的 webcontainer 与 tomcat 服务器

java - 是否可以从 MQ 队列中删除消息而不检索消息或清除队列?

java - 无法访问android接口(interface)

java - 如何在字符串数组中查找重复的字符串

java - Android PlayStore 'InAppUpdate' 绝对强制升级(必须立即升级,不能取消任何选项)

java - Servlet 过滤器给出 NullPointerException

java - j_security_check之前执行的过滤器