2013-10-11 4 views
0

Я пытаюсь превратить свой код jdbc для использования функций пула соединений на Tomcat. Моя система представляет собой приложение JSP/сервлет, который подключается к SQL Server 2008. Таким образом, позволяет получить к коду ...Пул соединений Jdbc с Sql Server 2008 не работает

Мой класс Connection выглядит следующим образом:

import org.apache.tomcat.jdbc.pool.DataSource; 
    import org.apache.tomcat.jdbc.pool.PoolProperties; 
    //... some more imports 
public class DbPooledConnectionToMSSQL { 

    public String dbsource ; 
    private Connection dbCon; 
    private DataSource datasource = new DataSource(); 
    private PoolProperties p = new PoolProperties(); 

    public DbPooledConnectionToMSSQL() { 
     super(); 

     dbsource = "jdbc:sqlserver://xxx.xxx.x.x:1433;database=xxx"; 
     String user = "user"; 
     String password = "pass"; 

     p.setUrl(dbsource); 
     p.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
     //p.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolDataSource"); 
     p.setUsername(user); 
     p.setPassword(password); 
     p.setMaxActive(100); 
     p.setInitialSize(10); 
     p.setMaxWait(10000); 
     p.setRemoveAbandonedTimeout(60); 
     p.setMinEvictableIdleTimeMillis(30000); 
     p.setMinIdle(10); 
     datasource.setPoolProperties(p); 
    } 

    public boolean connect() throws ClassNotFoundException, SQLException { 
     try { 
      if (dbCon == null) { 
       System.err.println("Creating Pooled Connection...."); 
       dbCon = datasource.getConnection(); //<-- here is the exception 
       System.err.println("!!! Pooled Connection creation OK"); 
      } else { 
       System.err.println("!!! Connection EXIST not creation"); 
      } 
     } catch (SQLException e) { 
      return false; 
     } catch (Exception e) { 
      return false; 
     } 
     return true; 
    } 
    //more code below 
} 

Теперь, в моем классе второе место Я инициализирую этот класс и пытаюсь подключиться к моей базе данных, но получаю знаменитое ClassNotFoundException по команде dbCon = datasource.getConnection();

Я уверен, что драйвер подключения на месте, поскольку он уже используется в моем обычном коде jdbc (а не в соединении Объединение) и работает отлично.

Я также попытался использовать com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolDataSource как класс водителя, но я также получаю такое же исключение:

java.sql.SQLException: com.microsoft.sqlserver.jdbc.SQLServerDriver 
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:254) 
    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182) 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:702) 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:634) 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:488) 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:144) 
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:116) 
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:103) 
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:127) 
    at admin.db.DbPooledConnectionToMSSQL.connect(DbPooledConnectionToMSSQL.java:97) 
    ...... 

Caused by: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:270) 
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:246) 

Что мне делать здесь не так? Есть ли другой драйвер jdbc, который мог бы выполнить эту работу?

+0

У вас на самом деле есть драйвер JDBC на пути к классу? –

+0

Yeap, мой старый код также использует этот драйвер и отлично работает – MaVRoSCy

ответ

2

Хорошо, нашел проблему, и ответ довольно прост. Рассматривая спецификацию для PoolProperties, он говорит, что:

setDriverClassName(): Полноценное имя класса Java используемого драйвера JDBC. Водителя должен быть доступны из тех же загрузчика классов, как кот-jdbc.jar

Так что даже водитель был доступен моим приложением, он не был доступен Tomcat. Поэтому размещение драйвера в каталоге $CATALINA_HOME/libs и перезапуск Tomcat решили эту проблему.

Смежные вопросы