Hibernate 2

6
Capítulo 2. Arquitectura 2.1. Sinopsis 2.2. Estados de instancia 2.3. Integración JMX 2.4. Soporte JCA 2.5. Sesiones contextuales 2.1. Sinopsis El diagrama a continuación brinda una perspectiva a alto nivel de la arquitectura de Hibernate: Este documento no incluye una sinopsis detallada de la arquitecturas en tiempo de ejecución disponibles; Hibernate es flexible y soporta diferentes enfoques. Sin embargo, mostraremos los dos extremos: la arquitectura "mínima" y la arquitectura "completa". Este diagrama ilustra la manera en que Hibernate utiliza la base de datos y los datos de configuración para proporcionar servicios de persistencia y objetos persistentes a la aplicación. La arquitectura "mínima" hace que la aplicación proporcione sus propias conexiones JDBC y que administre sus propias transacciones. Este enfoque utiliza un subgrupo mínimo de las APIs de Hibernate:

description

Hibernate

Transcript of Hibernate 2

Captulo 2. Arquitectura2.1. Sinopsis2.2. Estados de instancia2.3. Integracin JMX2.4. Soporte JCA2.5. Sesiones contextuales2.1. SinopsisEl 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 deSessiony un cliente deConnectionProvider,SessionFactorypuede 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 deTransaction.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 persistentesObjetos 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 unaSession. Tan pronto como laSessionse 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 separadosInstancias de clases persistentes que no se encuentran actualmente asociadas con unaSession. Pueden haber sido instanciadas por la aplicacin y an no haber sido persistidas, o pueden haber sido instanciadas por unaSessioncerrada.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, unaSessionpuede extenderse sobre variasTransactiones. Sin embargo, la demarcacin de la transaccin, ya sea utilizando la API subyacente oTransaction, nunca es opcional.ConnectionProvider (org.hibernate.connection.ConnectionProvider)(Opcional) Una fbrica y pool de conexiones JDBC. Abstrae a la aplicacin delDatasourceoDriverManagersubyacente. No se expone a la aplicacin, pero puede ser extendido/implementado por el desarrollador.TransactionFactory (org.hibernate.TransactionFactory)(Opcional) Una fbrica de instancias deTransaction. No se expone a la aplicacin pero puede ser extendido/implementado por el desarrollador.Extension InterfacesHibernate 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 deTransaction/TransactionFactoryy/oConnectionProvider, para comunicarse directamente con JTA o JDBC.2.2. Estados de instanciaUna instancia de una clase persistente puede estar en uno de tres estados diferentes. Estos estados se definen con respecto a sucontexto de persistencia. El objetoSessionde Hibernate es el contexto de persistencia. Los tres estados diferentes son los siguientes:transitorioLa instancia no est asociada con un contexto de persistencia. No tiene identidad persistente o valor de clave principal.persistenteLa 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, Hibernategarantizaque la identidad persistente es equivalente a la identidad Java en relacin con la ubicacin del objeto.separadoLa 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 JMXJMX 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: Administracin de Sesin:El ciclo de vida de laSessionde Hibernate puede estar ligado automticamente al mbito de una transaccin JTA. Esto significa que ya no tiene que abrir ni cerrar laSessionmanualmente, 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 deTransactionde Hibernate para hacer esto). Para acceder a unaSessionllame 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 unaSessionFactoryde 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. SeeSeccin3.4.6, Estadsticas de Hibernatefor more information.2.4. Soporte JCAHibernate 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 contextualesLa 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 baseThreadLocaldesarrollados en casa, las clases ayudantes tales comoHibernateUtil, 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 mtodoSessionFactory.getCurrentSession(). Inicialmente, este asumi la utilizacin de las transaccionesJTA, en donde la transaccinJTAdefinia tanto el contexto como el campo de accin de una sesin actual. Dada la madurez de nmerosas implementacionesJTA TransactionManagerautnomas existentes, la mayora, si no es que todas, las aplicaciones deberan utilizar la administracin de transaccionesJTAen el caso de que se deplieguen o no en un contenedorJ2EE. Con base en esto, las sesiones contextuales basadas enJTAes todo lo que usted necesita utilizar.Sin embargo, desde la versin 3.1, el procesamiento detrs deSessionFactory.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_classpara permitir la conexin del campo de accin y el contexto de definicin de las sesiones actuales.Refirase a los Javadocs para la interfazorg.hibernate.context.CurrentSessionContextpara 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: org.hibernate.context.JTASessionContext: una transaccinJTArastrea 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 instanciaSessioncon mtodos estticos en esta clase: no abre, vacia o cierra unaSession.The first two implementations provide a "one session - one database transaction" programming model. This is also known and used assession-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 HibernateTransactionAPI 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 toCaptulo12,Transacciones y concurrenciafor more information and code examples.El parmetro de configuracinhibernate.current_session_context_classdefine cuales implementacionesorg.hibernate.context.CurrentSessionContextdeben utilizarse. Para compatibilidad con versiones anteriores, si este parmetro de configuracin no est establecido pero si tiene configurado unorg.hibernate.transaction.TransactionManagerLookup, Hibernate utilizar elorg.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.