【问题标题】:storing Hibernate SessionFactory with Struts用 Struts 存储 Hibernate SessionFactory
【发布时间】:2011-04-16 16:27:44
【问题描述】:

我开始将 Hibernate 与 Struts 2 一起用于一个相对简单的 Web 项目。出于性能原因,我知道建议尽量减少创建 Hibernate Configuration 和 SessionFactory 对象的时间。

任何人都可以就这是否是一种好方法或是否有更好的方法提供一些意见?我基于example I found here 的代码。

方法是在ServletContextListener的contextInitialized方法中创建SessionFactory,并将其存储在ServletContext中。

我注意到该示例似乎从未关闭 SessionFactory,因此我在 contextDestroyed 中添加了一些代码。这有必要吗?

非常感谢您的任何意见。如果你能提出任何更好的例子,我很乐意看看。我还看到了一些对 Struts 的“Full Hibernate Plugin”的引用。这是一种常用且更好的方法吗?

FWIW,我正在使用 Eclipse 并使用 MySQL 部署到 Tomcat

public class HibernateListener implements ServletContextListener {

private Configuration config;
private SessionFactory sessionFactory;
private String path = "/hibernate.cfg.xml";

public static final String KEY_NAME = HibernateListener.class.getName();

@Override
public void contextDestroyed(ServletContextEvent arg0) {
    if ( sessionFactory != null ) {
        sessionFactory.close();
    }

}

@Override
public void contextInitialized(ServletContextEvent arg0) {
    try {
        URL url = HibernateListener.class.getResource(path);
        config = new Configuration().configure(url);
        sessionFactory = config.buildSessionFactory();

        // save the Hibernate session factory into serlvet context
        arg0.getServletContext().setAttribute(KEY_NAME, sessionFactory);
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

}

这是我添加到 web.xml 中的内容

    <listener>
    <listener-class>insert.package.name.here.HibernateListener</listener-class>
</listener>

【问题讨论】:

    标签: hibernate struts2


    【解决方案1】:

    您的方法会奏效,ServletContextListeners 是处理您的 web 应用程序启动和关闭任务的正确位置。您在关机时关闭SessionFactory 是正确的——在自己之后清理是一个好习惯。

    要考虑的另一件事是您如何创建和处置会话。会话不应跨线程共享,也不应在每个数据库任务上创建和销毁。一个常见的最佳实践是每个请求有一个会话(通常存储在 ThreadLocal 中)。这通常被称为 Open Session in View 模式。

    就我个人而言,我对 Google Guice 使用了 guice-persist 扩展的略微修改版本。

    【讨论】:

    • 感谢您的回复。我很感激。我会看看谷歌Guice。我以前没听说过。
    猜你喜欢
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2016-02-23
    • 2011-08-04
    • 2012-06-10
    相关资源
    最近更新 更多