/** * 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); } }