Где мне установить соединение с базой данных в приложении Struts 2? - PullRequest
0 голосов
/ 21 февраля 2010

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

Где мне включить код установки соединения с базой данных в моем веб-приложении struts2?

1 Ответ

0 голосов
/ 21 февраля 2010

Вы не должны устанавливать соединение с базой данных при запуске веб-приложения. БД прервет соединение, когда оно будет выпущено в течение слишком долгого времени, и это действительно короче (~ 30 минут), чем время жизни среднего веб-приложения (дни, месяцы, годы). Вместо этого настройте источник данных / фабрику DAO на этом этапе. Соединения должны быть получены и закрыты в кратчайшем объеме 1002 *. Обычная идиома JDBC следующая:

public void create(Entity entity) throws SQLException {
    Connection connection = null;
    PreparedStatement statement = null;

    try { 
        connection = database.getConnection();
        statement = connection.prepareStatement(SQL_CREATE);
        statement.setSomeObject(1, entity.getSomeProperty());
        // ...
        statement.executeUpdate();
    } finally {
        if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
        if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
    }
}

Обратите внимание на закрытие в finally. Это предотвращает утечку ресурсов (то есть не закрывает их), когда происходит исключение.

Чтобы улучшить производительность соединения, вы обычно хотите использовать пул соединений. Любой приличный appserver предоставляет эту возможность во вкусе источника данных JNDI. Например, в Tomcat вы можете найти в JNDI Resources HOW-TO как его создать. Между прочим, это не означает, что вам не нужно закрывать их, вам все же необходимо закрыть их в соответствии с обычной идиомой JDBC. В частности, пул соединений возвращает упакованное соединение, которое выполняет в close() что-то вроде следующего:

public void close() throws SQLException {
    if (this.connection is still eligible for reuse) {
        do not close this.connection, but just return it to pool for reuse;
    } else {
        actually invoke this.connection.close();
    }
}

Что касается настройки источника данных (или фабрики DAO) при запуске веб-приложения, существует несколько способов. Один из них использует ServletContextListener, который выполняет задачу в методе contextInitialized(), другой способ - использование bean-объекта с областью действия под управлением Struts2, который выполняет задачу в конструкторе.

Также см. Этот базовый учебник по JDBC / DAO для получения дополнительных советов о том, как правильно начать работу с JDBC (в веб-приложениях).

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