PDA

View Full Version : [JAVA - DBCP] Problema con i driver jdbc


magix2003
04-09-2009, 10:38
Ciao a tutti,

è due giorni che cerco di implementare il connection pooling nella mia web-application. Per questo utilizzo la libreria DBCP di apache.

Il problema è che mi ritorna sempre la solita eccezione al momento di creare il data-source, cioè non riesce a trovare il driver. Con la classe che utilizzavo prima (senza connection-pooling) questo problema non lo avevo, ed il driver è sempre nella build-path in netbeans.


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package it.unibz.inf.wobda.db;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import org.apache.tomcat.dbcp.dbcp.BasicDataSource;
import javax.sql.DataSource;

/**
*
* @author giorgio
*/
public class DBPool {

public static DataSource theDataSource;

public static void setUpDatasource(WonderDataSource theSource) throws ClassNotFoundException {
Class.forName(theSource.getDriver());
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName(theSource.getDriver());
ds.setUsername(theSource.getUser());
ds.setPassword(theSource.getPwd());
ds.setUrl(theSource.getDriver());
theDataSource = ds;
}

public static void getDataSourceStats(DataSource ds) throws SQLException {
String res = "";
BasicDataSource bds = (BasicDataSource) ds;
res += "NumActive: " + bds.getNumActive() + "\n";
res += "NumIdle: " + bds.getNumIdle();
}

public static void shutdownDataSource(DataSource ds) throws SQLException {
BasicDataSource bds = (BasicDataSource) ds;
bds.close();
}

public static Connection getConnection() throws SQLException {
return theDataSource.getConnection();
}

public static void executeQuery(QueryMediator aMediator, String sql) throws SQLException {
aMediator.setStmt(aMediator.getConn().createStatement());
aMediator.setRset(aMediator.getStmt().executeQuery(sql));
}
}





GRAVE: QueryManager: SQLException
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class 'oracle.jdbc.driver.OracleDriver' for connect URL 'oracle.jdbc.driver.OracleDriver'
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1150)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at it.unibz.inf.wobda.db.DBPool.getConnection(DBPool.java:46)
at it.unibz.inf.wobda.queryprocessing.obda.OBDAInterface.query(OBDAInterface.java:106)
at it.unibz.inf.wobda.queryprocessing.obda.OBDAInterface.performQuery(OBDAInterface.java:98)
at it.unibz.inf.wobda.servlets.queryanswering.QueryManager.processRequest(QueryManager.java:90)
at it.unibz.inf.wobda.servlets.queryanswering.QueryManager.doPost(QueryManager.java:189)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:636)
Caused by: java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(DriverManager.java:279)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1143)
... 20 more




Vi prego aiutatemi, non so più che pesci pigliare.


Giorgio

magix2003
04-09-2009, 10:47
C'era un piccolo errore nella dichiarazione di un import, ora ho modificato ma il risultato finale è sempre lo stesso :mc:


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package it.unibz.inf.wobda.db;

import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbcp.BasicDataSource;
import javax.sql.DataSource;

/**
*
* @author giorgio
*/
public class DBPool {

public static DataSource theDataSource;

public static void setUpDatasource(WonderDataSource theSource) throws ClassNotFoundException {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
ds.setUsername(theSource.getUser());
ds.setPassword(theSource.getPwd());
ds.setUrl(theSource.getDriver());
theDataSource = ds;
}

public static String getDataSourceStats(DataSource ds) throws SQLException {
String res = "";
BasicDataSource bds = (BasicDataSource) ds;
res += "NumActive: " + bds.getNumActive() + "\n";
res += "NumIdle: " + bds.getNumIdle();
return res;
}

public static void shutdownDataSource(DataSource ds) throws SQLException {
BasicDataSource bds = (BasicDataSource) ds;
bds.close();
}

public static Connection getConnection() throws SQLException {
return theDataSource.getConnection();
}

public static void executeQuery(QueryMediator aMediator, String sql) throws SQLException {
aMediator.setStmt(aMediator.getConn().createStatement());
aMediator.setRset(aMediator.getStmt().executeQuery(sql));
}
}



GRAVE: QueryManager: SQLException
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class 'oracle.jdbc.driver.OracleDriver' for connect URL 'oracle.jdbc.driver.OracleDriver'
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1150)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at it.unibz.inf.wobda.db.DBPool.getConnection(DBPool.java:43)
at it.unibz.inf.wobda.queryprocessing.obda.OBDAInterface.query(OBDAInterface.java:106)
at it.unibz.inf.wobda.queryprocessing.obda.OBDAInterface.performQuery(OBDAInterface.java:98)
at it.unibz.inf.wobda.servlets.queryanswering.QueryManager.processRequest(QueryManager.java:90)
at it.unibz.inf.wobda.servlets.queryanswering.QueryManager.doPost(QueryManager.java:189)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:636)
Caused by: java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(DriverManager.java:279)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1143)
... 20 more

zimo78
14-05-2010, 18:18
Credo che l'errore sia l'utilizzo di 'oracle.jdbc.driver.OracleDriver'. Infatti lo stack dice 'not suitable' e cioè che quel driver è deprecato. Dalla versione 9 di Oracle infatti il driver corretto è 'oracle.jdbc.OracleDriver'.

Spero di esserti stato di aiuto.

Zimo78