我想在我的webapp中使用JDBC Connetion,这是在WebSphere中配置的。 (就像这里的那个:How to use JDBC in JavaEE?)
我之前通过JPA使用过这个DataSource,但是我们的客户希望拥有原生SQL ...不要问。
我找到了很多示例和教程(例如http://www.wickcentral.com/java/dl/ds_resreferencesetts_Websphere.pdf,Websphere JNDI lookup fails),但没有任何工作要做。
WebSphere中的DataSource具有JNDI-Name“jdbc / myDS”
我在我的web.xml中添加了一个resource-ref:
<resource-ref>
<res-ref-name>jdbc/myDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
我试图在我的Dao中获取DataSource:
ds = (DataSource) new InitialContext()
.lookup("java:comp/env/jdbc/myDS");
但我得到的是
com.ibm.wsspi.injectionengine.InjectionException: CWNEN0044E: A resource reference binding could not be found for the following resource references [jdbc/myDS], defined for the MyAPP component.
我尝试了很多。有没有人看到这个错误?
答案 0 :(得分:9)
在安装过程中,您是否将Web-app定义的数据源与Websphere定义的数据源匹配? Websphere通常会要求您在安装过程中检测到资源时绑定资源(如果我没记错的话,它位于名为“将参考资源映射到资源”的步骤中。)
其他常见问题是与您的应用程序不同的上下文(Cell / Node / Server)中的Websphere数据源,因此无法在运行时找到它。
答案 1 :(得分:2)
您需要在ibm-web-bnd.xml中添加绑定:
<resource-ref name="jdbc/myDS" binding-name="jdbc/myDS" />