Java tutorial
/* * Copyright (C) 2015 Glauco Knihs. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * Please contact Glauco Knihs, Rua 10 de Junho, N469, Centro, * Guabiruba-SC, CEP 88360-000, BRAZIL, eglauko@hotmail.com, * if you need additional information or have any questions. */ package org.balisunrise.daa.hibernate; import java.io.File; import java.util.LinkedList; import java.util.List; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.MetadataSources; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.NotYetImplementedException; import org.balisunrise.daa.DAO_; /** * Classe HDaoManager. * * @author Glauco Knihs * @version 1.0 * @since 1.0 */ public class HDaoManager implements DAO_.Manager { public static String NAME = "hibernate.default"; private List<DAO_.Provider> providers = new LinkedList<>(); private static StandardServiceRegistryBuilder builder; private static StandardServiceRegistry registry; private MetadataSources metadata; private SessionFactory sessionFactory; public HDaoManager() { setUp(); } private void setUp() { try { builder = new StandardServiceRegistryBuilder(); String fileName = org.balisunrise.rua.Configuration.classPath(HDaoManager.class) + StandardServiceRegistryBuilder.DEFAULT_CFG_RESOURCE_NAME; File f = new File(fileName); if (f.exists()) { builder.configure(); } else { builder.applySettings(HibernateUtil.loadProperties()); } registry = builder.build(); } catch (Exception ex) { // Log the exception. System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } @Override public String getName() { return NAME; } @Override public DAO_ getDAO() { throw new NotYetImplementedException(); } protected final Session getSession() { if (sessionFactory == null) { try { metadata = new MetadataSources(registry); providers.stream().forEach((p) -> { p.getClasses().forEach((c) -> { metadata.addAnnotatedClass(c); }); }); sessionFactory = metadata.buildMetadata().buildSessionFactory(); } catch (Exception ex) { metadata = null; sessionFactory = null; System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } return sessionFactory.getCurrentSession(); } @Override public void addProvider(DAO_.Provider provider) { providers.add(provider); if (sessionFactory != null) { sessionFactory.close(); sessionFactory = null; metadata = null; } } }