论坛首页 Java企业应用论坛

关于struts + hibernate

浏览 12880 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2003-09-18  
有个问题就是,在Action中每次进行操作的时候大多需要进行得到session/transaction然后操作的代码,很是繁琐。

正在考虑做个HibernateAction,最好能够在perform()前自动获取session/transaction,perform后自动关闭session/transaction.
但是遇到一个问题就是,如果重载perform(),那么HibernateAction的子类用的时候需要先super(),不怎么爽。但是我看Action的文档,也没有比如beforePerfrom和AfterPerform这样的入口。

处理exception也是个问题。

各位有想过这个问题的么?请不吝赐教!
   发表时间:2003-09-19  
public abstract class HibernateAction extends Action{
  public final ActionForward perform/*execute*/(....);{
    Session session=openSession();;
    try{
      return newPerform(session,...);;
    }finally{
      closeSession(session);;
    }
  }
  
  public abstract ActionForward newPerform/*newExecute*/(Session session,...);;
}

这样行吗?

算了,还是用Filter+ThreadLocal吧。Action就不应该和Hibernate Session打交道。
0 请登录后投票
   发表时间:2003-09-19  
ACTION中就不应该进行hibernate的操作,最好是用action调用操作hibernate的class
0 请登录后投票
   发表时间:2003-09-19  
对这个问题我是这样看的:

首先我不会在action中“注入”过多的业务代码(可以说几乎没有),因为这通常不是action的工作,但是action通常知道让你去哪里执行这些操作。
在我的代码中这些操作通常会在一些***Map里执行,而这些***Map有一个共同的父类BaseMap,在BaseMap里有得到session/transaction以及关闭session/transaction的方法。
对于exception,最新版本的struts提供异常处理机制,我在项目中已经应用过,十分方便。

不清楚再讨论。
0 请登录后投票
   发表时间:2003-09-19  
Jplateau 写道
对这个问题我是这样看的:

首先我不会在action中“注入”过多的业务代码(可以说几乎没有),因为这通常不是action的工作,但是action通常知道让你去哪里执行这些操作。
在我的代码中这些操作通常会在一些***Map里执行,而这些***Map有一个共同的父类BaseMap,在BaseMap里有得到session/transaction以及关闭session/transaction的方法。
对于exception,最新版本的struts提供异常处理机制,我在项目中已经应用过,十分方便。

不清楚再讨论。



有空的时候把代码share一下吧?
0 请登录后投票
   发表时间:2003-09-19  
Jplateau 写道
对这个问题我是这样看的:

首先我不会在action中“注入”过多的业务代码(可以说几乎没有),因为这通常不是action的工作,但是action通常知道让你去哪里执行这些操作。

在我的代码中这些操作通常会在一些***Map里执行,而这些***Map有一个共同的父类BaseMap,在BaseMap里有得到session/transaction以及关闭session/transaction的方法。


这一点我有一些疑义。能想象得到你这么做的原因,可能一是为了便于调试,而是为了保持程序与struts之间的松耦合。但是假若已经确定程序只可能在struts中运行,那么Action类的确是一个好地方。因为从设计上来说,Action类就是用来完成动作的。

(其实这也是Struts令人诟病的一点,对web项目过度依赖。WebWork2的架构看起来更好一些,在WebWork2中,单纯的操作放在XWork的action类中,而WebWork只是去调用xWork的action。)

Jplateau 写道

对于exception,最新版本的struts提供异常处理机制,我在项目中已经应用过,十分方便。
不清楚再讨论。


这一点能否展开讨论一下?
0 请登录后投票
   发表时间:2003-09-19  
有没有可能用AOP来实现
0 请登录后投票
   发表时间:2003-09-19  
WebWork2 确实仅仅是MVC的控制,struts不断要控制而且还要设计一些商业逻辑,这就给扩展带来了不便之处。
0 请登录后投票
   发表时间:2003-09-19  
我用DAO来屏蔽Action和持久层间的关联
在Action中只负责数据的组织和验证,而具体的持久层操作则由DAO来实现

在Action中通过DAOFactory来取某个DAO,返回的是接口,
因此修改DAO时就不会影响到Action中的代码
如:
...LoginAction...
...execute...
   AccountDAO  accountDAO= DAOFactory.getInstance();.getAccountDAO();;
  boolean result = accountDAO.validateLogin(name,password);;
  ... 


当然,这里有个问题是事务的处理,见:
http://hibernate.fankai.com/viewtopic.php?t=122&highlight=

如果用Filter或者ThreadLocal等就可以实现了:)
0 请登录后投票
   发表时间:2003-09-19  
关于struts异常处理的贴子,我站点里有一片粗略分析的贴子,看完以后不满意,再讨论。

周末要赶着回去“收拾”家里的电脑,偶先闪了。

你们也要适当的休息一下,周末嘛,放松也是要学会的,呵呵。。。。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics