1.2.5. 启动和辅助类

是时候来加载和储存一些Event对象了,但首先我们得编写一些基础的代码以完成设置。我们必须启动Hibernate,此过程包括创建一个全局的SessoinFactory,并把它储存在应用程序代码容易访问的地方。SessionFactory可以创建并打开新的Session。一个Session代表一个单线程的单元操作,SessionFactory则是个线程安全的全局对象,只需要被实例化一次。

我们将创建一个HibernateUtil辅助类(helper class)来负责启动Hibernate和更方便地操作SessionFactory。让我们来看一下它的实现:

  1. package util;
  2. import org.hibernate.*;
  3. import org.hibernate.cfg.*;
  4. public class HibernateUtil {
  5. private static final SessionFactory sessionFactory;
  6. static {
  7. try {
  8. // Create the SessionFactory from hibernate.cfg.xml
  9. sessionFactory = new Configuration().configure().buildSessionFactory();
  10. } catch (Throwable ex) {
  11. // Make sure you log the exception, as it might be swallowed
  12. System.err.println("Initial SessionFactory creation failed." + ex);
  13. throw new ExceptionInInitializerError(ex);
  14. }
  15. }
  16. public static SessionFactory getSessionFactory() {
  17. return sessionFactory;
  18. }
  19. }

这个类不但在它的静态初始化过程(仅当加载这个类的时候被JVM执行一次)中产生全局的SessionFactory,而且隐藏了它使用了静态singleton的事实。它也可能在应用程序服务器中的JNDI查找SessionFactory

如果你在配置文件中给SessionFactory一个名字,在SessionFactory创建后,Hibernate会试着把它绑定到JNDI。要完全避免这样的代码,你也可以使用JMX部署,让具有JMX能力的容器来实例化HibernateService并把它绑定到JNDI。这些高级可选项在后面的章节中会讨论到。

HibernateUtil.java放在开发目录的源代码路径下,与放events的包并列:

  1. .
  2. +lib
  3. <Hibernate and third-party libraries>
  4. +src
  5. +events
  6. Event.java
  7. Event.hbm.xml
  8. +util
  9. HibernateUtil.java
  10. hibernate.cfg.xml
  11. +data
  12. build.xml

再次编译这个应用程序应该不会有问题。最后我们需要配置一个日志(logging)系统 - Hibernate使用通用日志接口,允许你在Log4j和JDK 1.4 日志之间进行选择。多数开发者更喜欢Log4j:从Hibernate的发布包中(它在etc/目录下)拷贝log4j.properties到你的src目录,与hibernate.cfg.xml.放在一起。看一下配置示例,如果你希望看到更加详细的输出信息,你可以修改配置。默认情况下,只有Hibernate的启动信息才会显示在标准输出上。

示例的基本框架完成了 - 现在我们可以用Hibernate来做些真正的工作。