Está en la página 1de 10

Persistencia 1.

0 DEFINICION DE HIBERNATE
Hibernate es una herramienta para la plataforma Java que facilita el mapeo de atributos entre una base de datos relacional y el modelo de objetos de una aplicacin, mediante archivos declarativos (XML) que permiten establecer estas relaciones. Hibernate es una herramienta ORM completa que ha conseguido en un tiempo record una excelente reputacin en la comunidad de desarrollo posicionndose claramente como el producto OpenSource lder en este campo gracias a sus y prestaciones, como buena documentacin a

Hibernate
los conocidos patrones para la delegacin de persistencia en POJOs. Una caracterstica de la filosofa de diseo de Hibernate ha de ser destacada especialmente, dada su gran importancia: puede utilizar los objetos Java definidos por el usuario tal cual, es decir, no utiliza tcnicas como generacin de cdigo a partir de descriptores del modelos de datos o manipulacin de bytecodes en tiempo de compilacin (tcnica conocida por su amplio uso en JDO), ni obliga a implementar interfaces determinados, ni heredar de una superclase. Utiliza en vez de ello el mecanismo de reflexin de Java, caracterstica que le permite un modelado iterativo fluido y natural basado en UML, un factor fundamental para lograr un trabajo gil y productivo. Adems abre las puertas a utilizar herencia en el modelo de datos (esta opcin estara limitada si una herramienta nos obliga a que los objetos de datos hereden de una superclase por no soportar Java herencia mltiple). Hibernate Caractersticas No intrusivo (estilo POJO) Muy buena documentacin (forums para ayuda, libro) Comunidad activa con muchos usuarios Transacciones, cach, asociaciones, polimorfismo, herencia, lazy loading, persistencia transitiva, estrategias de fetching.

estabilidad. Es valorado por muchos incluso solucin superior productos comerciales dentro de su enfoque, siendo una muestra clara de su reputacin y soporte la reciente integracin dentro del grupo JBoss que seguramente generar iniciativas muy interesantes para el uso de Hibernate dentro de este servidor de aplicaciones. Se empez a desarrollar hace algo ms de 2 aos por Gavin King siendo hoy Gavin y Christian Bauer los principales gestores de su desarrollo. Hibernate parte de una filosofa de mapear objetos Java "normales", tambin conocidos en la comunidad como "POJOs" (Plain Old Java Objects), no contempla la posibilidad de automatizar directamente la persistencia de Entity Beans tipo BMP (es decir, generar automticamente este tipo de objetos), aunque an as es posible combinar Hibernate con este tipo de beans utilizando

Persistencia
Potente lenguaje de consulta (HQL): subqueries, Facil testeo. No es estandard. outer joins, ordering, proyeccion (report query), paginacion.

Hibernate
objetos en nuestra aplicacin y en algn momento queremos que sean persistentes, normalmente abriremos una conexin JDBC, crearemos una sentencia SQL y copiaremos todos los valores de las propiedades sobre una PreparedStatement o en la cadena SQL que estemos

Por qu necesitamos Hibernate?

construyendo. Esto podra ser fcil para un objeto de tipo valor (value object:VO) de pequeo tamao pero consideremos esto para un objeto con muchas propiedades. Este no es el nico problema. Qu pasa con las asociaciones? Y si el objeto contiene a su vez a otros objetos? Los almacenaremos tambin en la Base de Datos? Automticamente? Manualmente? Qu haremos con las claves ajenas? Preguntas similares surgen a la hora de Si se esta trabajando con programacin orientada a objetos y bases de datos relacionales, seguramente habrs observado que estos son dos paradigmas diferentes. El modelo relacional trata con relaciones, tuplas y conjuntos y es muy matemtico por naturaleza. Sin embargo, el paradigma orientado a objetos trata con objetos, sus atributos y relaciones entre objetos. Cuando se quiere hacer que los objetos sean persistentes utilizando para ello una base de datos relacional, uno se da cuenta de que hay una desavenencia entre estos dos paradigmas, la tambin llamada diferencia objeto-relacional (object relational gap). Un mapeador objeto-relacional (ORM ) nos ayudar a evitar esta diferencia. Cmo se manifiesta esta brecha entre ambos paradigmas? Si estamos utilizando cargar un dato de la BD de un VO (se denomina value object o VO a un objeto que contiene informacin de negocio estructurada en grupos de tems de datos, tambin recibe el nombre de transfer object). Como se puede ver, la brecha existente entre los paradigmas de objeto y relacional se vuelve mucho mayor si disponemos de modelos con objetos grandes. Y hay muchas ms cosas a considerar como la carga lenta, las referencias circulares, el cach, etc. De hecho, hay estudios que demuestran que el 35% del cdigo de una aplicacin se produce como consecuencia del mapeado (correspondencia) entre los datos de datos. la aplicacin y el almacn de

