以前我们做项目都是这样分层的
com.a.b.dao
com.a.b.manager
com.a.b.model
com.a.b.action
........
然后事务是直接在manager这层控制的
现在换了新公司,这个是旧项目,分层是
安模块来分的,把ACTION,MANAGER,DAO等类都放到一个包下,这样对事务的控制(用XML来配置)要昨样配呢?
另有个不明的地方。
<tx:advice id="txAdvice"
transaction-manager="myTransactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"
propagation="REQUIRED" />
<tx:method name="find*" read-only="false"
propagation="REQUIRED" />
<tx:method name="*" rollback-for="BusinessException" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="businessService"
expression="execution(* com.bb.manager.*.*(..)) or execution(* com.bb.memberlog.*.*(..)) or execution(* com.bb.cc.dd.*.*(..)) or execution(* com.bb.*.*.*(..)) or execution(* com.bb.exposition.*.*(..)) or execution(* kk.*.*(..)) " />
<aop:advisor pointcut-ref="businessService"
advice-ref="txAdvice" />
</aop:config>
如上面这样配置,假如我有个类(POJO类)里面有简单的get方法,但没有涉及到数据库操作,这个类是在com.bb.manager路径下,也会开启一个事务吗,当执行这个get的方法时?

解决方案 »

  1.   

    你是说把所有要做事务控制的放到一层再做吗?要是不这样做,在原来的基础上做统一事务控制有了的方法吗?另外,如上面这样配置,假如我有个类(POJO类)里面有简单的get方法,但没有涉及到数据库操作,这个类是在com.bb.manager路径下,也会开启一个事务吗,当执行这个get的方法时?这能回答下我,让我理解清楚.谢谢
      

  2.   

    另如果我加多了<tx:method name="*" rollback-for="MyException" />这个
    是不是表示,符合类路径下的所有方法都是会开启一个事务,(这包括有数据库操作与没数据库操作的吗?)这样是不是不合理,性能很不好?
      

  3.   

    当你创建的类(不管是POJO还是服务层的类)只要满足你配置的事务传播特性,都会开启事,所以在使用spring事务时,不同的层要用不同的包来管理。当然,若你使用的spring的版本是基于2.5和2.5以上,也可使用Annotation配置事务,这样就无需将不同的层用不同的包管理了,即使这样不推荐!
      

  4.   

    我现在是采用针对文件我来控制了,不建包了,execution(* com.bb.*.*Service.*(..))因为所有的接口的后缀基本都有Service这个.