|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2007-10-13
上一篇我的struts2配置,间接实现零配置
然后因为业务需求,需要对action实现事务,结果发现,通过通配符配置的action,因为是通过struts2 的自动装配,没有在struts2和spring2的配置文件中声明,经测试,在其他配置在spring中的bean中 是无法使用struts2的action的,会报nullpointer错误,所以我现在怀疑,在spring2中做的声明式 事务,可能对action也没有作用 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间: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怎么回滚呢。 这段流程是否可以移到一个单独的组件中,然后对该组件进行事务控制? |
|
| 返回顶楼 | |