Persistencia
Entonces, lo que necesitamos es una herramienta ORM (Object Relational Mapping). Bsicamente, una ORM intenta hacer todas estas tareas pesadas por nosotros. Con una buena ORM, slo tendremos que definir la forma en la que establecemos la correspondencia entre las clases y las tablas una sola vez (indicando que propiedad se corresponde con que columna, que clase con que tabla, etc.). Despus de esto, podremos hacer cosas como utilizar POJOs (Plain Old Java Objects) de nuestra aplicacin y decirle a nuestra ORM que los haga persistentes, con una instruccin similar Es a decir, esta: una orm.save(myObject).

Hibernate
de la persistencia, como los Ejes de entidad, es que la clase Hibernate persistente puede utilizarse en cualquier contexto de ejecucin, es decir, no se necesita un

contenedor especial para ello.


Hibernate Query Language HQL Hibernate nos proporciona adems un lenguaje para el manejo de consultas a la base de datos. Este lenguaje es similar a SQL y es utilizado para obtener objetos de la base de datos segn las condiciones especificadas en el HQL. El uso de HQL nos permite usar un lenguaje intermedio que segn la base de datos que usemos y el dialecto que especifiquemos ser traducido al SQL dependiente de cada base de datos de forma automtica y transparente Herramientas Hibernate Existen diversas herramientas tiles para el uso de Hibernate que cubren todo el desarrollo desde nuestra aplicacin hasta nuestra base de datos y viceversa: usadas junto con

herramienta puede leer o escribir en la base de datos utilizando VOs directamente. Ms formalmente: un modelo del dominio representa las entidades del negocio utilizadas en una aplicacin Java. En una arquitectura de sistemas por capas, el modelo del dominio se utiliza para ejecutar la logica del negocio (en Java, no en la base de datos). Esta capa del negocio se comunica con la capa de persistencia subyacente para recuperar y almacenar los objetos persistentes del modelo del dominio. ORM es el middleware en la capa de persistencia que gestiona la persistencia. Hibernate es un ORM de libre distribucin, que adems, es de las ms maduras y completas. Actualmente su uso esta muy extendido y adems esta siendo desarrollada de forma muy activa. Una caracterstica muy importante que distingue Hibernate de otras soluciones al problema

Persistencia

Hibernate
rasgos al concepto de conexin de JDBC y cumple un papel muy parecido, es decir, sirve proceso para de delimitar negocio, una o varias una operaciones relacionadas dentro de un demarcar transaccin y aporta algunos servicios adicionales como una cach de objetos para evitar interacciones innecesarias contra la BD. En este sentido veremos que la clase Session ofrece mtodos como save(Object object), createQuery(String queryString),

Desde herramientas de modelado UML como por ejemplo con Poseidon podemos generar modelos entidad relacin que son traducidos por AndroMDA a POJO's y mediante XDoclet se generan los ficheros HBM. Todas estas tareas se automatizan mediante el uso de ANT. Otra opcin es crear la base de datos con una herramienta de modelado y a partir de la base de datos una vez creada usar Middlegen para generar los ficheros HBM y a partir de estos los POJO's mediante hbm2java Los conceptos bsicos de Hibernate Hibernate se distingue entre objetos tipo transient y tipo persistent. Para almacenar y recuperar estos objetos de la base de datos, el desarrollador debe mantener una conversacin con el motor de Hibernate mediante un objeto especial, quizs el concepto clave ms importante dentro Hibernate, que es la Sesin (clase Session). Se puede equiparar a grandes

beginTransaction(),

close(),

etc.

para

