Доклад

От антипаттерна к инструменту: скрытая польза открытой сессии

На русском языке

Нам хотелось бы обсудить один вопрос разработки на Spring в связке c JPA.

Одна из самых распространенных проблем производительности здесь — это исчерпание коннекшен пула.

Но как это ни странно, единственный способ управлять жизненным циклом соединения в Spring — это аннотация @Transactional. Ее применение автоматически приводит сразу к трем действиям.

  1. Создание EntityManager.
  2. Резервирование соединения в коннекшн пуле.
  3. Старт физической транзакции в БД.

Единственный способ средствами фреймворка сделать разделяемую сессию (то есть EntityManager) без создания транзакции — это OSIV, что признано антипаттерном большинством специалистов. Получается, что проблема исчерпания соединений в связке Spring с JPA есть, а инструментов для тонкого контроля коннекшенов нет.

Если есть такие абстракции, как сессия, соединения и транзакция, странно, что ими нельзя управлять по отдельности. Мы расскажем, как это исправить.

Доклады