一个action操作两个service,其中一个报错,如何保证事务的一致性?

一个action操作两个service,其中一个报错,如何保证事务的一致性?问题里说的事务是指数据持久化时候的事务么??还是有其他的意思???... 一个action操作两个service,其中一个报错,如何保证事务的一致性?
问题里说的事务是指 数据持久化 时候的事务么??
还是有其他的意思???
展开
 我来答
Nigel_FB
推荐于2018-05-17 · TA获得超过1386个赞
知道小有建树答主
回答量:470
采纳率:0%
帮助的人:393万
展开全部
你可以把这两个操作写在一个Service中,一般一个Action方法中除了使用get/load以外,应该只操作一个Service, 否则就是两个事务了.
要不你也可以自己写一个反射的Action类,每次调用Action自动打开一个和数据库的会话,里面怎么操作不管,当Action返回之后再commit,就可以保证事务的一致性了.
比如我用的是Struts + Hibernate,在Action中的execute中写:
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
ActionForward forward = null;
String methodStr = mapping.getParameter(); // 根据parameter名字的不同, 调用不同的方法
Class[] types = new Class[] { ActionMapping.class, ActionForm.class, HttpServletRequest.class, HttpServletResponse.class, Session.class};
Session session = null; // 声明会话
try {
session = HibernateSessionFactory.getSession();
session.beginTransaction();
Object[] params = new Object[] { mapping, form, request, response, session }; // 向Action方法中传递和数据库的会话, 这个会话可以保证事务的完整性
Method method = this.getClass().getMethod(methodStr, types);
if (method != null) {
forward = (ActionForward) method.invoke(this, params);
session.getTransaction().commit(); // 执行成功, 则提交
}
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback(); // 出现错误就全部回滚
}
return forward;
}
这样Action只要继承这个类, 就可以在自己的方法中获得到一个Session, 用这个session怎么操作数据库, 都可以保证事务的完整性了.
中国人民很行了
2009-07-14 · TA获得超过344个赞
知道小有建树答主
回答量:191
采纳率:0%
帮助的人:147万
展开全部
在service中新写一个满足action需求的方法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式