DB2 JNDI不支持WebSphere 7.0中的Servlet 2.5

时间:2015-09-02 11:04:39

标签: java servlets db2 jndi websphere-7

当我想通过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版本。

提前致谢。

2 个答案:

答案 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。