Spring + Hibernate - Could not roll back Hibernate transaction

Olá pessoal,

Eu estou passando por esse problema já tem algum tempo, contudo não tenho conseguido chegar a uma conclusão ou msm desconfiança do q finalmente está ocorrendo. Se puderem me dá uma ajuda para descobrir ou ter idéia do q devo procurar, por favor.

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: org.springframework.transaction.TransactionSystemException: Could not roll back Hibernate transaction; nested exception is org.hibernate.TransactionException: JDBC rollback failed
 org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
 org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
 org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
  org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
  org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
  web.WebAccessFilter.doFilter(WebAccessFilter.java:94)
 site.web.filter.DefineLocale.doFilter(DefineLocale.java:33)

root cause

org.springframework.transaction.TransactionSystemException: Could not roll back Hibernate transaction; nested exception is org.hibernate.TransactionException: JDBC rollback failed
 org.springframework.orm.hibernate3.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:512)
 org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:578)
 org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:555)
 org.springframework.transaction.interceptor.TransactionAspectSupport.doCloseTransactionAfterThrowing(TransactionAspectSupport.java:276)
 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:100)
 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
  $Proxy1.listarNoticia(Unknown Source)
 site.web.struts.actions.PortalAction.unspecified(PortalAction.java:51)
 org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:260)
 org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:216)
 org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
 org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
  org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
  org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
  web.WebAccessFilter.doFilter(WebAccessFilter.java:94)
 site.web.filter.DefineLocale.doFilter(DefineLocale.java:33)

root cause

org.hibernate.TransactionException: JDBC rollback failed
 org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:150)
 org.springframework.orm.hibernate3.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:509)
 org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:578)
 org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:555)
 org.springframework.transaction.interceptor.TransactionAspectSupport.doCloseTransactionAfterThrowing(TransactionAspectSupport.java:276)
 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:100)
 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
  $Proxy1.listarNoticia(Unknown Source)
 site.web.struts.actions.PortalAction.unspecified(PortalAction.java:51)
 org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:260)
 org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:216)
 org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
 org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
  org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
  org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 web.WebAccessFilter.doFilter(WebAccessFilter.java:94)
 site.web.filter.DefineLocale.doFilter(DefineLocale.java:33)

root cause

java.sql.SQLException: No operations allowed after connection closed.
  com.mysql.jdbc.Connection.checkClosed(Connection.java:2785)
  com.mysql.jdbc.Connection.rollback(Connection.java:1476)
 org.hibernate.transaction.JDBCTransaction.rollbackAndResetAutoCommit(JDBCTransaction.java:163)
 org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:142)
 org.springframework.orm.hibernate3.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:509)
 org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:578)
 org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:555)
 org.springframework.transaction.interceptor.TransactionAspectSupport.doCloseTransactionAfterThrowing(TransactionAspectSupport.java:276)
 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:100)
 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
  $Proxy1.listarNoticia(Unknown Source)
 site.web.struts.actions.PortalAction.unspecified(PortalAction.java:51)
 org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:260)
 org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:216)
 org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
 org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
  org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
  org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 web.WebAccessFilter.doFilter(WebAccessFilter.java:94)
 site.web.filter.DefineLocale.doFilter(DefineLocale.java:33)

Desde já agredeço

Como estão os mapeamentos dos objetos que estão sendo salvos?

Olá nosredna,

Não dá para eu colocar todos os mapeamentos, até pq são 25 mapeamentos diferentes. ^^ O sistema é grandinho. Vou pôr o Noticia, assim como o AplicationContext e alguns relativos.

