NullPointerException при инициализации пула соединений - PullRequest
3 голосов
/ 20 марта 2020

У меня есть настройки в context.xml, которые содержат информацию для подключения к моей базе данных

<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

        <Resource 
        name="jdbc/*(my username)*" 
        factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
        auth="Container" 
        type="javax.sql.DataSource"
        removeAbandoned="true" 
        removeAbandonedTimeout="30" 
        maxACtive="100"
        maxIdle="30" 
        maxWait="10000" 
        username= *(my username)*
        password= *(my password)*
        driverClassName="com.ibm.db2.jcc.DB2Driver" 
        url="jdbc:db2://(my server host):50000/*(my username)*">
    </Resource>
</Context>

В то время как для пула подключений я создал класс для инициации и для подключения его к базе данных. Ошибка начинается в методе getConnection(). Ошибка NullPointerException при возврате datasource.getConnection()

import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;


public class ConnectionPool {
    private static ConnectionPool pool = null;
    private static DataSource dataSource = null;

    private ConnectionPool() {
        try {
            InitialContext ic = new InitialContext();
            dataSource = (DataSource) ic.lookup("java:/comp/env/jdbc/COMPANY");
            System.out.print(dataSource);
        } catch (NamingException e) {
            System.out.println(e);
        }
    }

    public static synchronized ConnectionPool getInstance() {
        if (pool == null) {
            pool = new ConnectionPool();
        }
        return pool;
    }

    public Connection getConnection() {
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            System.out.println(e);
            return null;
        }
    }

    public void freeConnection(Connection c) {
        try {
            c.close();
        } catch (SQLException e) {
            System.out.println(e);
        }
    }
}

Я проверил соединение с базой данных с помощью перспективной разработки баз данных Eclipse, и мне удалось подключиться и выполнить все запросы.

Кроме того, это дает мне эту ошибку в выводе

SEVERE: Unable to create initial connections of pool.
java.sql.SQLException: No suitable driver found for jdbc:db2://db2.cecsresearch.org:50000/(my username)

Хотя у меня есть файлы библиотеки jar в папке lib и в classpath.

Ответы [ 2 ]

2 голосов
/ 11 апреля 2020

Пожалуйста, загрузите драйвер DB2 Java из https://artifacts.alfresco.com/nexus/content/repositories/public/com/ibm/db2/jcc/db2jcc4/10.1/db2jcc4-10.1.jar и добавьте его в каталог tomcat / lib. Затем перезапустите Tomcat, и у вас должно получиться go !!

0 голосов
/ 11 апреля 2020

nullpointer просто вызвано следующей проблемой:

java.sql.SQLException: No suitable driver found for jdbc:db2://db2.cecsresearch.org:50000/(my username)

Установка драйвера базы данных в $CATALINA_HOME/lib должна решить проблему.

Для получения дополнительной информации, проверьте документы .

driverClassName (String) Полное имя класса Java используемого драйвера JDB C. Драйвер должен быть доступен из того же загрузчика классов, что и tomcat-jdb c .jar

Вы также можете проверить официальные примеры источников данных jndi .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...