读书人

action可不可以直接使用spring的声明式

发布时间: 2012-11-03 10:57:44 作者: rapoo

action可否直接使用spring的声明式事务?
由于图省事,而且系统比较小,感觉service层比较繁琐,就直接在action里调用的dao
现在想使用事务 action代码大致如下

public ActionForward addOrg(orginfoDAO.insert(orginfo);userDAO.insert(userInfo);}


action里有这样的两个操作,分别用两个dao去处理,我想加上事务处理,使用的spring配置好像还是1.X的(见笑)
使用HibernateTransactionManager 和TransactionProxyFactoryBean类去管理事务,在target里设置target为action的bean name
  <bean id="transactionManager"          lazy-init="true"            name="code"> <bean  name="/userOrgManager"           name="code">public class ActionAdatper extends Action {protected ActionDispatcher dispatcher ;protected Action action;@Overridepublic void setServlet(ActionServlet servlet) {super.setServlet(servlet);this.action.setServlet(servlet);}public ActionAdatper(Action action){action.setServlet(servlet);dispatcher = new ActionDispatcher(action,ActionDispatcher.DISPATCH_FLAVOR);}public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {return dispatcher.execute(mapping, form, request, response);}}



public class NewerDelegatingRequestProcessor extends DelegatingRequestProcessor {protected Action getDelegateAction(ActionMapping mapping) throws BeansException {Action action=super.getDelegateAction(mapping);if(action==null){return null;}return new ActionAdatper(action);}}


@Transactional(readOnly=false)public class XXXXAction extends Action {/** * * 新增页面初始化处理 * */public ActionForward create(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {}/** * 修改页面初始化处理 *  */public ActionForward edit(ActionMapping mapping, ActionForm form,  HttpServletRequest request, HttpServletResponse response) {          }}
public class ActionAdatper extends Action {protected ActionDispatcher dispatcher ;protected Action action;@Overridepublic void setServlet(ActionServlet servlet) {super.setServlet(servlet);this.action.setServlet(servlet);}public ActionAdatper(Action action){action.setServlet(servlet);dispatcher = new ActionDispatcher(action,ActionDispatcher.DISPATCH_FLAVOR);}public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {return dispatcher.execute(mapping, form, request, response);}}


public class NewerDelegatingRequestProcessor extends DelegatingRequestProcessor {protected Action getDelegateAction(ActionMapping mapping) throws BeansException {Action action=super.getDelegateAction(mapping);if(action==null){return null;}return new ActionAdatper(action);}}


@Transactional(readOnly=false)public class XXXXAction extends Action {/** * * 新增页面初始化处理 * */public ActionForward create(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {}/** * 修改页面初始化处理 *  */public ActionForward edit(ActionMapping mapping, ActionForm form,  HttpServletRequest request, HttpServletResponse response) {          }}



嗯 对 用的是struts1的东西 不过我照daquan大哥给的方法
transactionAttributes设为<prop key="*">PROPAGATION_REQUIRED
这样就可以了 25 楼 sgp2004 2008-12-30 sdh5724 写道如果项目复杂, 就不要在action里玩, 最好使用独立的业务类。 在业务类里面做事务。 简单的话就无所谓了, 你要在jsp上做事务也行。 没有一条解决问题的万能之路, 只是适合业务的需求而已!

嗯 谢谢指点 呵呵 因为是第一次做ssh的应用 以前是纯struts 然后加个business类就完了 所以对业务层的配置不是很熟 感觉有点复杂,而且业务其实比较简单 只有录入数据,上报和统计分析 初始需求只是一个表格履历 做一点算一点的 唉 也比较郁闷 很多需求他们都不说清楚
26 楼 volking 2009-01-03 楼主,能用了吗?能用就发个例子给我瞧下,我懒得写的。
jar文件写个“名字-版本”就行了,其他的发给我。
volking@yahoo.cn 27 楼 sgp2004 2009-01-05 chen-516888 写道使用spring管理Action Bean的配置方式
将Action Bean在Spring IoC容器中进行注册,则可以对Action Bean进行声明式事务管理了吧?
配置事务的原子方法应该是execute()吧........



我用的是dispatchAction 所以没有excute方法 而且光管理excute方法的话估计也是无效的
因为真实操作是在baseDAO 反正使用通配符“*”就限制住了 呵呵
28 楼 sgp2004 2009-01-05 chen-516888 写道你对execute()进行事务配置才有效果的
如果pointcut选择了DAO类的方法肯定有问题啊
因为生成的代理是自定义的Action Bean 的代理
自然是对Action Bean 的方法进行拦截和事务开启和关闭的吧
呵呵
个人拙见

我就是选择了 Action的方法无效才进来问的 呵呵 继续研究中。。。

读书人网 >软件架构设计

热点推荐