com.abiquo.abiserver.persistence.hibernate.HibernateDAOFactory.java Source code

Java tutorial

Introduction

Here is the source code for com.abiquo.abiserver.persistence.hibernate.HibernateDAOFactory.java

Source

/**
 * Abiquo community edition
 * cloud management application for hybrid clouds
 * Copyright (C) 2008-2010 - Abiquo Holdings S.L.
 *
 * This application is free software; you can redistribute it and/or
 * modify it under the terms of the GNU LESSER GENERAL PUBLIC
 * LICENSE as published by the Free Software Foundation under
 * version 3 of the License
 *
 * This software 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
 * LESSER GENERAL PUBLIC LICENSE v.3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */

/**
 * 
 */
package com.abiquo.abiserver.persistence.hibernate;

import java.net.URISyntaxException;

import org.hibernate.FlushMode;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import com.abiquo.abiserver.business.hibernate.pojohb.authorization.OneTimeTokenSessionHB;
import com.abiquo.abiserver.business.hibernate.pojohb.infrastructure.DatacenterHB;
import com.abiquo.abiserver.business.hibernate.pojohb.infrastructure.DatastoreHB;
import com.abiquo.abiserver.business.hibernate.pojohb.infrastructure.HypervisorHB;
import com.abiquo.abiserver.business.hibernate.pojohb.infrastructure.PhysicalmachineHB;
import com.abiquo.abiserver.business.hibernate.pojohb.infrastructure.RackHB;
import com.abiquo.abiserver.business.hibernate.pojohb.metering.MeterHB;
import com.abiquo.abiserver.business.hibernate.pojohb.networking.IpPoolManagementHB;
import com.abiquo.abiserver.business.hibernate.pojohb.networking.NetworkAssignmentHB;
import com.abiquo.abiserver.business.hibernate.pojohb.networking.NetworkConfigurationHB;
import com.abiquo.abiserver.business.hibernate.pojohb.networking.NetworkHB;
import com.abiquo.abiserver.business.hibernate.pojohb.networking.VlanNetworkHB;
import com.abiquo.abiserver.business.hibernate.pojohb.service.RemoteServiceHB;
import com.abiquo.abiserver.business.hibernate.pojohb.user.EnterpriseHB;
import com.abiquo.abiserver.business.hibernate.pojohb.user.RoleHB;
import com.abiquo.abiserver.business.hibernate.pojohb.user.UserHB;
import com.abiquo.abiserver.business.hibernate.pojohb.virtualappliance.NodeVirtualImageHB;
import com.abiquo.abiserver.business.hibernate.pojohb.virtualappliance.VirtualApplianceConversionsHB;
import com.abiquo.abiserver.business.hibernate.pojohb.virtualappliance.VirtualDataCenterHB;
import com.abiquo.abiserver.business.hibernate.pojohb.virtualappliance.VirtualappHB;
import com.abiquo.abiserver.business.hibernate.pojohb.virtualappliance.VirtualmachineHB;
import com.abiquo.abiserver.business.hibernate.pojohb.virtualhardware.ResourceAllocationSettingData;
import com.abiquo.abiserver.business.hibernate.pojohb.virtualhardware.ResourceManagementHB;
import com.abiquo.abiserver.business.hibernate.pojohb.virtualimage.CategoryHB;
import com.abiquo.abiserver.business.hibernate.pojohb.virtualimage.RepositoryHB;
import com.abiquo.abiserver.business.hibernate.pojohb.virtualimage.VirtualImageConversionsHB;
import com.abiquo.abiserver.business.hibernate.pojohb.virtualimage.VirtualimageHB;
import com.abiquo.abiserver.business.hibernate.pojohb.workload.EnterpriseExclusionRuleHB;
import com.abiquo.abiserver.business.hibernate.pojohb.workload.FitPolicyRuleHB;
import com.abiquo.abiserver.business.hibernate.pojohb.workload.MachineLoadRuleHB;
import com.abiquo.abiserver.persistence.DAO;
import com.abiquo.abiserver.persistence.DAOFactory;
import com.abiquo.abiserver.persistence.dao.authorization.OneTimeTokenSessionDAO;
import com.abiquo.abiserver.persistence.dao.authorization.hibernate.OneTimeTokenSessionDAOHibernate;
import com.abiquo.abiserver.persistence.dao.infrastructure.DataCenterDAO;
import com.abiquo.abiserver.persistence.dao.infrastructure.DatastoreDAO;
import com.abiquo.abiserver.persistence.dao.infrastructure.HyperVisorDAO;
import com.abiquo.abiserver.persistence.dao.infrastructure.PhysicalMachineDAO;
import com.abiquo.abiserver.persistence.dao.infrastructure.RackDAO;
import com.abiquo.abiserver.persistence.dao.infrastructure.RemoteServiceDAO;
import com.abiquo.abiserver.persistence.dao.infrastructure.hibernate.DataCenterDAOHibernate;
import com.abiquo.abiserver.persistence.dao.infrastructure.hibernate.DatastoreDAOHibernate;
import com.abiquo.abiserver.persistence.dao.infrastructure.hibernate.HyperVisorDAOHibernate;
import com.abiquo.abiserver.persistence.dao.infrastructure.hibernate.PhysicalMachineDAOHibernate;
import com.abiquo.abiserver.persistence.dao.infrastructure.hibernate.RackDAOHibernate;
import com.abiquo.abiserver.persistence.dao.infrastructure.hibernate.RemoteServiceDAOHibernate;
import com.abiquo.abiserver.persistence.dao.metering.MeterDAO;
import com.abiquo.abiserver.persistence.dao.metering.hibernate.MeterDAOHibernate;
import com.abiquo.abiserver.persistence.dao.networking.IpPoolManagementDAO;
import com.abiquo.abiserver.persistence.dao.networking.NetworkAssigmntDAO;
import com.abiquo.abiserver.persistence.dao.networking.NetworkConfigurationDAO;
import com.abiquo.abiserver.persistence.dao.networking.NetworkDAO;
import com.abiquo.abiserver.persistence.dao.networking.VlanNetworkDAO;
import com.abiquo.abiserver.persistence.dao.networking.hibernate.IpPoolManagementDAOHibernate;
import com.abiquo.abiserver.persistence.dao.networking.hibernate.NetworkAssigmntDAOHibernate;
import com.abiquo.abiserver.persistence.dao.networking.hibernate.NetworkConfigurationDAOHibernate;
import com.abiquo.abiserver.persistence.dao.networking.hibernate.NetworkDAOHibernate;
import com.abiquo.abiserver.persistence.dao.networking.hibernate.VlanNetworkDAOHibernate;
import com.abiquo.abiserver.persistence.dao.user.EnterpriseDAO;
import com.abiquo.abiserver.persistence.dao.user.RoleDAO;
import com.abiquo.abiserver.persistence.dao.user.UserDAO;
import com.abiquo.abiserver.persistence.dao.user.UserSessionDAO;
import com.abiquo.abiserver.persistence.dao.user.hibernate.EnterpriseDAOHibernate;
import com.abiquo.abiserver.persistence.dao.user.hibernate.RoleDAOHibernate;
import com.abiquo.abiserver.persistence.dao.user.hibernate.UserDAOHibernate;
import com.abiquo.abiserver.persistence.dao.user.hibernate.UserSessionDAOHibernate;
import com.abiquo.abiserver.persistence.dao.virtualappliance.NodeVirtualImageDAO;
import com.abiquo.abiserver.persistence.dao.virtualappliance.VirtualApplianceConversionsDAO;
import com.abiquo.abiserver.persistence.dao.virtualappliance.VirtualApplianceDAO;
import com.abiquo.abiserver.persistence.dao.virtualappliance.VirtualDataCenterDAO;
import com.abiquo.abiserver.persistence.dao.virtualappliance.VirtualMachineDAO;
import com.abiquo.abiserver.persistence.dao.virtualappliance.hibernate.NodeVirtualImageDAOHibernate;
import com.abiquo.abiserver.persistence.dao.virtualappliance.hibernate.VirtualApplianceConversionsDAOHibernate;
import com.abiquo.abiserver.persistence.dao.virtualappliance.hibernate.VirtualApplianceDAOHibernate;
import com.abiquo.abiserver.persistence.dao.virtualappliance.hibernate.VirtualDataCenterDAOHibernate;
import com.abiquo.abiserver.persistence.dao.virtualappliance.hibernate.VirtualMachineDAOHibernate;
import com.abiquo.abiserver.persistence.dao.virtualhardware.ResourceAllocationSettingDataDAO;
import com.abiquo.abiserver.persistence.dao.virtualhardware.ResourceManagementDAO;
import com.abiquo.abiserver.persistence.dao.virtualhardware.hibernate.ResourceAllocationSettingDataDAOHibernate;
import com.abiquo.abiserver.persistence.dao.virtualhardware.hibernate.ResourceManagementDAOHibernate;
import com.abiquo.abiserver.persistence.dao.virtualimage.CategoryDAO;
import com.abiquo.abiserver.persistence.dao.virtualimage.RepositoryDAO;
import com.abiquo.abiserver.persistence.dao.virtualimage.VirtualImageConversionsDAO;
import com.abiquo.abiserver.persistence.dao.virtualimage.VirtualImageDAO;
import com.abiquo.abiserver.persistence.dao.virtualimage.hibernate.CategoryDAOHibernate;
import com.abiquo.abiserver.persistence.dao.virtualimage.hibernate.RepositoryDAOHibernate;
import com.abiquo.abiserver.persistence.dao.virtualimage.hibernate.VirtualImageConversionsDAOHibernate;
import com.abiquo.abiserver.persistence.dao.virtualimage.hibernate.VirtualImageDAOHibernate;
import com.abiquo.abiserver.persistence.dao.workload.EnterpriseExclusionRuleDAO;
import com.abiquo.abiserver.persistence.dao.workload.FitPolicyRuleDAO;
import com.abiquo.abiserver.persistence.dao.workload.MachineLoadRuleDAO;
import com.abiquo.abiserver.persistence.dao.workload.hibernate.EnterpriseExclusionRuleDAOHibernate;
import com.abiquo.abiserver.persistence.dao.workload.hibernate.FitPolicyRuleDAOHibernate;
import com.abiquo.abiserver.persistence.dao.workload.hibernate.MachineLoadRuleDAOHibernate;
import com.abiquo.abiserver.pojo.authentication.UserSession;

