Spring3 + Hibernate + Tomcat7 + MYSQL пул соединений вызывает зависание приложения - PullRequest
0 голосов
/ 03 октября 2011

Я недавно настроил пул соединений в tomcat и заметил как в тестовой среде, так и в моей среде разработчика, что после запуска приложения, скажем, в течение 12 часов, мое приложение зависает. Копаясь немного, я замечаю, что он зависает при первой операции дБ. В моем dev-окружении я получаю SQLException о том, что нет доступных соединений. Используя администратора MYSQL, я вижу, что на самом деле активных соединений вообще нет.

Мой технический стек - Spring3, использующий Hibernate и JPA, а также Hibernate Search для индексации. Соответствующий конфиг выглядит следующим образом:

WebApp / META-INF / context.xml

<Context>
    <Resource name="jdbc/ccforumdb" 
        auth="Container" 
        type="javax.sql.DataSource"
        maxActive="100" 
        maxIdle="30" 
        maxWait="10000" 
        username="ccuser"
        password="ccuser" 
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/ccforum" />
</Context>

web.xml

<resource-ref>
    <description>ccforum db connection</description>
    <res-ref-name>jdbc/ccforumdb</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

applicationContext.xml

<context:annotation-config />
<context:component-scan base-package="wcpackage" />
<tx:annotation-driven transaction-manager="transactionManager" />

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

<util:properties id="appProperties" location="classpath:application.properties" />
<util:properties id="jdbcProperties" location="classpath:jdbc.properties" /> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
    p:entityManagerFactory-ref="entityManagerFactory" />

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
    p:jpaVendorAdapter-ref="jpaAdapter">
    <property name="loadTimeWeaver">
        <bean
            class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
    </property>
    <property name="persistenceUnitName" value="wctemplatePU"></property>
</bean>

<bean id="jpaAdapter"
    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
    p:showSql="#{jdbcProperties['jpa.showSql']}" />

persistence.xml

<persistence-unit name="wctemplatePU" transaction-type="RESOURCE_LOCAL">
    <properties>
        <property name="hibernate.connection.datasource" value="java:comp/env/jdbc/ccforumdb" />

        <property name="hibernate.hbm2ddl.auto" value="${hibernate.hbm2ddl.auto}" />

        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />

        <property name="hibernate.search.default.directory_provider" 
                  value="filesystem"/> 

        <property name="hibernate.search.default.indexBase" 
                  value="lucene/indexes"/> 
    </properties>
</persistence-unit>

Любой свет, который можно пролить на какую-то особенно явную глупость, был бы очень признателен.

редактировать **

дао

public abstract class JpaDao<K, E> implements Dao<K, E> {
    protected Class<E> entityClass;

    @PersistenceContext protected EntityManager entityManager;

    public JpaDao() {
        ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
        this.entityClass = (Class<E>) genericSuperclass.getActualTypeArguments()[1];
    }

    public E update(E entity) { return entityManager.merge(entity); }

    public void persist(E entity) { entityManager.persist(entity); }

    public void remove(E entity) { entityManager.remove(entity); }

    public E findById(K id) { return entityManager.find(entityClass, id); }
}

редактировать **

    2011-10-04 09:02:32,726 [tomcat-http--9] DEBUG org.springframework.orm.jpa.JpaTransactionManager - Creating new transaction with name [com.dstgs.ccforum.biz.JpaTopicService.getById]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; '',-java.lang.Exception
2011-10-04 09:02:32,726 [tomcat-http--9] DEBUG org.springframework.orm.jpa.JpaTransactionManager - Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@5471e] for JPA transaction
2011-10-04 09:02:32,727 [tomcat-http--9] DEBUG org.springframework.orm.jpa.JpaTransactionManager - Exposing JPA transaction as JDBC transaction [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@800bd0]
2011-10-04 09:02:32,742 [tomcat-http--9] TRACE org.springframework.orm.jpa.JpaTransactionManager - Triggering beforeCommit synchronization
2011-10-04 09:02:32,742 [tomcat-http--9] TRACE org.springframework.orm.jpa.JpaTransactionManager - Triggering beforeCompletion synchronization
2011-10-04 09:02:32,742 [tomcat-http--9] DEBUG org.springframework.orm.jpa.JpaTransactionManager - Initiating transaction commit
2011-10-04 09:02:32,742 [tomcat-http--9] DEBUG org.springframework.orm.jpa.JpaTransactionManager - Committing JPA transaction on EntityManager [org.hibernate.ejb.EntityManagerImpl@5471e]
2011-10-04 09:02:32,745 [tomcat-http--9] TRACE org.springframework.orm.jpa.JpaTransactionManager - Triggering afterCommit synchronization
2011-10-04 09:02:32,747 [tomcat-http--9] TRACE org.springframework.orm.jpa.JpaTransactionManager - Triggering afterCompletion synchronization
2011-10-04 09:02:32,747 [tomcat-http--9] DEBUG org.springframework.orm.jpa.JpaTransactionManager - Closing JPA EntityManager [org.hibernate.ejb.EntityManagerImpl@5471e] after transaction
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...