Sessões de anotação da mola hibernada não sendo fechadas / liberadas

Eu 'herdei' um projeto que usa anotações do Spring para gerenciar transações / sessões com o Hibernate. Ou pelo menos deve ser. Atualmente, as sessões do Hibernate nunca são liberadas (elas são definidas como FLUSH_MODE_NEVER) e os DAO precisam ser liberados manualmente para que todos os dados sejam gravados no banco de dado

Também todos os objetos DTO permanecem residentes na memória do hibernate, levando eventualmente a um erro OutOfMemor

Creio que preciso informar ao Spring / Hibernate para fechar a sessão ou confirmar a transação. Na minha classe de controlador, tenho o método anotado para lidar com as solicitações:

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    ...
    ...
}

e no arquivo applicationContetxt.xml, acredito que configurei o gerenciador de transações do hibernate e diga ao spring para usar as anotações:

<!-- hibernate3 transaction manager -->
<bean id="transactionManagerLocal" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="dataSource" ref="${local.data.source}" />
    <property name="sessionFactory" ref="localSessionFactory" />
</bean>

<!-- Demarcate using @Transactional annotation -->
<tx:annotation-driven transaction-manager="transactionManagerLocal" order="200" />

Não só tenho certeza de que a configuração está incorreta pelo modo como os dados não são gravados no banco de dados sem chamar manualmente o flush em cada um dos DAO, a partir do arquivo de log, podemos ver que o gerenciador de transações está com o flushing e o encerramento da sessão Desativado

INFO  [http-8080-2] TransactionFactoryFactory - Transaction strategy: org.springframework.orm.hibernate3.SpringTransactionFactory
INFO  [http-8080-2] TransactionManagerLookupFactory - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
INFO  [http-8080-2] SettingsFactory - Automatic flush during beforeCompletion(): disabled
INFO  [http-8080-2] SettingsFactory - Automatic session close at end of transaction: disabled

O que precisa ser feito para que o Spring / hibernate libere automaticamente os DAOs e / ou feche a sessão para impedir que grandes quantidades de memória sejam usadas pelo Hibernate?

cheers Dan

<!-- MySQL/InnoDB session factory -->
<bean id="localSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="${local.data.source}"/>
    <property name="mappingResources">
        <list>
            <value>net/company/projectname/domain/ExchangeRate.hbm.xml</value>
            <!-- Other  -->

        </list>
    </property>

   <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <prop key="hibernate.connection.zeroDateTimeBehavior">convertToNull</prop>
            <!-- 
            DOES NOTHING
            <prop key="hibernate.transaction.flush_before_completion">true</prop>
            <prop key="hibernate.transaction.auto_close_session">true</prop>
            -->
        </props>
    </property>
</bean>

<!-- hibernate3 transaction manager -->
<bean id="transactionManagerLocal" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="dataSource" ref="${local.data.source}" />
    <property name="sessionFactory" ref="localSessionFactory" />
</bean>


<!-- Demarcate using @Transactional annotation -->
<tx:annotation-driven transaction-manager="transactionManagerLocal" order="200" />

<bean id="exchangeRateDAO" class="net.company.project.dao.hibernate.impl.ExchangeRateDAOImpl">
     <property name="sessionFactory" ref="localSessionFactory"/>
 </bean>     

questionAnswers(8)

yourAnswerToTheQuestion