gpt4 book ai didi

hibernate - 使用 Struts 存储 Hibernate SessionFactory

转载 作者:行者123 更新时间:2023-12-03 12:30:26 25 4
gpt4 key购买 nike

我开始将 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>

最佳答案

你的方法行得通,ServletContextListener s 是处理 web 应用程序启动和关闭任务的正确位置。您关闭 SessionFactory 是正确的在关闭时——在自己之后清理是一个好习惯。

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

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

关于hibernate - 使用 Struts 存储 Hibernate SessionFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5687886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com