Sei sulla pagina 1di 5

Captulo 2.

Arquitectura
2.1.
2.2.
2.3.
2.4.
2.5.

Sinopsis
Estados de instancia
Integracin JMX
Soporte JCA
Sesiones contextuales

2.1. Sinopsis
El diagrama a continuacin brinda una perspectiva a alto nivel de la arquitectura de Hibernate:

Este documento no incluye una sinopsis detallada de la arquitecturas en tiempo de ejecucin disponibles;
Hibernate es flexible y soporta diferentes enfoques. Sin embargo, mostraremos los dos extremos: la arquitectura
"mnima" y la arquitectura "completa".
Este diagrama ilustra la manera en que Hibernate utiliza la base de datos y los datos de configuracin para
proporcionar servicios de persistencia y objetos persistentes a la aplicacin.
La arquitectura "mnima" hace que la aplicacin proporcione sus propias conexiones JDBC y que administre sus
propias transacciones. Este enfoque utiliza un subgrupo mnimo de las APIs de Hibernate:

La arquitectura "completa" abstrae la aplicacin de las APIs de JDBC/JTA y permite que Hibernate se encargue de
los detalles.

He aqu algunas definiciones de los objetos en los diagramas:


SessionFactory (org.hibernate.SessionFactory)
Un cach threadsafe (inmutable) de mapeos compilados para una sola base de datos. Una fbrica
deSession y un cliente de ConnectionProvider, SessionFactory puede mantener un cach opcional (de segundo
nivel) de datos reusables entre transacciones a nivel de proceso o de clster.
Session (org.hibernate.Session)
Un objeto mono-hebra, de corta vida que representa una conversacin entre la aplicacin y el
almacenamiento persistente. Envuelve una conexin JDBC y es una fbrica de Transaction. Sessionmantiene
un cach requerido de primer nivel de objetos persistentes, que se utiliza cuando se navega el grfico de
objetos o mientras se buscan objetos por identificador.

Objetos y colecciones persistentes


Objetos de corta vida, mono-hebra contienen un estado persistente as como una funcionalidad
empresarial. Estos pueden ser JavaBeans/POJOs normales. Estos se encuentran asociados con
exactamente una Session. Tan pronto como la Session se cierre, sern separados y estarn libres para
utilizarlos en cualquier capa de aplicacin, (por ejemplo, directamente como objetos de transferencia de
datos hacia y desde la presentacin).
Objetos y colecciones transitorios y separados
Instancias de clases persistentes que no se encuentran actualmente asociadas con una Session. Pueden
haber sido instanciadas por la aplicacin y an no haber sido persistidas, o pueden haber sido instanciadas
por una Session cerrada.
Transaction (org.hibernate.Transaction)
(Opcional) Un objeto de corta vida, mono-hebra que la aplicacin utiliza para especificar unidades
atmicas de trabajo. Abstrae la aplicacin de las transacciones subyacentes JDBC, JTA o CORBA. En
algunos casos, una Session puede extenderse sobre varias Transactiones. Sin embargo, la demarcacin de la
transaccin, ya sea utilizando la API subyacente o Transaction, nunca es opcional.
ConnectionProvider (org.hibernate.connection.ConnectionProvider)
(Opcional) Una fbrica y pool de conexiones JDBC. Abstrae a la aplicacin
del Datasource o DriverManagersubyacente. No se expone a la aplicacin, pero puede ser
extendido/implementado por el desarrollador.
TransactionFactory (org.hibernate.TransactionFactory)
(Opcional) Una fbrica de instancias de Transaction. No se expone a la aplicacin pero puede ser
extendido/implementado por el desarrollador.
Extension Interfaces
Hibernate ofrece un rango de interfaces de extensin opcionales que puede implementar para personalizar
el comportamiento de su capa de persistencia. Para obtener ms detalles, vea la documentacin de la API.
Dada una arquitectura "sencilla", la aplicacin evita las APIs
de Transaction/TransactionFactory y/oConnectionProvider, para comunicarse directamente con JTA o JDBC.

2.2. Estados de instancia


Una instancia de una clase persistente puede estar en uno de tres estados diferentes. Estos estados se
definen con respecto a su contexto de persistencia. El objeto Session de Hibernate es el contexto de
persistencia. Los tres estados diferentes son los siguientes:
transitorio
La instancia no est asociada con un contexto de persistencia. No tiene identidad persistente o valor de
clave principal.
persistente
La instancia se encuentra actualmente asociada con un contexto de persistencia. Tiene una identidad
persistente (valor de clave principal) y puede tener una fila correspondiente en la base de datos. Para un
contexto de persistencia en particular, Hibernate garantiza que la identidad persistente es equivalente a la
identidad Java en relacin con la ubicacin del objeto.
separado
La instancia estuvo alguna vez asociada con un contexto de persistencia, pero ese contexto se cerr, o la
instancia fue serializada a otro proceso. Tiene una identidad persistente y puede tener una fila

correspondiente en la base de datos. Para las instancias separadas, Hibernate no establece ninguna
garanta sobre la relacin entre identidad persistente e identidad Java.

2.3. Integracin JMX


JMX es el estndar J2EE para la gestin de componentes Java. Hibernate se puede administrar por medio
de un servicio estndar JMX. Brindamos una implementacin de MBean en la
distribucin:org.hibernate.jmx.HibernateService.
Para ver un ejemplo de cmo desplegar Hibernate como un servicio JMX en un servidor de aplicaciones
JBoss, por favor, refirase al manual del usuario de JBoss. JBoss AS tambin proporciona estos beneficios
si despliega utilizando JMX:
o

