应用事务管理Spring

时间:2010-03-10 10:00:57

标签: spring transactions

我在spring框架上运行了一个j2ee应用程序。我正在尝试使用aop应用事务管理,但显然它不起作用。我正在尝试将事务应用于名为RegisterBLogic的类中的函数,函数名为execute(ParamObject obj)。我的函数插入到数据库中。我还抛出了一个异常我的函数来强制抛出异常。

内部userManagerContext:

  <bean id="RegisterBLogic"
     scope="singleton"  
    class="jp.co.anicom.fw.web.usermanager.blogic.RegisterBLogic">
     <property name="queryDAO"
     ref="queryDAO" />   <property
     name="updateDAO" ref="updateDAO" /> 
    </bean>

在ApplicationContext中                                              

  <bean id="TerasolunaDataSource"  class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="PrototypeDataSource" />
  </bean>
 <tx:advice id="transactionInterceptor" transaction-manager="transactionManager">
   <tx:attributes>
   <tx:method name="insert*" propagation="REQUIRED"
    rollback-for="java.lang.Exception" />
   <tx:method name="execute*" propagation="REQUIRED"
    rollback-for="java.lang.Exception" />
   <tx:method name="*" propagation="REQUIRED" read-only="true" />
  </tx:attributes>
 </tx:advice>
 <!-- AOPの設定 -->
 <aop:config>
  <aop:pointcut id="blogicBeans" expression="bean(*BLogic)" />
  <aop:pointcut id="serviceBeans" expression="bean(*Service)" />
  <aop:advisor pointcut-ref="blogicBeans" advice-ref="transactionInterceptor" />
  <aop:advisor pointcut-ref="serviceBeans" advice-ref="transactionInterceptor" />
 </aop:config>

是的,这些豆子已经存在了。我在userManagerCOntext.xml下有这个bean声明。这个xml通过

加载到struts配置中
 <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
  <set-property property="contextConfigLocation"
   value="/WEB-INF/userManager/userManagerContext.xml"/>

 </plug-in>

我发现了问题。目前我正在使用JNDI的数据源。                类= “org.springframework.jndi.JndiObjectFactoryBean” &GT;              

我将其更改为普通数据源,并将属性defaultAutoCommit设置为false

    <bean id="dataSource"
    class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName"
        value="oracle.jdbc.OracleDriver" />
    <property name="url"
        value="jdbc:oracle:thin:@192.168.178.82:1521:anicom" />
    <property name="username" value="jay" />
    <property name="password" value="jay" />
    <property name="initialSize" value="5" />
    <property name="maxActive" value="10" />
    <property name="defaultAutoCommit" value="false" />
           </bean>

如何使用JNDI数据源,但能够将与defaultAutoCommit类似的属性设置为false。我正在使用Oracle weblogic服务器,我的数据源存储在通过JNDI访问的

1 个答案:

答案 0 :(得分:1)

首先,这个XML格式不正确(应该是</tx:advice>)。

处理此配置时,您要在AOP中包装的bean是否已存在?