精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-10-13
我的struts2配置,间接实现零配置
上一篇然后因为业务需求,需要对action实现事务,结果发现,通过通配符配置的action,因为是通过struts2 的自动装配,没有在struts2和spring2的配置文件中声明,经测试,在其他配置在spring中的bean中 是无法使用struts2的action的,会报nullpointer错误,所以我现在怀疑,在spring2中做的声明式 事务,可能对action也没有作用 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-10-13
引用 在其他配置在spring中的bean中
为什么bean要调action
是无法使用struts2的action的 |
|
返回顶楼 | |
发表时间:2007-10-13
最好专门给action的事务配一个事务拦截器,楼主可以试试这个方法。
搜到一段代码: /* * Created on 2006-5-20 * */ package com.wolfsquare.core.webwork.interceptor; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.DefaultTransactionDefinition; import com.opensymphony.xwork.ActionInvocation; import com.opensymphony.xwork.interceptor.Interceptor; import com.wolfsquare.core.Application; /** * 控制Action级的事务 * * @author wolfsquare * */ public class ActionTransactionInterceptor implements Interceptor { private DefaultTransactionDefinition def = new DefaultTransactionDefinition(); private PlatformTransactionManager transactionManager = null; public void destroy() { } public void init() { def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); // TODO 获取当前事务管理器,似乎Spring框架有更好的方式. transactionManager = (PlatformTransactionManager) Application .getInstance().getContainer() .getComponent("transactionManager"); } public String intercept(ActionInvocation ai) throws Exception { String ret = null; TransactionStatus status = transactionManager.getTransaction(def); try { ret = ai.invoke(); transactionManager.commit(status); } catch (Exception e) { transactionManager.rollback(status); throw e; } return ret; } } |
|
返回顶楼 | |
发表时间:2007-10-13
恩,跟我现在的思路一样,自己仿着Struts2的MethodFilterInterceptor写了一个,加入事务控制。
Struts2的MethodFilterInterceptor只能匹配确定的方法名,不能识别通配符,所以自己写了一个。 |
|
返回顶楼 | |
发表时间:2007-10-13
另外,本来想测试清楚spring2的声明式事务到底对struts2的自动装配的action是否有效,结果按着spring2的文档,基于aop方式配置多个pointcut,始终提示错误,不知道算不算是spring2的bug
|
|
返回顶楼 | |
发表时间:2007-10-13
使用spring可以将事务通过声明方式配置到action类的方法上,但是对于抛出的异常怎么处理,难道直接抛给客户?至少没有配置到service层上的那样灵活。
|
|
返回顶楼 | |
发表时间:2007-10-13
在action中进行事务控制有意义吗?action不应该封装业务逻辑。
|
|
返回顶楼 | |
发表时间:2007-10-13
action当然不应该封装业务逻辑,但是action是controller,比如在
一个action里面可能会由几个Business Service的方法组成一个流程, 如果仅对service的方法实现事务控制,那如果流程中某一个service 的方法出现了问题,流程中之前调用的其他service怎么回滚呢。 |
|
返回顶楼 | |
发表时间:2007-10-14
Action抛出的异常会马上被专门的处理类捕获掉,声明式的事务应该无法正确的回滚。
|
|
返回顶楼 | |
发表时间:2007-10-15
colin4k 写道 action当然不应该封装业务逻辑,但是action是controller,比如在
一个action里面可能会由几个Business Service的方法组成一个流程, 如果仅对service的方法实现事务控制,那如果流程中某一个service 的方法出现了问题,流程中之前调用的其他service怎么回滚呢。 这段流程是否可以移到一个单独的组件中,然后对该组件进行事务控制? |
|
返回顶楼 | |