Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate 4.2 SessionFactory的同步方法_Java_Hibernate_Jakarta Ee - Fatal编程技术网

Java Hibernate 4.2 SessionFactory的同步方法

Java Hibernate 4.2 SessionFactory的同步方法,java,hibernate,jakarta-ee,Java,Hibernate,Jakarta Ee,我正在使用Hibernate 4.2.21,在几篇文章中,我看到一些人在方法中使用Synchronized来创建Hibernate的会话工厂,我的问题是什么是最佳实践,有没有?从我的角度来看,我认为如果我们像静态一样定义变量,那么Synchronized就没有意义了 public class HibernateSessionFactory { private static SessionFactory sessionFactory = buildSessionFactory();

我正在使用Hibernate 4.2.21,在几篇文章中,我看到一些人在方法中使用Synchronized来创建Hibernate的会话工厂,我的问题是什么是最佳实践,有没有?从我的角度来看,我认为如果我们像静态一样定义变量,那么Synchronized就没有意义了

public class HibernateSessionFactory {

    private static SessionFactory sessionFactory = buildSessionFactory();

    private static final Logger logger = LogManager.getLogger(HibernateSessionFactory.class);

    private HibernateSessionFactory() {}

    private static synchronized SessionFactory buildSessionFactory() {

        Configuration configuration = new Configuration();
        SessionFactory sf = null;

        try {

            configuration.configure("hibernate.cfg.xml");


            configuration.setProperty("hibernate.dialect", System.getProperty("myApp.db.dialect"));
            configuration.setProperty("hibernate.connection.driver_class", System.getProperty("myApp.db.driver"));
            configuration.setProperty("hibernate.connection.datasource", System.getProperty("myApp.db.jndi"));

            if (sessionFactory == null) {
                ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
                sf = configuration.buildSessionFactory(serviceRegistry);
            }

            return sf;

        } catch (HibernateException ex) {
            logger.error("Init SessionFactory creation failed: ", ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void shutdownSessionFactory() {

      if(!sessionFactory.isClosed()){
        sessionFactory.close();
        logger.info("Session Factory shutdown");
      }else{
        logger.info("Session Factory is already closed");
      }

    }

}

如果(sessionFactory==null)@v.ladynev看起来很奇怪,我想了很久,是的。。你是对的,奇怪的是我会被删除,你对我的问题怎么看?当然,你是对的。类加载器自己执行这种同步。但是让我们等待一个更深刻的答案:)看起来很奇怪,如果(sessionFactory==null)@v.ladynev,我想了一下,是的。。你是对的,奇怪的是我会被删除,你对我的问题怎么看?当然,你是对的。类加载器自己执行这种同步。但让我们等待一个更深刻的答案:)