1.2.5. 启动和辅助类
是时候来加载和储存一些Event
对象了,但首先我们得编写一些基础的代码以完成设置。我们必须启动Hibernate,此过程包括创建一个全局的SessoinFactory
,并把它储存在应用程序代码容易访问的地方。SessionFactory
可以创建并打开新的Session
。一个Session
代表一个单线程的单元操作,SessionFactory
则是个线程安全的全局对象,只需要被实例化一次。
我们将创建一个HibernateUtil
辅助类(helper class)来负责启动Hibernate和更方便地操作SessionFactory
。让我们来看一下它的实现:
package util;
import org.hibernate.*;
import org.hibernate.cfg.*;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
这个类不但在它的静态初始化过程(仅当加载这个类的时候被JVM执行一次)中产生全局的SessionFactory
,而且隐藏了它使用了静态singleton的事实。它也可能在应用程序服务器中的JNDI查找SessionFactory
。
如果你在配置文件中给SessionFactory
一个名字,在SessionFactory
创建后,Hibernate会试着把它绑定到JNDI。要完全避免这样的代码,你也可以使用JMX部署,让具有JMX能力的容器来实例化HibernateService
并把它绑定到JNDI。这些高级可选项在后面的章节中会讨论到。
把HibernateUtil.java
放在开发目录的源代码路径下,与放events
的包并列:
.
+lib
<Hibernate and third-party libraries>
+src
+events
Event.java
Event.hbm.xml
+util
HibernateUtil.java
hibernate.cfg.xml
+data
build.xml
再次编译这个应用程序应该不会有问题。最后我们需要配置一个日志(logging)系统 - Hibernate使用通用日志接口,允许你在Log4j和JDK 1.4 日志之间进行选择。多数开发者更喜欢Log4j:从Hibernate的发布包中(它在etc/
目录下)拷贝log4j.properties
到你的src
目录,与hibernate.cfg.xml
.放在一起。看一下配置示例,如果你希望看到更加详细的输出信息,你可以修改配置。默认情况下,只有Hibernate的启动信息才会显示在标准输出上。
示例的基本框架完成了 - 现在我们可以用Hibernate来做些真正的工作。