各位访客好,请问这样的配置对吗?  TransactionProxyFactoryBean代理方式 和 BeanNameAutoProxyCreator自动代理两种配置 会不会冗余啊? 我的系统有时候会报 ora-00028 you session has been killed 错误 或者 
WARN  2008-09-04 17:58:36,922 [[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'] org.hibernate.util.JDBCExceptionReporter     - SQL Error: 0, SQLState: null
ERROR 2008-09-04 17:58:36,922 [[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'] org.hibernate.util.JDBCExceptionReporter     - Already closed.
WARN  2008-09-04 17:58:36,923 [[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'] org.hibernate.util.JDBCExceptionReporter     - SQL Error: 0, SQLState: null
ERROR 2008-09-04 17:58:36,923 [[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'] org.hibernate.util.JDBCExceptionReporter     - Already closed.
ERROR 2008-09-04 17:58:36,923 [[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'] org.springframework.orm.hibernate3.SessionFactoryUtils     - Could not close Hibernate Session
org.hibernate.exception.GenericJDBCException: Cannot close connection
        at org.hibernate.exception.ErrorCodeConverter.handledNonSpecificException(ErrorCodeConverter.java:92)
        at org.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:80)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
        at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:331)
        at org.hibernate.jdbc.ConnectionManager.cleanup(ConnectionManager.java:262)
        at org.hibernate.jdbc.ConnectionManager.close(ConnectionManager.java:194)
        at org.hibernate.impl.SessionImpl.close(SessionImpl.java:289)
        at org.springframework.orm.hibernate3.SessionFactoryUtils.doClose(SessionFactoryUtils.java:787)
        at org.springframework.orm.hibernate3.SessionFactoryUtils.processDeferredClose(SessionFactoryUtils.java:717)
        at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:192)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
        at com.zjpublic.webapps.filter.SessionOuttimeFilter.doFilter(SessionOuttimeFilter.java:60)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
        at com.zjpublic.webapps.filter.PermissionFilter.doFilter(PermissionFilter.java:91)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
        at com.zjpublic.webapps.filter.LoginFilter.doFilter(LoginFilter.java:147)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
        at cn.com.zjtelecom.sso.client.filter.CASFilter.doFilter(CASFilter.java:352)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3212)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
        at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:1983)
        at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1890)
        at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1344)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
Caused by: java.sql.SQLException: Already closed.
        at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:77)
        at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:180)
        at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.closeConnection(LocalDataSourceConnectionProvider.java:95)
        at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:327)
       
        <bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean> <bean id="txProxyTemplate" name="txProxyTemplate"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
</bean> <bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean> <bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean> <bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>*Service</value>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean> <bean
class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<property name="transactionInterceptor"
ref="transactionInterceptor" />
</bean> <bean id="persistence"
class="com.zjpublic.webapp.persistence.hibernate.PersistenceHibernateImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean> <!-- 公司 -->
  <bean id="companyService" parent="txProxyTemplate">
<property name="target">
<bean 
class="com.zjpublic.service.setting.parameters.impl.CompanyServiceImpl">
<property name="persistence" ref="persistence"></property>
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
</property>
<property name="transactionAttributes">
<props>
<prop key="saveCompany">PROPAGATION_REQUIRED</prop>
<prop key="updateCompany">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
  
  <!-- 部门 -->
   <bean id="departmentService" parent="txProxyTemplate">
<property name="target">
<bean 
class="com.zjpublic.service.setting.parameters.impl.DepartmentServiceImpl">
<property name="persistence" ref="persistence"></property>
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
</property>  
   <property name="transactionAttributes">
<props>
<prop key="saveDepartment">PROPAGATION_REQUIRED</prop>
<prop key="updateDepartment">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
   </bean>
       

解决方案 »

  1.   

    仔细阅读参考spring reference第9章中的内容。先对spring的事务代理机制有了了解再使用。下附一个我这里配置的spring 事务机制的配置:<!-- JPA Transaction manager :JPA事务控制设置-->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
    <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- TransAction Manager :文件配置声明事务管理 -->
    <!-- 
    <aop:config>
    <aop:pointcut id="crudMethods" expression="execution(* simplcore.demo.service.*.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="crudMethods"/>
    </aop:config> 

    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <tx:method name="save" propagation="REQUIRED"/>
    <tx:method name="update" propagation="REQUIRED"/>
    <tx:method name="delete" propagation="REQUIRED"/>
    </tx:attributes>
    </tx:advice> 
    -->

    <!-- TransAction Manager :注释配置声明事务管理 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>