/**
 * @author jdevesa
 */
public class HibernateDAOFactory implements DAOFactory {

    /**
     * HibernateDAOfactory
     */
    private static HibernateDAOFactory hibernateDAOfactory = null;

    /**
     * Entity to manage sessions
     */
    private static SessionFactory sessionFactory = null;

    /**
     * @return the sessionFactory
     */
    public static SessionFactory getSessionFactory() {
        if (sessionFactory == null) // XXX WTF
        {
            sessionFactory = HibernateUtil.getSessionFactory();
        }
        return sessionFactory;
    }

    /**
     * This class creates an instance of the DAO factory and initializes the Hibernate Session
     * 
     * @return
     * @throws URISyntaxException
     * @throws HibernateException
     */
    public static DAOFactory instance() throws HibernateException {
        // create the hibernatefactory
        if (hibernateDAOfactory == null) {
            try {
                hibernateDAOfactory = new HibernateDAOFactory();
            } catch (Exception ex) {
                ex.printStackTrace();
                throw new RuntimeException("Couldn't create DAOFactory: HibernateDAOFactory", ex);
            }

            createSessionFactory();
        }

        return hibernateDAOfactory;
    }

    protected static void createSessionFactory() {
        sessionFactory = HibernateUtil.getSessionFactory();
    }

