org.opensixen.dev.omvc.util.HSession.java Source code

Java tutorial

Introduction

Here is the source code for org.opensixen.dev.omvc.util.HSession.java

Source

/******* BEGIN LICENSE BLOCK *****
* Versin: GPL 2.0/CDDL 1.0/EPL 1.0
*
* Los contenidos de este fichero estn sujetos a la Licencia
* Pblica General de GNU versin 2.0 (la "Licencia"); no podr
* usar este fichero, excepto bajo las condiciones que otorga dicha 
* Licencia y siempre de acuerdo con el contenido de la presente. 
* Una copia completa de las condiciones de de dicha licencia,
* traducida en castellano, deber estar incluida con el presente
* programa.
* 
* Adicionalmente, puede obtener una copia de la licencia en
* http://www.gnu.org/licenses/gpl-2.0.html
*
* Este fichero es parte del programa opensiXen.
*
* OpensiXen es software libre: se puede usar, redistribuir, o
* modificar; pero siempre bajo los trminos de la Licencia 
* Pblica General de GNU, tal y como es publicada por la Free 
* Software Foundation en su versin 2.0, o a su eleccin, en 
* cualquier versin posterior.
*
* Este programa se distribuye con la esperanza de que sea til,
* pero SIN GARANT?A ALGUNA; ni siquiera la garanta implcita 
* MERCANTIL o de APTITUD PARA UN PROPSITO DETERMINADO. Consulte 
* los detalles de la Licencia Pblica General GNU para obtener una
* informacin ms detallada. 
*
* TODO EL CDIGO PUBLICADO JUNTO CON ESTE FICHERO FORMA PARTE DEL 
* PROYECTO OPENSIXEN, PUDIENDO O NO ESTAR GOBERNADO POR ESTE MISMO
* TIPO DE LICENCIA O UNA VARIANTE DE LA MISMA.
*
* El desarrollador/es inicial/es del cdigo es
*  FUNDESLE (Fundacin para el desarrollo del Software Libre Empresarial).
*  Indeos Consultoria S.L. - http://www.indeos.es
*
* Contribuyente(s):
*  Eloy Gmez Garca <eloy@opensixen.org> 
*
* Alternativamente, y a eleccin del usuario, los contenidos de este
* fichero podrn ser usados bajo los trminos de la Licencia Comn del
* Desarrollo y la Distribucin (CDDL) versin 1.0 o posterior; o bajo
* los trminos de la Licencia Pblica Eclipse (EPL) versin 1.0. Una 
* copia completa de las condiciones de dichas licencias, traducida en 
* castellano, debern de estar incluidas con el presente programa.
* Adicionalmente, es posible obtener una copia original de dichas 
* licencias en su versin original en
*  http://www.opensource.org/licenses/cddl1.php  y en  
*  http://www.opensource.org/licenses/eclipse-1.0.php
*
* Si el usuario desea el uso de SU versin modificada de este fichero 
* slo bajo los trminos de una o ms de las licencias, y no bajo los 
* de las otra/s, puede indicar su decisin borrando las menciones a la/s
* licencia/s sobrantes o no utilizadas por SU versin modificada.
*
* Si la presente licencia triple se mantiene ntegra, cualquier usuario 
* puede utilizar este fichero bajo cualquiera de las tres licencias que 
* lo gobiernan,  GPL 2.0/CDDL 1.0/EPL 1.0.
*
* ***** END LICENSE BLOCK ***** */

package org.opensixen.dev.omvc.util;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.criterion.Restrictions;
import org.opensixen.dev.omvc.interfaces.IPO;

/**
 * HSession
 * Helper for Hibernate 
 *
 * @author Eloy Gomez
 * Indeos Consultoria http://www.indeos.es
 */
public class HSession {
    private static Logger s_log = Logger.getLogger(HSession.class);

    /** Hibernate Session Factory */
    private static final SessionFactory sessionFactory;

    /**
     * Inicio estatico del factory de Hibernate
     */
    static {
        try {
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();

        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    /**
     * Develve la sesion de Hibernate
     * @return
     * @throws HibernateException
     */
    public static Session getSession() throws HibernateException {
        return sessionFactory.openSession();
    }

    /**
     * Devuelve un Criteria con los filtros de seguridad apropiados
     * @param persistentClass
     * @return
     */
    public static Criteria getCriteria(Class persistentClass) {
        Session sess = getSession();
        return getCriteria(sess, persistentClass);
    }

    /**
     * Devuelve un Criteria con los filtros de seguridad apropiados
     * @param sess
     * @param persistentClass
     * @return
     */
    public static Criteria getCriteria(Session sess, Class persistentClass) {
        if (sess == null) {
            sess = getSession();
        }

        Criteria crit = sess.createCriteria(persistentClass);

        return crit;
    }

    /**
     * Graba un objeto en base de datos..
     * @param o
     */
    public static boolean save(Object o) {
        try {
            Session sess = HSession.getSession();
            sess.beginTransaction();
            save(sess, o);
            sess.getTransaction().commit();
            s_log.info("Guardado con exito.");
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            s_log.error("No se ha podido grabar el objeto: " + o.getClass().getCanonicalName(), e);
            return false;
        }
    }

    /**
     * Graba un objeto en base de datos..
     * @param o Objeto a guardar
     * @param sess Session
     */
    public static boolean save(Session sess, Object o) throws HibernateException {
        try {
            sess.saveOrUpdate(o);
            s_log.info("Guardado con exito.");
            return true;
        } catch (HibernateException e) {
            s_log.error("No se ha podido grabar el objeto", e);
            return false;
        }
    }

    /**
     * Borra un objeto en base de datos..
     * @param o Objeto a borrar
     */
    public static void delete(Object o) {
        try {
            Session sess = HSession.getSession();
            sess.beginTransaction();
            delete(sess, o);
            sess.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Borra un objeto en base de datos..
     * @param sess Session
     * @param o Objeto a borrar
     */
    public static void delete(Session sess, Object o) {
        sess.delete(o);
    }

    /**
     * Devuelve el objeto con ID dado
     * @param <T>
     * @param clazz
     * @param id
     * @return
     */
    public static <T extends IPO> T get(Class<T> clazz, int id) {
        Criteria crit = getCriteria(clazz);
        crit.add(Restrictions.idEq(new Integer(id)));
        return (T) crit.uniqueResult();
    }

}