У меня есть приложение Java, которое планирует выполнение задания cron каждые 1 мин. Он работает на Glassfish 4. Мы используем Hibernate с JTA Entity Manager, который управляется контейнером для выполнения запросов в базе данных SQL Server.Приобретенные соединения резко крутятся, приводя к сбою сервера
JDBC Connection Параметры пула являются:
Начальный и минимальный размер пула: 16
Максимальный размер пула: 64
Pool Resize Количество: 4
Idle Timeout: 300
Макс Время ожидания: 60000
JDBC Connection Pool Статистика после 22 часов работы:
NumConnUsed 0count
NumConnAcquired 14404count
NumConnReleased 14404count NumConnCreated 16count
NumConnFree 16count
количество приобретаемых соединений продолжает увеличиваться и происходит сбой Glassfish 4 примерно через 10 дней с исключением ниже.
RAR5117: Не удалось получить/создать соединение из пула соединений [com.beonic.tiv5]. Причина: com.sun.appserv.connectors.internal.api.PoolingException: java.lang.RuntimeException: Got исключение во время XAResource.start:
Пожалуйста, укажите, как избежать Glassfish аварии.
Вы можете поместить код задания работает? Закрываете ли вы закрытие хранилища сохраняемости? – Gatusko
В соответствии с документацией «Контейнер с управляемым консистентным контентом - как указано в названии - управляется корпоративным контейнером. Контейнер несет ответственность за встраивание контекста настойчивости в компоненты предприятия и также несет ответственность за его удаление в конце текущего сделка." Мы не можем явно закрыть менеджеров сущностей в транзакциях, управляемых контейнерами, так как это вызовет IllegalStateException. – Rashmi
Это пример кода примера: public Insight findInsightByName (String name) { \t Context ic; \t EntityManager em; \t Insight loc = null; \t try { \t \t ic = new InitialContext(); \t \t em = (EntityManager) ic.lookup (kTIv5PU); \t \t LOC = (Инсайт) em.createQuery ("выберите д из Insight г ГДЕ d.name =: имя ") \t \t \t .setParameter (" название", название) .getSingleResult(); \t \t \t } \t улов (NamingException ех) {(() TInsightDAO.class.getName) Журнал \t \t Logger.getLogger (Level.SEVERE, нулевой, ех). \t} \t finally { \t \t em = null; \t \t ic = null; \t} \t return loc; } – Rashmi