锁定老帖子 主题:关于struts + hibernate
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2003-09-18
正在考虑做个HibernateAction,最好能够在perform()前自动获取session/transaction,perform后自动关闭session/transaction. 但是遇到一个问题就是,如果重载perform(),那么HibernateAction的子类用的时候需要先super(),不怎么爽。但是我看Action的文档,也没有比如beforePerfrom和AfterPerform这样的入口。 处理exception也是个问题。 各位有想过这个问题的么?请不吝赐教! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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打交道。 |
|
返回顶楼 | |
发表时间:2003-09-19
ACTION中就不应该进行hibernate的操作,最好是用action调用操作hibernate的class
|
|
返回顶楼 | |
发表时间:2003-09-19
对这个问题我是这样看的:
首先我不会在action中“注入”过多的业务代码(可以说几乎没有),因为这通常不是action的工作,但是action通常知道让你去哪里执行这些操作。 在我的代码中这些操作通常会在一些***Map里执行,而这些***Map有一个共同的父类BaseMap,在BaseMap里有得到session/transaction以及关闭session/transaction的方法。 对于exception,最新版本的struts提供异常处理机制,我在项目中已经应用过,十分方便。 不清楚再讨论。 |
|
返回顶楼 | |
发表时间:2003-09-19
Jplateau 写道 对这个问题我是这样看的:
首先我不会在action中“注入”过多的业务代码(可以说几乎没有),因为这通常不是action的工作,但是action通常知道让你去哪里执行这些操作。 在我的代码中这些操作通常会在一些***Map里执行,而这些***Map有一个共同的父类BaseMap,在BaseMap里有得到session/transaction以及关闭session/transaction的方法。 对于exception,最新版本的struts提供异常处理机制,我在项目中已经应用过,十分方便。 不清楚再讨论。 有空的时候把代码share一下吧? |
|
返回顶楼 | |
发表时间: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提供异常处理机制,我在项目中已经应用过,十分方便。 不清楚再讨论。 这一点能否展开讨论一下? |
|
返回顶楼 | |
发表时间:2003-09-19
有没有可能用AOP来实现
|
|
返回顶楼 | |
发表时间:2003-09-19
WebWork2 确实仅仅是MVC的控制,struts不断要控制而且还要设计一些商业逻辑,这就给扩展带来了不便之处。
|
|
返回顶楼 | |
发表时间: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等就可以实现了:) |
|
返回顶楼 | |
发表时间:2003-09-19
关于struts异常处理的贴子,我站点里有一片粗略分析的贴子,看完以后不满意,再讨论。
周末要赶着回去“收拾”家里的电脑,偶先闪了。 你们也要适当的休息一下,周末嘛,放松也是要学会的,呵呵。。。。 |
|
返回顶楼 | |