All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.daedafusion.hibernate.HibernateSessionFactory Maven / Gradle / Ivy

package com.daedafusion.hibernate;

import javassist.util.proxy.ProxyFactory;
import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.internal.util.*;
import org.hibernate.service.ServiceRegistry;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.InputStream;

/**
 * Created by mphilpot on 7/3/14.
 */
public class HibernateSessionFactory
{
    private static final Logger                  log         = Logger.getLogger(HibernateSessionFactory.class);

    private static       HibernateSessionFactory ourInstance = new HibernateSessionFactory();

    public static HibernateSessionFactory getInstance()
    {
        return ourInstance;
    }

    private SessionFactory sessionFactory;

    private HibernateSessionFactory()
    {
        try
        {
            InputStream resource = com.daedafusion.configuration.Configuration.getInstance().getResource("hibernate.cfg.xml");

            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            factory.setNamespaceAware(true);
            DocumentBuilder builder = factory.newDocumentBuilder();

            Document doc = builder.parse(resource);

            // In scoped classloaders, HibernateSessionFactory's classloader should be scoped.
            // We need to override this so Hibernate doesn't first try the current thread's default classloader first
            ClassLoaderHelper.overridenClassLoader = HibernateSessionFactory.class.getClassLoader();

            ProxyFactory.classLoaderProvider = new ProxyFactory.ClassLoaderProvider() {
                @Override
                public ClassLoader get(ProxyFactory pf)
                {
                    return HibernateSessionFactory.class.getClassLoader();
                }
            };

            Configuration config = new Configuration();
            config.configure(doc);

            // Add resources
            String resourceKeys = com.daedafusion.configuration.Configuration.getInstance().getString("hibernateMappingResources", null);

            if(resourceKeys != null)
            {
                String[] keys = resourceKeys.split(",");

                for(String k : keys)
                {
                    InputStream r = com.daedafusion.configuration.Configuration.getInstance().getResource(k);
                    DocumentBuilder b = factory.newDocumentBuilder();
                    Document d = b.parse(r);

                    config.addDocument(d);
                }
            }

            // Override from distributed config for now, eventually look to Service Discovery
            config.setProperty("hibernate.connection.url",
                    com.daedafusion.configuration.Configuration.getInstance().getString("databaseJdbc", "localhost"));
            config.setProperty("hibernate.connection.username",
                    com.daedafusion.configuration.Configuration.getInstance().getString("databaseUsername", "root"));
            config.setProperty("hibernate.connection.password",
                    com.daedafusion.configuration.Configuration.getInstance().getString("databasePassword", ""));

            ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();

            sessionFactory = config.buildSessionFactory(serviceRegistry);
        }
        catch (ParserConfigurationException | SAXException | IOException e)
        {
            log.error("Error initializing Hibernate configuration", e);
        }
    }

    public Session getSession()
    {
        return sessionFactory.getCurrentSession();
    }

    public void shutdown()
    {
        sessionFactory.close();
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy