/* * iDART: The Intelligent Dispensing of Antiretroviral Treatment * Copyright (C) 2006 Cell-Life * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 as published by * the Free Software Foundation. * * 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 version * 2 for more details. * * You should have received a copy of the GNU General Public License version 2 * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ package org.celllife.idart.database.hibernate.util; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.celllife.idart.commonobjects.iDartProperties; import org.celllife.idart.database.hibernate.AccumulatedDrugs; import org.celllife.idart.database.hibernate.Alerts; import org.celllife.idart.database.hibernate.AlternatePatientIdentifier; import org.celllife.idart.database.hibernate.Appointment; import org.celllife.idart.database.hibernate.AtcCode; import org.celllife.idart.database.hibernate.AttributeType; import org.celllife.idart.database.hibernate.Campaign; import org.celllife.idart.database.hibernate.CampaignParticipant; import org.celllife.idart.database.hibernate.ChemicalCompound; import org.celllife.idart.database.hibernate.ChemicalDrugStrength; import org.celllife.idart.database.hibernate.Clinic; import org.celllife.idart.database.hibernate.Doctor; import org.celllife.idart.database.hibernate.Drug; import org.celllife.idart.database.hibernate.Episode; import org.celllife.idart.database.hibernate.Form; import org.celllife.idart.database.hibernate.IdentifierType; import org.celllife.idart.database.hibernate.Logging; import org.celllife.idart.database.hibernate.MessageSchedule; import org.celllife.idart.database.hibernate.NationalClinics; import org.celllife.idart.database.hibernate.PackagedDrugs; import org.celllife.idart.database.hibernate.Packages; import org.celllife.idart.database.hibernate.Patient; import org.celllife.idart.database.hibernate.PatientAttribute; import org.celllife.idart.database.hibernate.PatientIdentifier; import org.celllife.idart.database.hibernate.PatientStatTypes; import org.celllife.idart.database.hibernate.PatientStatistic; import org.celllife.idart.database.hibernate.PatientVisit; import org.celllife.idart.database.hibernate.PatientVisitReason; import org.celllife.idart.database.hibernate.PillCount; import org.celllife.idart.database.hibernate.Pregnancy; import org.celllife.idart.database.hibernate.PrescribedDrugs; import org.celllife.idart.database.hibernate.Prescription; import org.celllife.idart.database.hibernate.Regimen; import org.celllife.idart.database.hibernate.RegimenDrugs; import org.celllife.idart.database.hibernate.SimpleDomain; import org.celllife.idart.database.hibernate.Stock; import org.celllife.idart.database.hibernate.StockAdjustment; import org.celllife.idart.database.hibernate.StockCenter; import org.celllife.idart.database.hibernate.StockLevel; import org.celllife.idart.database.hibernate.StockTake; import org.celllife.idart.database.hibernate.Study; import org.celllife.idart.database.hibernate.StudyParticipant; import org.celllife.idart.database.hibernate.User; import org.celllife.idart.database.hibernate.tmp.AdherenceRecord; import org.celllife.idart.database.hibernate.tmp.DeletedItem; import org.celllife.idart.database.hibernate.tmp.PackageDrugInfo; import org.hibernate.FlushMode; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; /** * Created on 2005/03/10 * * Hibernate Helper Class to allow easy access to Hibernate Sessions * */ public class HibernateUtil { private static Log log = LogFactory.getLog(HibernateUtil.class); private static HibernateUtil util; private final SessionFactory sessionFactory; private static boolean validate = false; private HibernateUtil(String hibernateConnectionUrl, String hibernatePassword, String hibernateUsername, String hibernateDriver, String hibernateDialect) { // Create the session factory AnnotationConfiguration ac = new AnnotationConfiguration(); if (validate) ac.setProperty("hibernate.hbm2ddl.auto", "validate"); ac.setProperty("hibernate.show_sql", "false"); ac.setProperty("hibernate.use_outer_join", "false"); ac.setProperty("hibernate.cache.provider_class", "org.hibernate.cache.HashtableCacheProvider"); ac.setProperty("hibernate.bytecode.use_reflection_optimizer", "false"); ac.setProperty("hibernate.transaction.factory_class", "org.hibernate.transaction.JDBCTransactionFactory"); ac.setProperty("hibernate.max_fetch_depth", "1"); ac.setProperty("hibernate.default_batch_fetch_size", "4"); ac.setProperty("hibernate.use_sql_comments", "false"); ac.setProperty("connection.autocommit", "true"); ac.setProperty("hibernate.connection.url", hibernateConnectionUrl); ac.setProperty("hibernate.connection.password", hibernatePassword); ac.setProperty("hibernate.connection.username", hibernateUsername); ac.setProperty("hibernate.connection.driver_class", hibernateDriver); ac.setProperty("hibernate.dialect", hibernateDialect); // ac.setProperty("hibernate.hbm2ddl.auto", "validate"); // deprecated integer return types // ac.addSqlFunction("count", new ClassicCountFunction()); // ac.addSqlFunction("avg", new ClassicAvgFunction()); // ac.addSqlFunction("sum", new ClassicSumFunction()); ac.addAnnotatedClass(AccumulatedDrugs.class); ac.addAnnotatedClass(AlternatePatientIdentifier.class); ac.addAnnotatedClass(Appointment.class); ac.addAnnotatedClass(ChemicalCompound.class); ac.addAnnotatedClass(ChemicalDrugStrength.class); ac.addAnnotatedClass(Clinic.class); ac.addAnnotatedClass(Doctor.class); ac.addAnnotatedClass(Drug.class); ac.addAnnotatedClass(Episode.class); ac.addAnnotatedClass(Form.class); ac.addAnnotatedClass(Logging.class); ac.addAnnotatedClass(PackagedDrugs.class); ac.addAnnotatedClass(Packages.class); ac.addAnnotatedClass(Patient.class); ac.addAnnotatedClass(PatientAttribute.class); ac.addAnnotatedClass(AttributeType.class); ac.addAnnotatedClass(StockCenter.class); ac.addAnnotatedClass(PillCount.class); ac.addAnnotatedClass(Pregnancy.class); ac.addAnnotatedClass(PrescribedDrugs.class); ac.addAnnotatedClass(Prescription.class); ac.addAnnotatedClass(RegimenDrugs.class); ac.addAnnotatedClass(Regimen.class); ac.addAnnotatedClass(SimpleDomain.class); ac.addAnnotatedClass(StockAdjustment.class); ac.addAnnotatedClass(Stock.class); ac.addAnnotatedClass(StockLevel.class); ac.addAnnotatedClass(StockTake.class); ac.addAnnotatedClass(User.class); ac.addAnnotatedClass(AdherenceRecord.class); ac.addAnnotatedClass(DeletedItem.class); ac.addAnnotatedClass(PackageDrugInfo.class); ac.addAnnotatedClass(Packages.class); ac.addAnnotatedClass(PatientStatistic.class); ac.addAnnotatedClass(PatientStatTypes.class); ac.addAnnotatedClass(PatientVisit.class); ac.addAnnotatedClass(PatientVisitReason.class); ac.addAnnotatedClass(NationalClinics.class); ac.addAnnotatedClass(Study.class); ac.addAnnotatedClass(StudyParticipant.class); ac.addAnnotatedClass(Campaign.class); ac.addAnnotatedClass(CampaignParticipant.class); ac.addAnnotatedClass(MessageSchedule.class); ac.addAnnotatedClass(Alerts.class); ac.addAnnotatedClass(IdentifierType.class); ac.addAnnotatedClass(PatientIdentifier.class); ac.addAnnotatedClass(AtcCode.class); sessionFactory = ac.buildSessionFactory(); } /** * @return a new session from the session factory */ public static Session getNewSession() { if (util == null) { log.info("Initialising HibernateUtil."); rebuildUtil(); } return util.getSession(); } public static void rebuildUtil() { util = new HibernateUtil(iDartProperties.hibernateConnectionUrl, iDartProperties.hibernatePassword, iDartProperties.hibernateUsername, iDartProperties.hibernateDriver, iDartProperties.hibernateDialect); } public Session getSession() { Session sess = sessionFactory.openSession(); sess.setFlushMode(FlushMode.COMMIT); return sess; } public static HibernateUtil buildNewUtil(String host, String database) { HibernateUtil hUtil = new HibernateUtil("jdbc:postgresql://" + host + ":5432/" + database, iDartProperties.hibernatePassword, iDartProperties.hibernateUsername, iDartProperties.hibernateDriver, iDartProperties.hibernateDialect); return hUtil; } public static void setValidation(boolean validation){ validate = validation; rebuildUtil(); } }