【发布时间】: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>
【问题讨论】: