Настройте пул соединений Apache dbcp2 в tomcat 7.x

Я работаю над устаревшим приложением, которое использует Tomcat 7.0.64, и мы хотим настроить пул соединений apache dbcp2 в качестве ресурса в Tomcat. Приложение работает под управлением Spring 4.x и Hibernate 4.x. После прочтения документации Tomcat, когда я пытаюсь получить доступ к пулу соединений dbcp2 из приложения Spring, я получаю следующее исключение:

javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory]

Почему используется org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory, хотя атрибут фабрики, добавленный в server.xml, имеет тип org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory. Ниже приведены подробности конфигураций -

Добавлено следующее в server.xml -

<GlobalNamingResources>
    <Resource name="jdbc/mytestDB"
    auth="Container"
    factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
    type="javax.sql.DataSource"
    username="test"
    password="test"
    driverClassName="oracle.jdbc.driver.OracleDriver"
    description="test db"
    url="jdbc:oracle:thin:@mytestDB:1521/mytestDB"
    maxActive="15"
    maxIdle="5"/>
</GlobalNamingResources>

В web.xml добавлено следующее -

 <resource-ref>
     <description>PVO Database</description>
     <res-ref-name>jdbc/mytestDB</res-ref-name>
     <res-type>javax.sql.DataSource</res-type>
     <res-auth>Container</res-auth>
 </resource-ref>

Добавлены следующие зависимости maven -

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-dbcp2</artifactId>
    <version>2.8.0</version>
</dependency>           

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-dbcp</artifactId>
<version>8.5.4</version>
</dependency>           
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.8.1</version>
</dependency>

В тестовом классе добавлено следующее -

Context initContext = new InitialContext(); 
Context envContext = (Context)initContext.lookup("java:comp/env");
DataSource ds = envContext.lookup("jdbc/mytestDB"); // This line gives the above mentioned error.    
Connection connection = ds != null ? ds.getConnection() : null;

person NJavalearner    schedule 30.09.2020    source источник


Ответы (1)


Устранена проблема путем добавления следующего свойства JVM в источники данных tomcat -configure, которые должны быть получены через JNDI -

JAVA_OPTS = $ {JAVA_OPTS} -

Djavax.sql.DataSource.Factory = org.apache.commons.dbcp2.BasicDataSourceFactory

Однако мы решили обновить версию tomcat.

person NJavalearner    schedule 05.10.2020