Нужна помощь в выяснении облегченной платформы Java EE - PullRequest
1 голос
/ 14 марта 2012

У нас есть старый и большой проект Java EE, где в некоторых местах из-за плохого кодирования соединения с базой данных не были должным образом закрыты / или не очищены в блоке catch / finally.

Мы ограничили наш пул подключений к базе данных 100 подключениями. Иногда случается, что соединение остается открытым и используются все 100 соединений, поэтому приложение зависает. Я пытаюсь реструктурировать этот проект, очевидно, я позабочусь об этом плохом коде, когда попаду туда, мне интересно, есть ли какая-либо облегченная среда Java EE, которая автоматически закрывает это открытое соединение БД без написания conn.close () или session.close ().

Может быть, что-то вроде Django, где каждое соединение с БД закрывается в конце каждого цикла запрос / репозиторий.

Я знаю, что могу использовать такие инструменты, как p6spy и IronTrack SQL, для поиска операторов, которые не закрываются, но меня больше интересуют фреймворки, так как этот проект не использует их, и я пытаюсь интегрировать этот проект с рамкой.

Ответы [ 3 ]

1 голос
/ 14 марта 2012

В Java 7 есть попытка с ресурсом, которая может помочь. Взгляните

http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

http://docs.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html

Здесь Java 7 Автоматическое управление ресурсами JDBC (оператор try-with-resources) Вы можете задать аналогичный вопрос.

Проверка на наличие утечки соединения. Я уверен, вы найдете некоторые инструменты для этого.

0 голосов
/ 18 марта 2012

Облегченный подход в Java EE заключается в использовании простых компонентов на основе POJO, называемых EJB, которые выполняют работу с БД.

С ними во многих или во всех случаях соединение с БД - это то, что полностью обрабатывается для вас за прикрытием сервера.

Например (при условии, что ваши запросы на данный момент являются собственным SQL):

@Stateless
public class MyBean {

    @PersistenceContext
    private EntityManager entityManager;

    public void doDBWork() {
        entityManager.createNativeQuery("update foo set a = 1").executeUpdate();
    }
}

В этом примере при вызове doDBWork транзакция автоматически начинается и заканчивается, когда вы покидаете этот метод. Где-то посередине соединение извлекается из пула соединений и возвращается к нему. Код автоматически полностью безопасен перед лицом исключений или одновременного доступа.

0 голосов
/ 15 марта 2012

Я думаю, что вы должны пройти через пару различных фреймворков, должны быть доступны демоверсии, если вы ищете их и выбираете ту, которая наиболее соответствует вашим текущим и ближайшим будущим потребностям. Мне лично нравятся Primefaces / Hibernate (если вы в JSF).

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