Пул соединений Tomcat, установить драйвер jdbc для веб-приложения - PullRequest
3 голосов
/ 20 мая 2010

Я создаю веб-приложение с Tomcat 6 в качестве контейнера и пытаюсь использовать пул соединений. Драйвер jdbc, который я использую: jtds-1.2.2 .
Пул работает нормально, когда jar драйвера находится под ${Catalina_Home}/lib, но мой хостинг-провайдер не позволил бы мне сделать это.

Я получаю исключение CNF, когда драйвер помещен в WEB-INF/lib.

Может кто-нибудь предложить решение, при котором мне не нужно будет обращаться к установке tomcat?

Ответы [ 2 ]

5 голосов
/ 20 мая 2010

Если у вас нет контроля над сервером, вы потерялись. Просто создайте пул соединений самостоятельно, а не позволяйте контейнеру делать это.

Я предлагаю использовать c3p0 для этого (что намного лучше, чем встроенный DBCP Tomcat, поскольку он привязан к одному потоку). Поместите библиотеки c3p0 в /WEB-INF/lib и создайте его согласно его документации :

ComboPooledDataSource dataSource = new ComboPooledDataSource(); 
dataSource.setDriverClass("org.postgresql.Driver"); 
dataSource.setJdbcUrl("jdbc:postgresql://localhost/testdb");
dataSource.setUser("dbuser");
dataSource.setPassword("dbpassword"); 
// ...

Connection connection = null;
// ...
try {
    connection = dataSource.getConnection();
    // ...
} finally {
    // ...
    if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {} // Always close resources in finally!
}
3 голосов
/ 20 мая 2010

Чтобы использовать пул соединений Tomcat, вы должны скопировать jar-файл драйвера JDBC в $CATALINA_HOME/lib (как указано в документации ), чтобы класс драйвера был виден через Общий загрузчик классов или DBCP не сможет его найти, поэтому ClassNotFoundException. Иерархия загрузчиков классов Tomcat показана ниже:

      Bootstrap
          |
       System
          |
       Common
       /     \
  Webapp1   Webapp2 ... 

И библиотеки из WEB-INF/lib не видны из загрузчика классов Common (что хорошо).

Если вы не можете скопировать драйвер в $CATALINA_HOME/lib, вы не сможете использовать пул соединений Tomcat. В этом случае вам придется использовать автономный пул соединений (и связать его с вашим драйвером в WEB-INF/lib). И я второй BalusC здесь, я бы использовал C3P0.

...