DBCP2 не подключается к базе данных - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь использовать пул соединений в первый раз и написал код следующим образом

Этот код компилируется, но не запускается

import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSource;

public class DB1 {

    private static BasicDataSource ds = null;

    public DataSource setupDataSource() {
        BasicDataSource ds = new BasicDataSource();
        ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
        ds.setUsername("username");
        ds.setPassword("password");
        ds.setUrl("jdbc:oracle:thin:@165.175.28.15:1521/XE");
        return ds;
    }

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

Здесь я попробовал эту статью

import org.apache.commons.dbcp2.BasicDataSource;
import java.sql.Connection;
import java.sql.SQLException;

/**
 * @author ashraf
 *
 */
public class DB {

    private static final String DRIVER_CLASS_NAME = "oracle.jdbc.driver.OracleDriver";
    private static final String DB_URL = "jdbc:oracle:thin:@163.173.29.15:1521/XE";
    private static final String DB_USER = "user";
    private static final String DB_PASSWORD = "pass";
    private static final int CONN_POOL_SIZE = 5;

    private BasicDataSource bds = new BasicDataSource();

    private DB() {
        //Set database driver name
        bds.setDriverClassName(DRIVER_CLASS_NAME);
        //Set database url
        bds.setUrl(DB_URL);
        //Set database user
        bds.setUsername(DB_USER);
        //Set database password
        bds.setPassword(DB_PASSWORD);
        //Set the connection pool size
        bds.setInitialSize(CONN_POOL_SIZE);
    }

    private static class DataSourceHolder {
        private static final DB INSTANCE = new DB();
    }

    public static DB getInstance() {
        return DataSourceHolder.INSTANCE;
    }

    public BasicDataSource getBds() {
        return bds;
    }

    public void setBds(BasicDataSource bds) {
        this.bds = bds;
    }

    public static Connection getOracleConnection() throws SQLException{
        BasicDataSource bds = DB.getInstance().getBds();
        Connection cnn = bds.getConnection();
    return cnn;
    }
}

Это выдает ошибку:

HTTP Status 500 – Internal Server Error
Type Exception Report

Message Servlet execution threw an exception

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

javax.servlet.ServletException: Servlet execution threw an exception
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Root Cause

java.lang.NoClassDefFoundError: DB$DataSourceHolder
    DB.getInstance(DB.java:37)
    DB.getOracleConnection(DB.java:49)
    IndexDAO.displayNewsTicker(IndexDAO.java:55)
    SiteTemplate.newsTicker(SiteTemplate.java:256)
    SiteTemplate.headerButtons(SiteTemplate.java:226)
    Index.doGet(Index.java:55)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Root Cause

java.lang.ClassNotFoundException: DB$DataSourceHolder
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1291)
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
    DB.getInstance(DB.java:37)
    DB.getOracleConnection(DB.java:49)
    IndexDAO.displayNewsTicker(IndexDAO.java:55)
    SiteTemplate.newsTicker(SiteTemplate.java:256)
    SiteTemplate.headerButtons(SiteTemplate.java:226)
    Index.doGet(Index.java:55)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Note The full stack trace of the root cause is available in the server logs.

Это будет мой первый класс пула соединений, но все еще не удастся его исправить.Посоветуйте, пожалуйста, где я делаю ошибку?Любое предложение, пожалуйста

...