当我想通过JNDI使用DB2时,我遇到了错误。我在其他帖子中查找了这个,但是在任何帖子中都没有与我相同的错误。
首先,我使用驱动程序com.ibm.db2.jcc.DB2ConnectionPoolDataSource
和JNDI asisa/conector/db2
在WebSphere 7.0中创建了一个池连接DB2。
我接下来的步骤是web.xml
:
<resource-ref>
<description></description>
<res-ref-name>indirectDB2</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
<mapped-name>indirectDB2</mapped-name>
</resource-ref>
最后一步是在ibm-web-bnd.xml
文件中:
<?xml version="1.0" encoding="UTF-8"?>
<web-bnd
xmlns="http://websphere.ibm.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-bnd_1_0.xsd"
version="1.0">
<virtual-host name="default_host" />
<resource-ref name="indirectDB2" binding-name="asisa/conector/db2" />
</web-bnd>
在我的Web应用程序中,我试图像这样连接Java:
Context aContext = new InitialContext();
DataSource aDataSource =(DataSource)aContext.lookup("java:comp/env/indirectDB2");
Connection conn = aDataSource.getConnection();
我认为没有其他事可做,但我仍然收到相同的错误,它与我正在使用的servlet有关:
com.ibm.websphere.naming.CannotInstantiateObjectException:JNDI NamingManager处理javax.naming.Reference对象时发生异常。 [root异常是com.ibm.websphere.naming.CannotInstantiateObjectException:JNDI NamingManager处理javax.naming.Reference对象时发生异常。 [根异常是javax.naming.NamingException:尝试使用2.3(或更高版本)servlet中的4.0 DataSource。配置无效。]]
我尝试了很多方法来解决它,但我无法解决servlet版本。
提前致谢。
答案 0 :(得分:2)
更改web.xml以指示正确的类型类 javax.sql.ConnectionPoolDataSource中。从创建数据源的范围发布resources.xml将有助于回答您的问题。
答案 1 :(得分:0)
在错误消息中显示:
Attempted to use a 4.0 DataSource from a 2.3 (or higher) servlet. Invalid configuration.
您确定在Resources > Data sources
而非Data sources (WebSphere Application Server V4)
中配置了数据来源吗?
仔细检查,如果未定义为V4。