我想通过部署在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>
答案 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();
}
我要感谢大家帮忙解决问题。