私はテストで正常に動作していますが、今はプロダクションサーバに移動してスイッチを投げる準備ができています。Hibernate/Springトランザクションで古くなったデータベース接続をうまく処理する
アプリケーションが約15分間アイドル状態になると、SpringトランザクションサービスのDB接続が切断されます。あなたがあなたのブラウザでF5をヒットした場合それが起こる後にアプリに来る最初の人は、それが再接続し、うまく動作します、この
org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Cannot open connection
org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:596)
org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)
org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:335)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621)
parity.persistence.DataAccess$$EnhancerByCGLIB$$921ef13.find(<generated>)
parity.model.Configuration.getConfiguration(Configuration.java:84)
parity.model.Configuration.getSetting(Configuration.java:46)
parity.model.Configuration$$FastClassByCGLIB$$8355c3d0.invoke(<generated>)
net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:617)
parity.model.Configuration$$EnhancerByCGLIB$$5e96e8b9.getSetting(<generated>)
parity.model.OnlineStatus.getSiteStatus(OnlineStatus.java:50)
parity.action.site.SiteStatusInterceptor.intercept(SiteStatusInterceptor.java:16)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:434)
root cause
で迎えています。それは春が最初の要求の行に沿って何かをしているように見えます、eekに行きました、私は死んで、そしてdieingの過程で、データベースに再接続します。確信はないけど。
私はこれを解決する方法を探していましたが、私がc3p0またはweblogicを使用していない限り、誰もが無知です。これを修正する方法はありますか?ここに私の設定ファイルがある
はhibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="connection.autocommit">false</property>
<property name="show_sql">false</property>
<property name="use_sql_comments">false</property>
</session-factory>
</hibernate-configuration>
トランザクション-service.xmlに:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="boardingSessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocations">
<list>
<value>classpath:hibernate/boarding-hibernate.cfg.xml</value>
<value>classpath:boarding-hibernate.cfg.xml</value>
</list>
</property>
<property name="configurationClass">
<value>org.hibernate.cfg.AnnotationConfiguration</value>
</property>
</bean>
<bean id="boardingTransactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="boardingSessionFactory" />
<qualifier value="boarding" />
</bean>
<tx:advice id="boardingTxAdvice" transaction-manager="boardingTransactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="*" />
</tx:attributes>
</tx:advice>
</beans>
ノート、私の休止は2つのファイル、グローバル扱うAPIの1を使用していますアプリケーション固有の設定を持つアプリケーション自体に1つ、ここでの目的のためには、グローバルなものがすべて重要です。
私は、春のトランザクションサービスが接続プーリングを処理しているという印象を受けました。プーリングを処理する実際の休止状態であることを教えてください。 – scphantm
Springのドキュメントのこのセクションを読む:http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#jdbc-datasource、これです。 Spring内で接続プールを使用してDataSourceをコンフィグレーションしない場合、LocalSessionFactoryBeanは、LocalSessionFactoryBean javadocで説明されているように、Hibernateコンフィグレーションファイルでコンフィグレーションしたものを使用します。http://static.springsource.org/spring/docs /3.1.x/javadoc-api/org/springframework/orm/hibernate3/LocalSessionFactoryBean.html –
ええ、私は本当にテストでこれを見つけてください。ああ、少なくともc3p0の実装は、それほど大きな取引ではありません。 – scphantm