interactuar con la BD tal como estamos acostumbrados a hacerlo con una conexin JDBC (de hecho "envuelve" una conexin JDBC), pero con una diferencia: mayor simplicidad, es decir, guardar un objeto, por ejemplo, consiste en algo as como session.save(miObjecto), sin necesidad de especificar una sentencia SQL, y esto es slo un ejemplo muy trivial en el que ganamos relativamente poco utilizando Hibernate. Con esto volvemos a los conceptos de transient y persistent: los primeros son objetos que slo existen en memoria y no en un almacn de datos (recurdese en este sentido tambin el modificador transient de Java), en algunos casos, no sern almacenados jams en la base de datos y en otros es un estado en el que se encuentran hasta ser almacenados en ella. Los segundos se caracterizan por haber sido ya almacenados y ser por tanto objetos persistentes. Dicho de otra: manera los objetos transient han sido instanciados por

Persistencia
el desarrollador sin haberlos almacenado mediante persistentes una han sesin, sido los objetos y creados

Hibernate
perteneciente a su correspondientes thread y con su contexto de objetos en cach, transacciones, etc. Como tal no sorprende que las sesiones no son thread-safe y que la informacin vinculada a ella no sea visible para otras sesiones. Es tambin lgico realizar que tenga que existir a una los

almacenados en una sesin o bien devueltos en una consulta realizada con la sesin. Igual que con las conexiones JDBC hemos de crear y cerrar sesiones, aunque no hay una y relacin cerrar 1:1 entre sesiones sesiones y y conexiones, es decir, no tenemos que abrir simultneamente conexiones JDBC, la poltica a seguir depender del contexto del proceso de negocio de cada de situacin nuestras dndonos polticas Hibernate amplias posibilidades para la implementacin (conexiones JDBC gestionadas por la aplicacin, por Hibernate, por un posible servidor de aplicaciones, etc.), siendo solamente necesario en la prctica crear y cerrar explcitamente las sesiones de Hibernate. Hemos visto que las sesiones son un concepto ligado a un proceso de negocio, por tanto es natural pensar que una sesin siempre va a pertenecer a un mismo thread de ejecucin (el que pertenece a la ejecucin de un mtodo de negocio para un usuario o sistema externo concreto), aunque tcnicamente se pueden compartir sesiones entre threads, esto no se debe hacer jams por no ser una buena poltica de diseo y los consecuentes problemas que puede generar. Es decir, en un entorno multiusuario y por tanto multithread habr por tanto mltiples sesiones simultneas, cada una

institucin superior para crear sesiones y operaciones comunes diferentes threads como lo puede ser la gestin de una cach compartida entre threads o cach de segundo nivel. Este elemento es la clase SessionFactory y en ella podremos encontrar mtodos como openSession()o evict(Class persistentClass). Por fin tenemos que pensar tambin en qu sucede si en un entorno de mltiples hilos de ejecucin la aplicacin accede a un mismo objeto desde dos sesiones diferentes. Vimos que una instancia de un objeto persistente nunca es compartida por dos sesiones al contar cada una con su propio contexto para ello, de modo que existirn dos instancias dentro de la misma mquina virtual Java para un mismo objeto de datos, lo cual no lleva al concepto de identidad. Hay que distinguir entre identidad de instancia Java, es decir: objeto1 == objeto2, identidad persistente: objeto1.getId().equals(objeto2.getId)) y la identidad a nivel de base de datos (claves primarias iguales). Por tanto, puede haber dentro de la misma mquina virtual varios objetos con la misma identidad persistente, pero diferentes identidades como instancias por ser objetos de datos Java que

Persistencia
representan la misma entidad persistente. Normalmente la identidad persistente del objeto y la identidad de base de datos coincidirn, pero esto puede no ser as para lgicas de negocio muy particularidad. En todo caso, esta poltica depende del desarrollador que puede jugar, por ejemplo, con sobreescribir el mtodo equals() para definir un comportamiento peculiar y utilizar claves especiales para la identidad de objetos diferencindolas o relacionndolas con la propiedad del objeto utilizada como clave primaria para su presistencia en la base de datos. Configuracin de Hibernate Para utilizar Hibernate en una aplicacin, es necesario conocer como configurarlo. Hibernate puede configurarse y ejecutarse en la mayora de aplicaciones java y entornos Hibernate de se desarrollo. utiliza en Generalmente, aplicaciones

Hibernate
seguridad se debe especificar de forma declarativa, es decir en sus metadatos. Un servidor de aplicaciones J2EE, tal como JBoss, Bea WebLogic o IBM WebSphere implementan un entorno gestionado para Java.

