自由java应用程序的DB2数据源

时间:2016-07-28 16:06:17

标签: java jdbc docker db2 websphere-liberty


我想通过部署在liberty websphere机器上的java Web应用程序访问远程机器上的DB2数据源。在代码执行查找的那一刻,确定来自上下文的数据源,以下错误返回给我:

I FFDC1015I: An FFDC Incident has been created: "java.lang.ClassNotFoundException com.ibm.db2.jcc.DB2ConnectionPoolDataSource com.ibm.ws.injectionengine.processor.ResourceProcessor.loadTypeClass 1142" at ffdc_16.07.28_15.54.28.0.log"
W CWNEN0046W: The com.ibm.db2.jcc.DB2ConnectionPoolDataSource type specified on the resource-ref, resource-env-ref, or message-destination-ref with the jdbc/db2/primadb name in the db2-webapp.war module could not be loaded. Compatibility type checking will not be performed for this resource reference.

1)有一些帮助来访问数据源吗? 2)打开我打开数据源,我想打开一个连接并在DB上执行一个准备好的stateemnt。这里的代码应该与使用传统的javax.sql.Datasource?

不同

我的server.xml的相关部分

 <dataSource jndiName="jdbc/db2/primadb" type="javax.sql.DataSource">
    <jdbcDriver javax.sql.DataSource="com.ibm.db2.jcc.DB2ConnectionPoolDataSource"
                libraryRef="db2Lib"/>
 <properties.db2.jcc driverType="4" serverName="172.17.0.3"
               portNumber="50000" databaseName="PRIMADB"
               user="db2inst1" password="*****"/>
</dataSource>

<library id="db2Lib">
    <fileset dir="lib" includes="*.jar"/>
</library>
 <application id="db2-webapp" name="Web App DB2">
    <classLoader commonLibraryRef="db2Lib"/>
</application>

2 个答案:

答案 0 :(得分:0)

正如mustaccio所提到的那样,jar可能不在类路径上。对于Liberty,您应该在server.xml中有这样的元素:

<library id="DB2JCC4Lib">
    <fileset dir="C:/DB2/java" includes="db2jcc4.jar db2jcc_license_cisuz.jar"/>
</library>

检查以确保com.ibm.db2.jcc.DB2ConnectionPoolDataSource存在于您指定的位置(并且您具有读取权限)。

有关详细信息:Configuring relational database connectivity in Liberty

答案 1 :(得分:0)

最后我解决了这个问题。

问题是我的DB2 jar文件在我的文件系统中无法读取。

这里是我的配置的相关代码部分以供将来参考: server.xml中

<server description="Default server">
...
<dataSource jndiName="jdbc/db2/primadb" type="javax.sql.DataSource">
   <jdbcDriver libraryRef="db2Lib"/>
   <properties.db2.jcc  serverName="172.17.0.3"
                   portNumber="50000" databaseName="PRIMADB"
                   user="db2inst1" password="*****"/>
</dataSource>
<library id="db2Lib">
   <fileset dir="${shared.resource.dir}/db2" includes="*.jar"/>
</library>
...
</server>

我的项目部署描述符web.xml

<web-app>
   ...
   <resource-ref>
    <res-ref-name>jdbc/db2/primadb</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
   </resource-ref>
   ...
</web-app>

最后访问数据库的java代码:

Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/db2/primadb");
Connection conn = ds.getConnection();
try {
    Statement stmt = conn.createStatement();
    String first_name = request.getParameter("firstname");
    String last_name = request.getParameter("lastname");
    String country = request.getParameter("country");
    String sql = "INSERT INTO PRIMA_USER (id, firstname, lastname, country) VALUES (DEFAULT, '" + first_name
                        + "', '" + last_name + "' , '" + country + "')";
    stmt.execute(sql);
} finally {
    conn.close();
}

我要感谢大家帮忙解决问题。