[英]connection pool in wildfly-SWARM with postgresql
我正在使用postgres,wildfly-swarm,hibernate,而且我的交易是由bean管理的。
我的project-defaults.yml數據源:數據源:部分
Adadawdadsa:
driver-name: postgresql
connection-url: dadadasdadas
user-name: aawdwaasda
password: waddsawdas
jta: true
use-java-context: true
pool-name: awdasdadwaadads
min-pool-size: 10
initial-pool-size: 15
max-pool-size: 40
pool-prefill: false
validate-on-match: true
use-fast-fail: false
connection-checker-class-name: org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
check-valid-connection-sql: "SELECT 1;"
exception-sorter-class-name: org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter
connection-properties: CharacterEncoding/ UTF-8 UseUnicode/true
在模擬了應用程序和postgres之間的連接斷開(關閉DB,iptables丟棄數據包等,之后執行一些請求然后再次啟動DB或清除iptables丟棄規則)之后,DB正常了,但是Hibernate / swarm無法找到連接不再...有人可以告訴我我做錯了什么嗎?
編輯:添加堆棧跟蹤
2017-11-23 15:16:03.180錯誤[PgSinkTask.paymentResultToJPA.0] PgSinkTask.paymentResultToJPA.0:重試提交時發生異常::javax.persistence.PersistenceException:org.hibernate.exception.GenericJDBCException:無法獲取JDBC連接2017 -11-23 15:16:03.180錯誤[PgSinkTask.paymentResultToJPA.0] PgSinkTask.paymentResultToJPA.0:重試提交時發生異常:javax.persistence.PersistenceException:org.hibernate.exception.GenericJDBCException:無法在org上獲取JDBC連接。 org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602)處的hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1692)org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl。 com.scheidtbachmann.fcs.idbt.datamart.sink.JPASinkTask.setConnectorStatus(JPASinkTask.java:297)上org.hibernate.jpa.spi.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:1171)上的java:1608) .fcs。 com.scheidtbachmann.fcs.idbt.datamart.sink.JPASinkTask.flush(JPASinkTask.java:328)上的idbt.datamart.sink.JPASinkTask.errorHandler(JPASinkTask.java:423)com.scheidtbachmann.fcs.idbt.datamart。在com.scheidtbachmann.fcs.idbt.datamart.sink.JPASinkTask.run(JPASinkTask.java:144)處的sink.JPASinkTask.getRecord(JPASinkTask.java:182)在java.lang.Thread.run(Thread.java:748)在org.glassfish.enterprise.concurrent.ManagedThreadFactoryImpl $ ManagedThread.run(ManagedThreadFactoryImpl.java:250)上由:org.hibernate.exception.GenericJDBCException:無法在org.hibernate.exception.internal.StandardSQLExceptionConverter.convert( org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109)上的StandardSQLExceptionConverter.java:47)org.org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:95)上的org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109) .hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:90)在 org.hibernate.engine.jdbc上的org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:112)在org.hibernate.engine.jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:47) org.hibernate.engine.jdbc.internal.StatementPreparerImpl $ StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:172)上的internal.StatementPreparerImpl $ 5.doPrepare(StatementPreparerImpl.java:146)在org.hibernate.engine.jdbpreparerer。 (StatementPreparerImpl.java:148)在org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1929)在org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1898)在org.hibernate.loader.Loader。在org.hibernate.loader.Loader.doQuery(Loader.java:919)在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:336)在org.hibernate.loader.Loader處的executeQueryStatement(Loader.java:1876) .doQueryAndInitializeNonLazy 在org.hibernate.loader.Loader.loadEntity(Loader.java:2204)在org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:60)在org.hibernate.loader的Collections(Loader.java:306) org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3967)的org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:508)的.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:50) )在org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:478)在org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:219)在org.hibernate.event.internal.DefaultLoadEventListener處。 org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:121)的org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:89)的proxyOrLoad(DefaultLoadEventListener.java:278)內部 org.org.hibernate.internal.SessionImpl.access $ 2600(SessionImpl.java:164)的sionImpl.fireLoad(SessionImpl.java:1129)org.org.org.hibernate.internal.SessionImpl $ IdentifierLoadAccessImpl.load(SessionImpl.java:2696) org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:290)處的hibernate.internal.SessionImpl.get(SessionImpl.java:980)在org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java: 170)位於org.hibernate.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:69)位於org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:840)位於org.hibernate.internal.SessionImpl.merge(SessionImpl org.hibernate.internal.SessionImpl.merge(SessionImpl.java:827)上的.java:822)org.hibernate.jpa.spi.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:1161)上的... java省略了7個常見框架:java.sql.SQLException:javax.resource.ResourceException:IJ000460:檢查f時出錯 或在org.org.jboss.as.connector.subsystems.datasources.WildFlyDataSource.getConnection(WildFlyDataSource.java:66)處的org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:146)處的事務。 org.hibernate.internal.AbstractSessionImpl $ NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:386)處的hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.java:122(DatasourceConnectionProviderImpl.java:122)在org.hibernate.resource.jdbc.internal處LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:87)...省略了39個共同的框架造成原因:javax.resource.ResourceException:IJ000460:在org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection( TxConnectionManagerImpl.java:424)(位於org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:747)位於org.jboss.jca.adapter s.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:138)...省略了43個常見框架造成原因:javax.resource.ResourceException:IJ000459:事務未激活:tx = TransactionImple <ac,BasicAction:0:ffffc0a83842:6e69d97c :5a16d4f3:18狀態:ActionStatus.ABORTED>在org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:408)...省略了45個通用框架
編輯:添加了persistence.xml
<persistence-unit transaction-type="JTA" name="dadsadsadsa">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>java:jboss/datasources/dadsadsadsaas</jta-data-source>
<properties>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.id.new_generator_mappings" value="false"/>
<property name="db.migration.action" value="validate-migrate"/>
<property name="db.migration.sql.prefix" value="adadsadsadsa-"/>
</properties>
</persistence-unit>
Hibernate的內部連接池算法是基本的,用於開發和測試目的。 使用第三方池以獲得最佳性能和穩定性。
有關更多詳細信息,請參閱有關連接池的參考 。 我發現它很有用。
-
獲取hibernate-c3p0.jar
要將c3p0與Hibernate集成,您需要hibernate-c3p0.jar,可從JBoss存儲庫中獲取它。 pom.xml
JBoss儲存庫http://repository.jboss.org/nexus/content/groups/public/
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.6.3.Final</version> </dependency> <!-- Hibernate c3p0 connection pool --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> <version>3.6.3.Final</version> </dependency>
配置c3p0屬性要配置c3p0,請將c3p0配置詳細信息放入“ persistence.xml”中,如下所示:
... <properties> <!-- Configuring JDBC properties --> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/jpa_example" /> <property name="javax.persistence.jdbc.user" value="root" /> <property name="javax.persistence.jdbc.password" value="my_root_password" /> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> <!-- Hibernate properties --> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> <property name="hibernate.hbm2ddl.auto" value="validate" /> <!-- Configuring Connection Pool --> <property name="hibernate.c3p0.min_size" value="5" /> <property name="hibernate.c3p0.max_size" value="20" /> <property name="hibernate.c3p0.timeout" value="500" /> <property name="hibernate.c3p0.max_statements" value="50" /> <property name="hibernate.c3p0.idle_test_period" value="2000" /> </properties>
也許c3p0-JDBC3連接和語句池參考也將有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.