Entorno no gestionado: proporciona una gestin bsica de la concurrencia a travs de un pooling de threads. Un contenedor de servlets, como Tomcat proporciona un entorno de servidor no gestionado para aplicaciones Web Java. Una aplicacin stand-alone tambin se considera entornos proporcionan recursos, o como no gestionada. Los no gestionados no para propia infraestructura seguridad. La

transacciones automticas, gestiones de aplicacin es la que gestiona las conexiones con la base de datos y establece los lmites de las transacciones. Tanto en un entorno gestionado como en uno no gestionado, lo primero que debemos hacer es iniciar Hibernate. Para hacer esto debemos crear una Session Factory desde una Configuration.

cliente/servidor de dos y tres capas, desplegndose Hibernate nicamente en el servidor. Las aplicaciones cliente normalmente utilizan un navegador Web, pero las aplicaciones swing y AWT tambin son usuales. Aunque solamente vamos a ver como configurar Hibernate en un entorno no gestionado, es importante comprender la diferencia entre la configuracin de Hibernate para entornos gestionados y no gestionados:

Entorno gestionado: los pools de recursos tales como conexiones a la base de datos permiten establecer los lmites de las transacciones y la

Persistencia 2.0 ARQUITECTURA


Configuracin de la base de datos

Hibernate

El API de Hibernate es una arquitectura de dos capas (Capa de persistencia y Capa de Negocio). En la siguiente Figura se muestran los roles de las interfaces Hibernate ms importantes en las capas de persistencia y de negocio de una aplicacin J2EE. La capa de negocio est situada sobre la capa de persistencia, debido a que acta como un cliente de la capa de persistencia.

Resumen de pasos de configuracin

Situar el *.jar del driver JDBC elegido y el fichero hibernate2.jar en nuestro classpath

Aadir las dependencias de Hibernate (directorio (lib)) en el classpath. Las Interfaces mostradas se clasifican de la siguiente forma: de Interfaces llamadas por la aplicacin para realizar operaciones bsicas: propiedades en un de en Session: interfaz primaria utilizada cualquier Transaction Query: permite realizar peticiones aplicacin Hibernate (lib/README.txt contiene una lista de libreras requeridas y opcionales).

Elegir

configurar

un

pool

conexiones JDBC Determinar Configuracin las

fichero

hibernate.properties en el classpath,

(SessionFactory).

Crear una instancia de Configuracin en nuestra aplicacin y cargar los ficheros de mapeado XML utilizando addResource() o addClass().

a la base de datos y controla cmo se ejecuta dicha peticin (query). Las peticiones se escriben en HQL o en el dialecto SQL nativo de la base de datos que estamos utilizando. Una instancia Query se utiliza para enlazar los

Obtener una SessionFactory a partir de Configuration llamando a BuildSessionFactory().

Persistencia
parmetros de la peticin, limitar el numero de resultados devueltos por la peticin y para ejecutar dicha peticin. para los desarrolladores

Hibernate
optar por

Hibernate. Si bien es cierto existe una brecha grande entre los elementos que intervienen en el anlisis y desarrollo de las aplicaciones de los proyectos el que actualmente estn a utilizando paradigma orientados

Interfaces llamadas por el cdigo de la


infraestructura de la aplicacin para configurar Hibernate. La ms importante es la clase Configuration: se utiliza para configurar y "arrancar" Hibernate. La aplicacin utiliza una instancia especificar de la Configuration para

objetos, esto aun se ve aplazado por un ancla el cual es la base de datos de tipo relacional, sin embargo en la actualidad este trabajo de conexin y manipulacin de informacin de la base de datos ya no es tan tediosa gracias a la aparicin de Hibernate, de la cual toda aplicacin Web hecha en Java que necesite interactuar con la base de datos puede hacer uso, lo cual simplifica enormemente la programacin de lgica.

ubicacin de los documentos que indican el mapeado de los objetos y propiedades especficas de Hibernate, y a continuacin crea la Session Factory.

Interfaces callback que permiten a la


aplicacin reaccionar ante determinados eventos que ocurren dentro de la aplicacin, tales como Interceptor,

Lifecycle, y Validatable.

4.0 CASOS DE XITO A. Adding Technology ha colaborado,


