#hibernate #jboss #wildfly #jta #wildfly-10
#переход в спящий режим #jboss #wildfly #jta #wildfly-10
Вопрос:
Я использую WildFly V 10.1.0 с базой данных Mysql.
Я определил максимальный размер пула как 100 в конфигурации источника данных в standalone.xml
Но все же я получаю следующее исключение [1];
Я не вижу никаких проблем с сетью. Какие еще настройки мне нужно добавить?
Мой persistence.xml
<persistence-unit name="adb-persistence-unit"
transaction-type="JTA">
<description>Forge Persistence Unit</description>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/testDS</jta-data-source>
<shared-cache-mode>ALL</shared-cache-mode>
<property name="jboss.as.jpa.providerModule" value="org.hibernate:5.2"/>
<property name="hibernate.c3p0.min_size" value="5" />
<property name="hibernate.c3p0.max_size" value="500" />
<property name="hibernate.c3p0.timeout" value="1800" />
<property name="hibernate.c3p0.max_statements" value="100" />
<property name="hibernate.c3p0.idle_test_period" value="3000" />
<property name="hibernate.c3p0.acquire_increment" value="5" />
<property name="hibernate.c3p0.validate" value="false" />
Я открываю сеанс как;
@PersistenceContext
protected EntityManager entityManager;
private Criteria criteria;
private Session session;
session = getEntityManager().unwrap(Session.class);
[1]
/20/2016 9:52:04 AMCaused by: java.sql.SQLException: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:jboss/datasources/testDS
10/20/2016 9:52:04 AM at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:146)
10/20/2016 9:52:04 AM at org.jboss.as.connector.subsystems.datasources.WildFlyDataSource.getConnection(WildFlyDataSource.java:66)
10/20/2016 9:52:04 AM at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
10/20/2016 9:52:04 AM at org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:35)
10/20/2016 9:52:04 AM at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:99)
10/20/2016 9:52:04 AM ... 225 more
10/20/2016 9:52:04 AMCaused by: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:jboss/datasources/testDS
10/20/2016 9:52:04 AM at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:656)
10/20/2016 9:52:04 AM at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:429)
10/20/2016 9:52:04 AM at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:747)
10/20/2016 9:52:04 AM at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:138)
10/20/2016 9:52:04 AM ... 229 more
10/20/2016 9:52:04 AMCaused by: javax.resource.ResourceException: IJ000655: No managed connections available within configured blocking timeout (30000 [ms])
10/20/2016 9:52:04 AM at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool.getConnection(SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:565)
10/20/2016 9:52:04 AM at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getTransactionNewConnection(AbstractPool.java:699)
10/20/2016 9:52:04 AM at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:598)
10/20/2016 9:52:04 AM at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:590)
10/20/2016 9:52:04 AM ... 232 more
10/20/
Редактировать
Источник данных
<datasources>
<datasource jndi-name="java:jboss/datasources/testDS" pool-name="lobDS" enabled="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:mysql://${env.MYSQL_PORT_3306_TCP_ADDR:db.xx.com}:${env.MYSQL_PORT_3306_TCP_PORT:3306}/${env.MYSQL_DATABASE:testdb}?failOverReadOnly=falseamp;amp;maxReconnects=10amp;amp;zeroDateTimeBehavior=convertToNullamp;amp;autoReconnect=trueamp;amp;characterEncoding=UTF-8amp;amp;characterSetResults=UTF-8amp;amp;useUnicode=trueamp;amp;interactiveClient=trueamp;amp;sessionVariables=storage_engine=InnoDB</connection-url>
<driver>mysql</driver>
<pool>
<flush-strategy>IdleConnections</flush-strategy>
<max-pool-size>100</max-pool-size>
</pool>
<security>
<user-name>${env.MYSQL_USER:admin}</user-name>
<password>${env.MYSQL_PASSWORD:ss_password}</password>
</security>
<validation>
<check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
<background-validation>true</background-validation>
<background-validation-millis>60000</background-validation-millis>
</validation>
</datasource>
Комментарии:
1. как выглядит ваша конфигурация источника данных? поскольку свойства hibernate.c3p0.* игнорируются, и он использует источник данных, определенный в подсистеме источника данных сервера.
2. Зачем вам нужен сеанс? (вы должны иметь возможность обрабатывать сохранение только с помощью EntityManager)
3. @ctomc Я предоставил свою настройку источника данных и persistence.xml конфигурация. Как я могу изменить свою конфигурацию тогда?
4. @JohnDonn Я использую Criteria API (не hql) для запроса базы данных. критерии = getSession().createCriteria(getEntityClass());
5. @Ratha вы можете использовать EntityManager для работы с критериями JPA javacodegeeks.com/2013/04 /… . Кроме того, насколько я знаю, в Wildfly стандартным способом сохранения является использование JPA и EntityManager, поэтому я думаю, что лучше избегать работы с Hibernate напрямую, если это действительно не необходимо.