    /**
     * @param sessionFactory the sessionFactory to set
     */
    public static void setSessionFactory(final SessionFactory sessionFactory) {
        HibernateDAOFactory.sessionFactory = sessionFactory;
    }

    @Override
    public boolean pingDB() {
        try {
            beginConnection();

            Query pingQuery = getSessionFactory().getCurrentSession().createSQLQuery("SELECT 1 FROM DUAL");

            pingQuery.list();

            endConnection();

            return true;
        } catch (Exception ex) {
            Transaction tx = getSessionFactory().getCurrentSession().getTransaction();
            if (tx != null && tx.isActive()) {
                tx.rollback();
            }

            return false;
        }
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#beginConnection()
     */
    @Override
    public void beginConnection() {
        beginConnection(false);
    }

    @Override
    public void beginConnection(final boolean readOnly) {
        if (readOnly) {
            getSessionFactory().getCurrentSession().setFlushMode(FlushMode.MANUAL);
        } else {
            getSessionFactory().getCurrentSession().setFlushMode(FlushMode.AUTO);
        }
        getSessionFactory().getCurrentSession().beginTransaction();
    }/*
      * (non-Javadoc)
      * @see com.abiquo.abiserver.persistence.DAOFactory#endConnection()
      */

    @Override
    public void endConnection() {
        Transaction tx = getSessionFactory().getCurrentSession().getTransaction();
        if (tx != null && tx.isActive()) {
            tx.commit();
        }
    }

    @Override
    public boolean isTransactionActive() {
        Transaction tx = getSessionFactory().getCurrentSession().getTransaction();
        return tx != null && tx.isActive();
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#getResourceAllocationSettingDataDAO()
     */
    @Override
    public ResourceAllocationSettingDataDAO getResourceAllocationSettingDataDAO() {
        return (ResourceAllocationSettingDataDAO) instantiateDAO(ResourceAllocationSettingDataDAOHibernate.class,
                ResourceAllocationSettingData.class);
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#getResourceManagementDAO()
     */
    @Override
    public ResourceManagementDAO getResourceManagementDAO() {
        return (ResourceManagementDAO) instantiateDAO(ResourceManagementDAOHibernate.class,
                ResourceManagementHB.class);
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#getVirtualApplianceDAO()
     */
    @Override
    public VirtualApplianceDAO getVirtualApplianceDAO() {
        return (VirtualApplianceDAO) instantiateDAO(VirtualApplianceDAOHibernate.class, VirtualappHB.class);
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#getVirtualDataCenterDAO()
     */
    @Override
    public VirtualDataCenterDAO getVirtualDataCenterDAO() {
        return (VirtualDataCenterDAO) instantiateDAO(VirtualDataCenterDAOHibernate.class,
                VirtualDataCenterHB.class);
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#getMeterDAO()
     */
    @Override
    public MeterDAO getMeterDAO() {
        return (MeterDAO) instantiateDAO(MeterDAOHibernate.class, MeterHB.class);
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#getUserDAO()
     */
    @Override
    public UserDAO getUserDAO() {
        return (UserDAO) instantiateDAO(UserDAOHibernate.class, UserHB.class);
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#getDataCenterDAO()
     */
    @Override
    public DataCenterDAO getDataCenterDAO() {
        return (DataCenterDAO) instantiateDAO(DataCenterDAOHibernate.class, DatacenterHB.class);
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#getHyperVisorDAO()
     */
    @Override
    public HyperVisorDAO getHyperVisorDAO() {
        return (HyperVisorDAO) instantiateDAO(HyperVisorDAOHibernate.class, HypervisorHB.class);
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#getPhysicalMachineDAO()
     */
    @Override
    public PhysicalMachineDAO getPhysicalMachineDAO() {
        return (PhysicalMachineDAO) instantiateDAO(PhysicalMachineDAOHibernate.class, PhysicalmachineHB.class);
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#getRackDAO()
     */
    @Override
    public RackDAO getRackDAO() {
        return (RackDAO) instantiateDAO(RackDAOHibernate.class, RackHB.class);
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#getEnterpriseDAO()
     */
    @Override
    public EnterpriseDAO getEnterpriseDAO() {
        return (EnterpriseDAO) instantiateDAO(EnterpriseDAOHibernate.class, EnterpriseHB.class);
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#getVirtualMachineDAO()
     */
    @Override
    public VirtualMachineDAO getVirtualMachineDAO() {
        return (VirtualMachineDAO) instantiateDAO(VirtualMachineDAOHibernate.class, VirtualmachineHB.class);
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#getVirtualImageDAO()
     */
    @Override
    public VirtualImageDAO getVirtualImageDAO() {
        return (VirtualImageDAO) instantiateDAO(VirtualImageDAOHibernate.class, VirtualimageHB.class);
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#getCategoryDAO()
     */
    @Override
    public CategoryDAO getCategoryDAO() {
        return (CategoryDAO) instantiateDAO(CategoryDAOHibernate.class, CategoryHB.class);
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#getRepositoryDAO()
     */
    @Override
    public RepositoryDAO getRepositoryDAO() {
        return (RepositoryDAO) instantiateDAO(RepositoryDAOHibernate.class, RepositoryHB.class);
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#getNodeVirtualImageDAO()
     */
    @Override
    public NodeVirtualImageDAO getNodeVirtualImageDAO() {
        return (NodeVirtualImageDAO) instantiateDAO(NodeVirtualImageDAOHibernate.class, NodeVirtualImageHB.class);
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#getRoleDAO()
     */
    @Override
    public RoleDAO getRoleDAO() {
        return (RoleDAO) instantiateDAO(RoleDAOHibernate.class, RoleHB.class);
    }

    @Override
    public VirtualImageConversionsDAO getVirtualImageConversionsDAO() {
        return (VirtualImageConversionsDAO) instantiateDAO(VirtualImageConversionsDAOHibernate.class,
                VirtualImageConversionsHB.class);
    }

    @Override
    public VirtualApplianceConversionsDAO getVirtualApplianceConversionsDAO() {
        return (VirtualApplianceConversionsDAO) instantiateDAO(VirtualApplianceConversionsDAOHibernate.class,
                VirtualApplianceConversionsHB.class);
    }

    @Override
    public RemoteServiceDAO getRemoteServiceDAO() {
        return (RemoteServiceDAO) instantiateDAO(RemoteServiceDAOHibernate.class, RemoteServiceHB.class);
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.persistence.DAOFactory#rollbackConnection()
     */
    @Override
    public void rollbackConnection() {
        if (sessionFactory.getCurrentSession().getTransaction().isActive()) {
            sessionFactory.getCurrentSession().getTransaction().rollback();
        }

    }

    /**
     * Generates a new DAO class
     * 
     * @param daoClass class to be instantiated
     * @param persistentClass class to persist with this DAO
     * @return the new Generic DAO class
     */
    @SuppressWarnings("unchecked")
    protected DAO instantiateDAO(final Class daoClass, final Class persistentClass) {
        try {
            HibernateDAO dao = (HibernateDAO) daoClass.newInstance();
            dao.setSession(getSessionFactory().getCurrentSession());
            dao.setPersistentClass(persistentClass);
            return dao;
        } catch (Exception ex) {
            throw new RuntimeException("Can not instantiate DAO: " + daoClass, ex);
        }
    }

    @Override
    public IpPoolManagementDAO getIpPoolManagementDAO() {
        return (IpPoolManagementDAO) instantiateDAO(IpPoolManagementDAOHibernate.class, IpPoolManagementHB.class);
    }

    @Override
    public NetworkConfigurationDAO getNetworkConfigurationDAO() {
        return (NetworkConfigurationDAO) instantiateDAO(NetworkConfigurationDAOHibernate.class,
                NetworkConfigurationHB.class);
    }

    @Override
    public NetworkDAO getNetworkDAO() {
        return (NetworkDAO) instantiateDAO(NetworkDAOHibernate.class, NetworkHB.class);
    }

    @Override
    public VlanNetworkDAO getVlanNetworkDAO() {
        return (VlanNetworkDAO) instantiateDAO(VlanNetworkDAOHibernate.class, VlanNetworkHB.class);
    }

    @Override
    public DatastoreDAO getDatastoreDAO() {
        return (DatastoreDAO) instantiateDAO(DatastoreDAOHibernate.class, DatastoreHB.class);
    }

    @Override
    public EnterpriseExclusionRuleDAO getEnterpriseExclusionRuleDAO() {
        return (EnterpriseExclusionRuleDAO) instantiateDAO(EnterpriseExclusionRuleDAOHibernate.class,
                EnterpriseExclusionRuleHB.class);
    }

    @Override
    public MachineLoadRuleDAO getMachineLoadRuleDAO() {
        return (MachineLoadRuleDAO) instantiateDAO(MachineLoadRuleDAOHibernate.class, MachineLoadRuleHB.class);
    }

    @Override
    public FitPolicyRuleDAO getFitPolicyRuleDAO() {
        return (FitPolicyRuleDAO) instantiateDAO(FitPolicyRuleDAOHibernate.class, FitPolicyRuleHB.class);
    }

    @Override
    public NetworkAssigmntDAO getNetworkAssigmentDAO() {
        return (NetworkAssigmntDAO) instantiateDAO(NetworkAssigmntDAOHibernate.class, NetworkAssignmentHB.class);
    }

    @Override
    public UserSessionDAO getUserSessionDAO() {
        return (UserSessionDAO) instantiateDAO(UserSessionDAOHibernate.class, UserSession.class);
    }

    @Override
    public OneTimeTokenSessionDAO getOneTimeTokenSessionDAO() {
        return (OneTimeTokenSessionDAO) instantiateDAO(OneTimeTokenSessionDAOHibernate.class,
                OneTimeTokenSessionHB.class);
    }
}