Соединение с базой данных веб-службы Java - PullRequest
0 голосов
/ 25 февраля 2019

Я реализовал веб-сервис java, и внутри него есть класс DbUtil, который я использую в потоке для подключения к базе данных Oracle.Проблема заключается в том, что при развертывании веб-службы в Tomcat возникает ошибка закрытого соединения.

    1106] ERROR xac.atws.service - SQL exception, while inserting request to DB. EX :
java.sql.SQLRecoverableException: Closed Connection
    at oracle.jdbc.driver.PhysicalConnection.prepareCall(PhysicalConnection.java:3672)
    at oracle.jdbc.driver.PhysicalConnection.prepareCall(PhysicalConnection.java:3633)
    at xac.ape.at.ws.DbUtil.insertListMwRequestToDb(DbUtil.java:410)
    at xac.ape.at.ws.jaxb.list.AtListProcessor.run(AtListProcessor.java:34)
    at java.lang.Thread.run(Thread.java:745)

Чтобы кратко объяснить, что я делаю в классе DbUtil, я имею в виду наличие открытых членов класса conn, dbUser,dbPass, connectionUrl, которые заполняются конструктором класса.Затем я использую эти переменные, чтобы открывать и закрывать новое соединение в каждой функции-члене класса.Образ реализации класса dbUtil прилагается в ссылке. Класс DbUtil .

И открытие и закрытие соединения в каждой функции-члене, например: public DbUtil (String connectionUrlTemp, String dbUserTemp, String dbPassTemp) выдает SQLException {

    try {
        //set the private connection variables
        dbUser = dbUserTemp;
        dbPass = dbPassTemp;
        connectionUrl = connectionUrlTemp;
        //initializing the connection
        OracleDataSource ods = new OracleDataSource();
        ods.setUser(dbUser);
        ods.setPassword(dbPass);
        ods.setURL(connectionUrl);
        conn = ods.getConnection();
        AtServiceImpl.loggerAtws.info("[SYSTEM] Successfully connected to DB");
        AtServiceImpl.loggerAtws.debug("[SYSTEM] DB Connection URL : {}", connectionUrl);
    } catch (SQLException e) {
        AtServiceImpl.loggerAtws.error("[SYSTEM] Exception occured while initializing DB connection. EX : ", e);
    }finally {
        if (conn != null) {
            conn.close();
        }
    }
}

public Hashtable<String, Integer> sysConfigPull(String systemName, String functionName) throws SQLException {
    Hashtable<String, Integer> sysConfig = new Hashtable<>();

    try {
        //---- added this section ----
        //initializing the connection
        OracleDataSource ods = new OracleDataSource();
        ods.setUser(dbUser);
        ods.setPassword(dbPass);
        ods.setURL(connectionUrl);
        conn = ods.getConnection();
        //---- end of added section ----

        CallableStatement sqlStatement;
        String SQLTEXT = "begin GETSYSCONFIG(?,?,?); end;";

        sqlStatement = conn.prepareCall(SQLTEXT);
        sqlStatement.setString(1, systemName);
        sqlStatement.setString(2, functionName);
        sqlStatement.registerOutParameter(3, OracleTypes.CURSOR);

        ResultSet rs;

        sqlStatement.executeUpdate();

        rs = (ResultSet)sqlStatement.getObject(3);

        while (rs.next()) {
            sysConfig.put("RETRYCOUNT", rs.getInt("RETRYCOUNT"));
            sysConfig.put("NOTICEID", rs.getInt("NOTICEID"));
            AtServiceImpl.loggerAtws.debug("System Config option: RETRYCOUNT {}, NOTICEID {}",rs.getString("RETRYCOUNT"), rs.getString("NOTICEID"));
        }

    } catch (SQLException e) {
        AtServiceImpl.loggerAtws.error("[SYSTEM] SQL Exception, load system configuration, EX:", e);
    }finally {
        if (conn != null) {
            conn.close();
        }
    }

    return sysConfig;
}

Так что я думаю, что открытие и закрытие соединения в каждой функции-члене может быть причиной ошибки.И если так, то почему?Любая помощь будет оценена.

...