@Asynchronous в EJB 3.1 закрывает / освобождает соединение после завершения метода Async - PullRequest
0 голосов
/ 27 августа 2018

В EJB 3.1 мы аннотировали метод с помощью @Asynchronous и использовали Future.get для получения результатов.

Вопрос в том, когда мы делаем future.get (), освобождаются ли соединения с базой данных из пула соединений и ресурсов, которые использовались в этом асинхронном методе?

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Соединения с базой данных закрыты в соответствии с настроенной политикой пула соединений используемого сервера приложений.

Когда речь идет о сессионных компонентах и ​​управляемых контейнером транзакциях, соединение возвращается в конце к объему транзакции вызываемого бизнес-метода.

Поскольку сессионные компоненты с аннотациями @Asynchronous не поддерживают распространение транзакций (например, см. EJB 3.2 spec 4.5.3), новая транзакция создается при каждом вызове бизнес-метода, если метод настроен на REQUIRED или REQUIRES_NEW. Таким образом, эта область транзакции заканчивается возвратом вызываемого бизнес-метода.

0 голосов
/ 27 августа 2018

Есть вероятность, что они есть :) В противном случае использование @Asynchronous быстро приведет к сбою приложения из-за нехватки ресурсов ...

В любом случае, поскольку ресурсы хранятся с использованием локального хранилища потока в Java-ee и как@Asynchronous откладывает выполнение до выделенного потока, используемые там ресурсы (включая JCA Connection - и, следовательно, базу данных) также выделены для выполнения метода @Asynchronous (не унаследованного от потока вызывающего).

...