2016-07-28 11 views
0


Ich möchte eine DB2-Datenquelle auf einem Remote-Rechner über eine Java-Webanwendung auf einer Liberty-Websphere-Maschine aufrufen. Im Moment führen Sie den Code, um die Lookup-ok die Datenquelle aus dem Kontext der folgenden Fehler kehrt zu mir:DB2-Datenquelle für eine Liberty-Java-Anwendung

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) Haben Sie etwas Hilfe, um die Datenquelle zugreifen?
2) Geöffnet Ich öffnete die Datenquelle, ich würde gerne eine Verbindung öffnen und einen vorbereiteten Zustand auf der DB ausführen. Code sollte hier anders sein als die traditionelle javax.sql.Datasource?

der relevante Teil meiner 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" - sieht so aus, als wäre der Treiber JAR nicht im Klassenpfad enthalten. – mustaccio

+0

können Sie Ihre Frage mit der server.xml-Konfiguration für Ihre Datenquelle und die Ressourcenreferenz aktualisieren? Verwenden Sie in Ihrer Anwendung auch direkt DB2-Klassen (z. B. 'com.ibm.db2.jcc.DB2ConnectionPoolDataSource') oder verwenden Sie die JDBC-Standardschnittstellen wie' javax.sql.DataSource'? –

Antwort

0

Wie mustaccio erwähnt, ist es wahrscheinlich das Glas nicht auf dem Classpath ist. Für Freiheit sollten Sie ein Element wie dies in Ihrer server.xml haben:

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

Überprüfen Sie, ob com.ibm.db2.jcc.DB2ConnectionPoolDataSource an der Stelle existiert Sie angegeben haben (und dass Sie die Erlaubnis gelesen haben es).

Für weitere Informationen: Configuring relational database connectivity in Liberty

+0

Ich habe die Frage mit dem relevanten Teil meiner server.xml bearbeitet. Hier ist meine Bibliotheksreferenz und die Dateien haben Leseberechtigungen. – grandeale8

0

Schließlich löste ich dieses Problem.

Das Problem war, dass meine DB2-JAR-Dateien in meinem Dateisystem nicht lesbar waren.

Hier werden die entsprechenden Code-Teile meiner Konfiguration für zukünftige Referenz: 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> 

Mein Projekt Deployment Descriptor 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> 

Schließlich wird die Java-Code auf die Datenbank zuzugreifen:

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

Ich möchte allen danken Hilfe bei der Auflösung.

+1

Wenn Sie von "webProfile-6.0" auf "7.0" umstellen, werden Sie nur von der Funktion "jdbc-4.0" auf "4.1" verschoben. DB2 wird in beiden Fällen gleich funktionieren. Das einzige Problem war, dass Ihre Bibliotheken keine Leseberechtigungen hatten. Die Feature-Änderungen in Ihrer server.xml sind irrelevant. –

+0

@aguibert, Es ist wahr, ich versuche auch, zurück zu webProfile 6.0 und es funktioniert perfekt. Vielen Dank – grandeale8