Administracin de Sesin: El ciclo de vida de la Session de Hibernate puede estar ligado

automticamente al mbito de una transaccin JTA. Esto significa que ya no tiene que abrir ni
cerrar la Session manualmente, esto pasa a ser el trabajo de un interceptor EJB de JBoss. Adems
tampoco tiene que preocuparse ms de la demarcacin de la transaccin en su cdigo (a menos de
que quiera escribir una capa de persitencia porttil, utilice la API de Transaction de Hibernate para
hacer esto). Para acceder a una Session llame alHibernateContext.
Despliegue HAR:: el servicio JMX de Hibernate se implementa usando un descriptor de despliegue
de servicio de JBoss en un archivo EAR y/o SAR, que soporta todas las opciones de configuracin
usuales de una SessionFactory de Hibernate. Sin embargo, todava tiene que nombrar todos sus
archivos de mapeo en el descriptor de despliegue. Si utiliza el depliegue HAR opcional, JBoss
detectar automticamente todos los archivos de mapeo en su archivo HAR.

Para ms informacin sobre estas opciones, consulte el Manual de Usuario de JBoss AS.
Another feature available as a JMX service is runtime Hibernate statistics. See Seccin 3.4.6, Estadsticas
de Hibernate for more information.

2.4. Soporte JCA


Hibernate tambin puede ser configurado como un conector JCA. Por favor refirase al sitio web para
encontrar ms detalles. Sin embargo, tenga en cuenta que el soporte de JCA de Hibernate an est bajo
desarrollo.

2.5. Sesiones contextuales


La mayora de las aplicaciones que utilizan Hibernate necesitan alguna forma de sesiones "contextuales",
en donde una sesin dada se encuentra en efecto en todo el campo de accin de un contexto dado. Sin
embargo, a travs de las aplicaciones la definicin de lo que constituye un contexto es usualmente
diferente y diferentes contextos definen diferentes campos de accin para la nocin de actual. Las
aplicaciones que utiliza Hibernate antes de la version 3.0 tienden a utilizar ya sea sesiones contextuales
con base ThreadLocal desarrollados en casa, las clases ayudantes tales como HibernateUtil, o enfoques de
terceros utilizados, como Spring o Pico, los cuales brindaban sesiones contextuales con base
proxy/intercepcin.
Comenzando con la version 3.0.1, Hibernate agreg el mtodo SessionFactory.getCurrentSession().
Inicialmente, este asumi la utilizacin de las transacciones JTA, en donde la transaccin JTA definia tanto
el contexto como el campo de accin de una sesin actual. Dada la madurez de nmerosas
implementacionesJTA TransactionManager autnomas existentes, la mayora, si no es que todas, las
aplicaciones deberan utilizar la administracin de transacciones JTA en el caso de que se deplieguen o no
en un contenedor J2EE. Con base en esto, las sesiones contextuales basadas en JTA es todo lo que usted
necesita utilizar.

Sin embargo, desde la versin 3.1, el procesamiento detrs de SessionFactory.getCurrentSession() ahora es


conectable. Para ese fin, se ha aadido una nueva interfaz de
extensin,org.hibernate.context.CurrentSessionContext, y un nuevo parmetro de
configuracin,hibernate.current_session_context_class para permitir la conexin del campo de accin y el
contexto de definicin de las sesiones actuales.
Refirase a los Javadocs para la interfaz org.hibernate.context.CurrentSessionContext para poder ver una
discusin detallada de su contrato. Define un mtodo nico, currentSession(), por medio del cual la
implementacin es responsable de rastrear la sesin contextual actual. Tal como viene empacada,
Hibernate incluye tres implementaciones de esta interfaz:
o

org.hibernate.context.JTASessionContext: una transaccin JTA rastrea y asume las sesiones actuales.

Aqu el procesamiento es exactamente el mismo que en el enfoque ms antiguo de JTA-slamente.


Refirase a los Javadocs para obtener ms informacin.
org.hibernate.context.ThreadLocalSessionContext : las sesiones actuales son rastreadas por un hilo de

ejecucin. Consulte los Javadocs para obtener ms detalles.


org.hibernate.context.ManagedSessionContext : las sesiones actuales son rastreadas por un hilo de
ejecucin. Sin embargo, usted es responsable de vincular y desvincular una instancia Session con
mtodos estticos en esta clase: no abre, vacia o cierra una Session.

The first two implementations provide a "one session - one database transaction" programming model.
This is also known and used as session-per-request. The beginning and end of a Hibernate session is
defined by the duration of a database transaction. If you use programmatic transaction demarcation in
plain JSE without JTA, you are advised to use the Hibernate Transaction API to hide the underlying
transaction system from your code. If you use JTA, you can utilize the JTA interfaces to demarcate
transactions. If you execute in an EJB container that supports CMT, transaction boundaries are defined
declaratively and you do not need any transaction or session demarcation operations in your code. Refer
to Captulo 12, Transacciones y concurrenciafor more information and code examples.
El parmetro de configuracin hibernate.current_session_context_class define cuales
implementacionesorg.hibernate.context.CurrentSessionContext deben utilizarse. Para compatibilidad con
versiones anteriores, si este parmetro de configuracin no est establecido pero si tiene configurado
unorg.hibernate.transaction.TransactionManagerLookup, Hibernate utilizar
el org.hibernate.context.JTASessionContext. Usualmente el valor de este parmetro slamente nombrara la
clase de implementacin a utilizar. Sin embargo, para las tres implementaciones includas existen tress
nombres cortos: "jta", "thread" y "managed".

Copyright 2004 Red Hat, Inc.

Potrebbero piacerti anche