por mediacin de acuerdos firmados con Soluziona, en el diseo y posterior desarrollo de la intranet corporativa de Feria de Muestras de Valencia. Se decide implantar un sistema que sea capaz de simplificar todas las tareas administrativas Muestras sino cada siguientes unificar proceso que de y supone la celebracin de un evento en la Feria de Valencia. asegurar de el Adems se pretende no solo simplificar cumplimiento de todas las tareas de negocio. tecnologas: La intranet esta desarrollada con las

Interfaces que permiten extender las


funcionalidades de mapeado de e Hibernate, como por ejemplo UserType, CompositeUserType, IdentifierGenerator. Adems, Hibernate hace uso de APIs de Java, tales como JDBC, JTA (Java Transaction Api) y JNDI (Java Naming Directory Interface).

3.0 APLICACIN
Prcticamente, no hay lugar donde el uso de este framework no sea til, las aplicaciones Java que requieran una constante manipulacin de base de datos requieren por su facilidad de manejo y versatilidad

Persistencia
Hibernate: motor de persistencia. SQLServer 2000: base de datos Struts y Tiles Ajax Servicios webs con Axis Servidor de aplicaciones JBoss Diferentes patrones de diseo como Delegate, DAO, DTO, fachade, etc.

Hibernate

5.0 CONCLUSIONES Y RECOMENDACIONES


* Utilizar un framework de ORM

simplifica enormemente la programacin de lgica de persistencia. Se trata de una idea completamente madura que cada vez se B. Desarrollo orientada empresa: Abastecimiento, Produccin, Gestin a e implementacin resolver la toma de de vuelve ms popular. Nuestra lgica de negocios trabaja contra un modelo de dominio completamente orientado a objetos. Generamos entre un 30% y un 40% menos de cdigo y el tipo de cdigo generado mantenible. * Es fundamental conocer bien como funcionan las tecnologas que utilizamos. En el caso de Hibernate hemos visto que dependiendo de como hagamos las cosas puede afectar directamente al rendimiento de la aplicacin. Esto no quiere decir que no debamos usar C. Bunge Argentina S.A Workflow de usuarios: Desarrollo de workflow para la gestin de usuarios y permisos de los diferentes ambientes de los sistemas de de la organizacin de Stock: Workflow Ajuste Hibernate, al contrario, Hibernate nos proporciona grandes beneficios como es la independencia de la base de datos, bajo acoplamiento entre negocio y persistencia, y un desarrollo rpido, ya que con Hibernate podremos cubrir de manera sencilla y rpida el 80 - 90% de la persistencia de nuestra aplicacin. Esto nos permite centrar nuestros esfuerzos en optimizar las consultas que realmente lo merecen. * En cuanto al manejo de consultas Hibernate saca una ligera ventaja ya que es mucho ms sencillo y aplicacin comercial (ERP) en Web, decisiones en todas las actividades de la Comercializacin, Finanzas, Costos, Contabilidad, contable,

Presupuestos, Distribucin, y control de (administrativa, presupuestaria, entre otras). Tecnologa Utilizada: Oracle Aplication Server10giDS 10gOracle Server 10g.

Desarrollo de workflow para la gestin de Ajustes de Stock y Transferencias en y entre Plantas de productos Tecnologa Utilizada: Oracle9i - J2EE Hibernate - JBoss - Oracle Workflow.

Persistencia
tiene su propio lenguaje HQL que lo hace multi motor de base de datos, eso es uno de los atractivos de Hibernate. * Hibernate soporta la mayora de los sistemas de bases de datos SQL. El Hibernate Query Language, diseado como una extensin mnima, orientada a objetos, de SQL, proporciona un puente elegante entre los mundos objeto y relacional. Hibernate ofrece facilidades para recuperacin y actualizacin de datos, control de transacciones, repositorios de conexiones a bases de datos, consultas programticas y declarativas, y un control de relaciones de entidades declarativas. * Hibernate es una muy buena herramienta en lo que se refiere a mapeo clases en una base de datos relacional, pero en lo que se refiere al manejo de transacciones y conexiones capacidad. * Hibernate es menos invasivo que otros marcos de trabajo de mapeo O/R. Se utilizan Reflection y la generacin de bytecodes en tiempo de ejecucin, y la generacin del SQL ocurre en el momento de la arrancada. comn y de el Esto nos permite desarrollar objetos persistentes siguiendo el lenguaje Java: marco incluyendo de trabajo asociacin, composicin herencia, polimorfismo, le falta funcionalidad y

Hibernate

Collections de Java.

10

También podría gustarte