Coverage Summary for Class: HibernateUtil (org.kitodo.data.database.persistence)

Class Class, % Method, % Line, %
HibernateUtil 100% (1/1) 75% (3/4) 78,3% (18/23)


 /*
  * (c) Kitodo. Key to digital objects e. V. <contact@kitodo.org>
  *
  * This file is part of the Kitodo project.
  *
  * It is licensed under GNU General Public License version 3 or later.
  *
  * For the full copyright and license information, please read the
  * GPL3-License.txt file that was distributed with this source code.
  */
 
 package org.kitodo.data.database.persistence;
 
 import java.util.Objects;
 
 import org.hibernate.HibernateException;
 import org.hibernate.Session;
 import org.hibernate.SessionFactory;
 import org.hibernate.boot.Metadata;
 import org.hibernate.boot.MetadataSources;
 import org.hibernate.boot.registry.StandardServiceRegistry;
 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
 
 /**
  * Current version of HibernateUtil.
  */
 public class HibernateUtil {
     private static StandardServiceRegistry registry;
     private static SessionFactory sessionFactory;
     private static final ThreadLocal<Session> threadSession = new ThreadLocal<>();
 
     /**
      * Private constructor to hide the implicit public one.
      */
     private HibernateUtil() {
 
     }
 
     /**
      * Retrieves the current Session.
      *
      * @return Session
      */
     public static Session getSession() {
         Session session = threadSession.get();
 
         if (Objects.isNull(session)) {
             SessionFactory sessionFactory = getSessionFactory();
             if (Objects.nonNull(sessionFactory)) {
                 session = sessionFactory.openSession();
             }
         } else {
             if (!session.isOpen()) {
                 session = sessionFactory.openSession();
             }
         }
         threadSession.set(session);
 
         return session;
     }
 
     /**
      * Retrieve current SessionFactory.
      *
      * @return SessionFactory
      */
     private static SessionFactory getSessionFactory() {
         if (Objects.isNull(sessionFactory)) {
             try {
                 registry = new StandardServiceRegistryBuilder().configure().build();
                 MetadataSources sources = new MetadataSources(registry);
                 Metadata metadata = sources.getMetadataBuilder().build();
                 sessionFactory = metadata.getSessionFactoryBuilder().build();
             } catch (RuntimeException e) {
                 shutdown();
                 throw new HibernateException(e.getMessage(), e);
             }
         }
         return sessionFactory;
     }
 
     /**
      * Destroy session.
      */
     private static void shutdown() {
         if (Objects.nonNull(registry)) {
             StandardServiceRegistryBuilder.destroy(registry);
         }
     }
 }