2016-07-28 88 views
0


我正在通過部署在liberty websphere機器上的java web應用程序訪問遠程計算機上的DB2數據源。在當下的代碼執行查找確定的數據源從上下文以下錯誤返回到我:Liberty Java應用程序的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)打開我打開數據源,我想打開連接並在數據庫上執行準備好的狀態。這裏的代碼應該與使用傳統的javax.sql.Datasource不同?

正如mustaccio提到我的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

「java.lang.ClassNotFoundException com.ibm.db2.jcc.DB2ConnectionPoolDataSource」 - 看起來像驅動程序JAR不在類路徑中。 – mustaccio

+0

你可以用你的數據源的server.xml配置和資源引用來更新你的問題嗎?另外,你是否直接在你的應用程序中使用DB2類(例如'com.ibm.db2.jcc.DB2ConnectionPoolDataSource')或者你在使用JDBC標準接口,例如'javax.sql.DataSource'? –

回答

0

相關的部分,這是有可能的罐子是不是在classpath。對於自由,你應該有一個這樣的元素在你的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

+0

我編輯了問題與我的server.xml的相關部分。這裏是我的圖書館參考和文件具有讀取權限。 – grandeale8

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(); 
} 

我想感謝大家,幫助解決。

+1

從'webProfile-6.0'改爲'7.0'只會讓你從'jdbc-4.0'移動到'4.1'特性。在任何一種情況下,DB2都是一樣的。唯一的問題是你的庫沒有讀取權限。 server.xml中的功能更改無關緊要。 –

+0

@aguibert,的確如此,我也試着回到webProfile 6.0並且它完美地工作。謝謝 – grandeale8

相關問題