Noticia.hbm.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping
>
    <class
        name="site.beans.Noticia"
        table="noticia"
    >
        <cache usage="read-write"/>
        <id
            name="id"
            column="id"
            type="long"
            unsaved-value="null"
        >
            <generator class="native">
              <!--  
                  To add non XDoclet generator parameters, create a file named 
                  hibernate-generator-params-Noticia.xml 
                  containing the additional parameters and place it in your merge dir. 
              --> 
            </generator>
        </id>

        <many-to-one
            name="anexo"
            class="site.beans.Arquivo"
            cascade="all"
            outer-join="auto"
            update="true"
            insert="true"
            column="fk_arquivo"
            not-null="false"
        />

        <property
            name="exibir"
            type="boolean"
            update="true"
            insert="true"
            column="exibir"
            not-null="true"
        />

        <property
            name="link"
            type="string"
            update="true"
            insert="true"
            column="link"
            length="150"
        />

        <many-to-one
            name="texto"
            class="site.beans.MemoTraduzido"
            cascade="all"
            outer-join="auto"
            update="true"
            insert="true"
            column="fk_memo"
            not-null="false"
        />

        <many-to-one
            name="titulo"
            class="site.beans.TextoTraduzido"
            cascade="all"
            outer-join="auto"
            update="true"
            insert="true"
            column="fk_titulo"
            not-null="false"
        />

        <property
            name="dataCad"
            type="date"
            update="true"
            insert="true"
            column="dataCad"
            not-null="true"
        />

        <!--
            To add non XDoclet property mappings, create a file named
                hibernate-properties-Noticia.xml
            containing the additional properties and place it in your merge dir.
        -->

    </class>

</hibernate-mapping>

Para não ficar sem os mapeamentos de Arquivo, MemoTraduzido e Idioma, tô postando aqui tbm.

Arquivo.hbm.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping
>
    <class
        name="site.beans.Arquivo"
        table="arquivo"
    >
        <cache usage="read-write"/>

        <id
            name="id"
            column="id"
            type="long"
            unsaved-value="null"
        >
            <generator class="native">
              <!--  
                  To add non XDoclet generator parameters, create a file named 
                  hibernate-generator-params-Arquivo.xml 
                  containing the additional parameters and place it in your merge dir. 
              --> 
            </generator>
        </id>

        <property
            name="nome"
            type="string"
            update="true"
            insert="true"
            column="nome"
            length="150"
        />

        <property
            name="descricao"
            type="string"
            update="true"
            insert="true"
            column="descricao"
        />

        <property
            name="arquivo"
            type="binary"
            update="true"
            insert="true"
        >
            <column
                name="bytes" 
                sql-type="LONGBLOB"
            />
        </property>

        <!--
            To add non XDoclet property mappings, create a file named
                hibernate-properties-Arquivo.xml
            containing the additional properties and place it in your merge dir.
        -->

    </class>

</hibernate-mapping>

TextoTraduzido.hbm.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping
>
    <class
        name="site.beans.TextoTraduzido"
        table="texto_tradutor"
    >
        <cache usage="read-write"/>
        <id
            name="id"
            column="id"
            type="long"
            unsaved-value="null"
        >
            <generator class="native">
              <!--  
                  To add non XDoclet generator parameters, create a file named 
                  hibernate-generator-params-TextoTraduzido.xml 
                  containing the additional parameters and place it in your merge dir. 
              --> 
            </generator>
        </id>

		<map name="textos" lazy="false" table="textos">
		    <cache usage="read-write"/>
			<key column="fk_texto_tradutor" not-null="true" />
			<map-key-many-to-many column="fk_idioma"
				class="site.beans.Idioma" />
			<element column="texto" type="string" />
		</map>
		
        <!--
            To add non XDoclet property mappings, create a file named
                hibernate-properties-TextoTraduzido.xml
            containing the additional properties and place it in your merge dir.
        -->

    </class>

</hibernate-mapping>

Idioma.hbm.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping
>
    <class
        name="site.beans.Idioma"
        table="idioma"
    >
        <cache usage="read-write"/>
        <id
            name="id"
            column="id"
            type="long"
            unsaved-value="null"
        >
            <generator class="native">
              <!--  
                  To add non XDoclet generator parameters, create a file named 
                  hibernate-generator-params-Idioma.xml 
                  containing the additional parameters and place it in your merge dir. 
              --> 
            </generator>
        </id>

        <property
            name="nome"
            type="string"
            update="true"
            insert="true"
            column="nome"
            length="50"
        />

        <!--
            To add non XDoclet property mappings, create a file named
                hibernate-properties-Idioma.xml
            containing the additional properties and place it in your merge dir.
        -->

    </class>

</hibernate-mapping>

Essas acima são os mapeamentos no banco de dados. Esse aqui abaixo é o do spring.

ApplicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

	<!-- ========================= GENERAL DEFINITIONS ========================= -->

	<!-- Configurer that replaces ${...} placeholders with values from properties files -->
	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location"><value>/WEB-INF/classes/sistema.properties</value></property>
	</bean>
	
	<!-- ========================= PERSISTENCE DEFINITIONS ========================= -->

	<!-- Hibernate SessionFactory -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="mappingResources">
			<list>				
				<value>site/persistencia/hbm/Arquivo.hbm.xml</value>
				<value>site/persistencia/hbm/Evento.hbm.xml</value>
				<value>site/persistencia/hbm/Funcionalidade.hbm.xml</value>
				<value>site/persistencia/hbm/Idioma.hbm.xml</value>
				<value>site/persistencia/hbm/MemoTraduzido.hbm.xml</value>
				<value>site/persistencia/hbm/Noticia.hbm.xml</value>
				<value>site/persistencia/hbm/Parceiro.hbm.xml</value>
				<value>site/persistencia/hbm/Institucional.hbm.xml</value>
				<value>site/persistencia/hbm/Licitacao.hbm.xml</value>
				<value>site/persistencia/hbm/RelatorioGerencial.hbm.xml</value>
				<value>site/persistencia/hbm/Publicacao.hbm.xml</value>
				<value>site/persistencia/hbm/Perfil.hbm.xml</value>
				<value>site/persistencia/hbm/TextoTraduzido.hbm.xml</value>
				<value>site/persistencia/hbm/Usuario.hbm.xml</value>
				<value>site/persistencia/hbm/Browser.hbm.xml</value>
				<value>site/persistencia/hbm/PalavraChave.hbm.xml</value>
				<value>site/persistencia/hbm/Url.hbm.xml</value>
				<value>site/persistencia/hbm/Requisicao.hbm.xml</value>
				<value>site/persistencia/hbm/Sessao.hbm.xml</value>				
				<value>site/persistencia/hbm/PrimeiroAcesso.hbm.xml</value>				
				<value>site/persistencia/hbm/BaseOrigem.hbm.xml</value>				
				<value>site/persistencia/hbm/TipoObjeto.hbm.xml</value>				
				<value>site/persistencia/hbm/Objeto.hbm.xml</value>				
				<value>site/persistencia/hbm/Host.hbm.xml</value>				
			</list>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.connection.driver_class">${hibernate.connection.driver_class}</prop>
				<prop key="hibernate.connection.url">${hibernate.connection.url}</prop>
				<prop key="hibernate.connection.username">${hibernate.connection.username}</prop>
				<prop key="hibernate.connection.password">${hibernate.connection.password}</prop>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
				<prop key="hibernate.use_outer_join">${hibernate.use_outer_join}</prop>
				<prop key="hibernate.max_fetch_depth">${hibernate.max_fetch_depth}</prop>
				<prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
				<prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
			</props>
		</property>
	</bean>

	<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory"><ref local="sessionFactory"/></property>
	</bean>

	<!-- Transactional proxy abstrato -->
	<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
		<property name="transactionManager"><ref local="transactionManager"/></property>
		<property name="transactionAttributes">
			<props>
				<prop key="salvar*">PROPAGATION_REQUIRED</prop>
				<prop key="remover*">PROPAGATION_REQUIRED</prop>
				<prop key="cancelar*">PROPAGATION_REQUIRED</prop>
				<prop key="*">PROPAGATION_NEVER</prop>
			</props>
		</property>
	</bean>
	<!-- ========================= BUSINESS OBJECT DEFINITIONS ========================= -->

	<!-- data access object: Hibernate implementation -->
	<bean id="dao" class="site.persistencia.HibernateDao">
		<property name="sessionFactory"><ref local="sessionFactory"/></property>
	</bean>
	
	<!-- Implementação da fachada para o módulo Usuario -->
	<bean id="siteFacadeImpl" class="site.persistencia.impl.SiteFacadeImpl">
		<property name="dao"><ref local="dao"/></property>		
	</bean>
	
	<!-- Transactional proxy para o módulo Site Facade -->
	<bean id="siteFacade" parent="baseTransactionProxy">
		<property name="target"><ref local="siteFacadeImpl"/></property>		
	</bean>					
</beans>

Bom, acredito que isso dê uma visão geral do sistema, tirando a parte do código msm, caso precise, me fala.

Obrigado

Olá pessoal,

Eu já havia postado esse tópico e cm tenho procurado e não tenho conseguido resolver o problema, estou aqui para perguntar novamente.

Alguém tem idéia do q posso fazer para resolver esse problema de Could not Roll Back?

Agradeço desde já.