У нас есть приложение, работающее на Java 8, Wildfly 10, Hibernate 5.0.10 и Spring 4.3.11.
Мы обновили систему до OpenJDK11, Wildfly 16 и Spring 5.1.0, и все работаеткак и ожидалось.
Но когда мы пытаемся обновить Hibernate до версии 5.3.6 / 7 / 5.4.0, мы сталкиваемся с проблемами при подключении к базе данных.
Ниже приведены утверждения из журналов, которыеЯ могу поделиться.
Unable to acquire JDBC Connection at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)
org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:136)
java.sql.SQLException: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:/RND_XA_DS
at org.jboss.ironjacamar.jdbcadapters@1.4.12.Final//org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:146)
at org.jboss.as.connector@16.0.0.Final//org.jboss.as.connector.subsystems.datasources.WildFlyDataSource.getConnection(WildFlyDataSource.java:64)
at
javax.resource.ResourceException: IJ000655: No managed connections available within configured blocking timeout (30000 [ms])
at org.jboss.ironjacamar.impl@1.4.12.Final//org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool.getConnection(SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:570)
at org.jboss.ironjacamar.impl@1.4.12.Final//org.jboss.jca.core.connectionmanager.pool.AbstractPool.getTransactionNewConnection(AbstractPool.java:714)
at org.jboss.ironjacamar.impl@1.4.12.Final//org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:613)
at org.jboss.ironjacamar.impl@1.4.12.Final//org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:624)
1. Увеличен максимальный размер пула в standalone-full-ha.xml wildfly с 35 до 100.
2. Изменены свойства cfg SessionFactory, измененыконфигурации транзакций со свойствами, поддерживаемыми Hibernate 5.4.0
3.Пробовал все доступные значения стратегии сброса в standalone-full-ha.xml согласно (https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#flushing)
4.Пробовал все доступныеhibernate.connection.handling_mode для SessionFactory (https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#database-connection-handling)
5. С учетом вышеуказанных изменений EAR приложения не удалось успешно развернуть. На этом этапе все проблемы были распространены.
6. Изменения, которыепомог а) сделкаконфигурации в файле persistence.xml, свойство hibernate.transaction.jta.platform изменено на JBossAS. b) Закрытые сеансы, где бы они ни были открыты в коде.
7. Увеличение числа процессов Oracle до 800.
8.Обновлен драйвер OJdbc в ojdbc8.
<xa-datasource jndi-name="java:/RND_XA_DS" pool-name="XYZ" enabled="true" spy="true" use-ccm="false">
<xa-datasource-property name="URL">
jdbc:oracle:thin:@localhost:1521:xe
</xa-datasource-property>
<driver>Oracle11G</driver>
<xa-pool>
<min-pool-size>10</min-pool-size>
<max-pool-size>35</max-pool-size>
<prefill>true</prefill>
<flush-strategy>Gracefully</flush-strategy>
<is-same-rm-override>false</is-same-rm-override>
<interleaving>false</interleaving>
<pad-xid>false</pad-xid>
<wrap-xa-resource>false</wrap-xa-resource>
</xa-pool>
<security>
<security-domain>XYZ</security-domain>
</security>
<validation>
<check-valid-connection-sql>select 1 from dual</check-valid-connection-sql>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
</validation>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</xa-datasource>
####### Свойства SESSIONFACTORY
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
${SESSIONFACTORY.DIALECT}
</prop>
<prop key="hibernate.show_sql">${SESSIONFACTORY.SHOWSQL}</prop>
<prop key="hibernate.current_session_context_class">jta</prop>
<prop key="hibernate.transaction.jta.platform">JBossAS
</prop>
<prop key="hibernate.transaction.coordinator_class">jta</prop>
<prop key="hibernate.connection.handling_mode">DELAYED_ACQUISITION_AND_RELEASE_AFTER_TRANSACTION</prop>
<prop key="jta.UserTransaction">${USER_TRANSACTION}</prop>
</props>
</property>
EAR успешно развертывается в Wildfly, и все операции, выполняемые с приложением, взаимодействующим с базой данных, выполняются успешно.В мгновение ока Hibernate начинает выдавать Unable для получения управляемого соединения