我现在是Struts-1应用程序的所有者,Hibernate会话管理无处不在。我已经搜索了在线文档,但没有找到管理Struts应用程序中Hibernate会话的最佳方法的明确解释。应该在每个操作开始时创建(或获取) Hibernate会话,并打开一个事务,然后在操作结束时提交或回滚事务。对吗?如何在不重复每个操作中的代码的情况下对所有操作进行管理?每个Action应该从DB中获取对象,调用模型函数,然后保存对象吗?
发布于 2011-06-13 14:41:23
我不认为struts 1附带了OpenSessionInView过滤器,但是管理会话的一种方法是根据每个请求打开会话,然后通过线程本地模式访问会话。
这将使会话保持打开状态,直到请求完成呈现,这意味着您可以在视图中安全地使用延迟实例化的集合。
Spring附带了一个开放视野过滤器( 这是一篇关于如何使用它的文章 ),或者,将自己的过滤器编写为标准servlet过滤器相对简单。
要编写自己的代码,需要编写实现过滤器的ServletFilter,并实现doFilter方法。它看起来应该是:
void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) {
Session session;
try {
session = // get my hibernate session here
// do the request
chain.doFilter(req, res);
} catch (Whatever) {
} finally {
// close my session here
}您需要在web.xml中注册此筛选器,并将其应用于您需要会话的URL。这不是世界上最优雅的解决方案,但它确实工作得很好。
https://softwareengineering.stackexchange.com/questions/83545
复制相似问题