Manager.java
/**
* Manager.java This file is part of WattDepot.
*
* Copyright (C) 2013 Cam Moore
*
* 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/>.
*/
package org.wattdepot.server.depository.impl.hibernate;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.wattdepot.server.ServerProperties;
/**
* Manager - provides access to the singleton SessionFactory needed to persist
* the objects.
*
* @author Cam Moore
*
*/
public class Manager {
private static SessionFactory validateFactory;
private static ServiceRegistry validateRegistry;
private static SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;
/**
* @param properties The ServerProperties that contain the database
* configuration.
* @return The singleton SessionFactory.
*/
public static SessionFactory getFactory(ServerProperties properties) {
if (sessionFactory == null) {
Configuration cfg = new Configuration()
.addAnnotatedClass(
org.wattdepot.server.depository.impl.hibernate.CollectorProcessDefinitionImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.DepositoryImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.DepositorySensorContribution.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.MeasurementPruningDefinitionImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.MeasurementImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.MeasurementTypeImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.PropertyImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.RowCount.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.SensorImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.SensorGroupImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.SensorModelImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.OrganizationImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.UserInfoImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.UserPasswordImpl.class)
.setProperty("hibernate.connection.driver_class",
properties.get(ServerProperties.DB_CONNECTION_DRIVER))
.setProperty("hibernate.connection.url",
properties.get(ServerProperties.DB_CONNECTION_URL))
.setProperty("hibernate.connection.username",
properties.get(ServerProperties.DB_USER_NAME))
.setProperty("hibernate.connection.password",
properties.get(ServerProperties.DB_PASSWORD))
.setProperty("hibernate.c3p0.min_size", "5").setProperty("hibernate.c3p0.max_size", "20")
.setProperty("hibernate.c3p0.timeout", "1800")
.setProperty("hibernate.c3p0.max_statements", "50")
.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect")
.setProperty("hibernate.show_sql", properties.get(ServerProperties.DB_SHOW_SQL))
.setProperty("hibernate.hbm2ddl.auto", properties.get(ServerProperties.DB_TABLE_UPDATE));
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
// A SessionFactory is set up once for an application
sessionFactory = cfg.buildSessionFactory(serviceRegistry);
// // A SessionFactory is set up once for an application
// sessionFactory = new Configuration().configure() // configures settings
// // from
// // hibernate.cfg.xml
// .buildSessionFactory();
}
return sessionFactory;
}
/**
* @param properties The ServerProperties that contain the database
* configuration.
* @return The singleton SessionFactory.
*/
public static SessionFactory getValidateFactory(ServerProperties properties) {
if (validateFactory == null) {
Configuration cfg = new Configuration()
.addAnnotatedClass(
org.wattdepot.server.depository.impl.hibernate.CollectorProcessDefinitionImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.DepositoryImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.MeasurementImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.MeasurementTypeImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.PropertyImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.SensorImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.SensorGroupImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.SensorModelImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.OrganizationImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.UserInfoImpl.class)
.addAnnotatedClass(org.wattdepot.server.depository.impl.hibernate.UserPasswordImpl.class)
.setProperty("hibernate.connection.driver_class",
properties.get(ServerProperties.DB_CONNECTION_DRIVER))
.setProperty("hibernate.connection.url",
properties.get(ServerProperties.DB_CONNECTION_URL))
.setProperty("hibernate.connection.username",
properties.get(ServerProperties.DB_USER_NAME))
.setProperty("hibernate.connection.password",
properties.get(ServerProperties.DB_PASSWORD))
.setProperty("hibernate.c3p0.min_size", "5").setProperty("hibernate.c3p0.max_size", "20")
.setProperty("hibernate.c3p0.timeout", "1800")
.setProperty("hibernate.c3p0.max_statements", "50")
.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect")
.setProperty("hibernate.show_sql", properties.get(ServerProperties.DB_SHOW_SQL))
.setProperty("hibernate.hbm2ddl.auto", "validate");
validateRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
// A SessionFactory is set up once for an application
validateFactory = cfg.buildSessionFactory(validateRegistry);
}
return validateFactory;
}
/**
* Closes the SessionFactory. Should be called when shutting down the system.
*/
public static void closeSession() {
if (sessionFactory != null) {
sessionFactory.close();
sessionFactory = null;
}
if (validateFactory != null) {
validateFactory.close();
validateFactory = null;
}
}
}