SlideShare una empresa de Scribd logo
1 de 10
Descargar para leer sin conexión
UNIVERSIDAD NACIONAL DE EL SALVADOR
FACULTAD MULTIDICIPLINARIA DE OCCIDENTE




                    BASE DE DATOS 2012
UNIVERSIDAD NACIONAL DE EL SALVADOR
                                               FACULTAD MULTIDICIPLINARIA DE OCCIDENTE


NHYBERNATE
Nhibernate, Motor de persistencia
Puesto a que este mundo es muy cambiante debemos estar al tanto de las diferentes tipos
de tecnologías que vienen saliendo al campo informático. Herramientas que van a facilitar
la vida de cualquier programados, analista de base de datos, administrador de red, en fin
en este campo tan variado y complicado que es la informática. Con este trabajo daremos a
conocer una de las tantas tecnologías nuevas en las que el campo de programación va
avanzando y mejorando para lograr hacer la vida de dichos más fácil.


NHibernate es la conversión de Hibernate de lenguaje Java a C# para su integración en la
plataforma .NET. Al igual que muchas otras herramientas libres para esta plataforma,
NHibernate también funciona en Mono.
Al usar NHibernate para el acceso a datos el desarrollador se asegura de que su aplicación
es agnóstica en cuanto al motor de base de datos a utilizar en producción, pues
NHibernate soporta los más habituales en el mercado: MySQL, PostgreSQL, Oracle, MS
SQL Server, etc. Sólo se necesita cambiar una línea en el fichero de configuración para que
podamos utilizar una base de datos distinta.


Qué es un motor de persistencia?
Los motores de persistencia, que en el mundo de la programación no es más que un
componente de software (una capa de programación), también conocido como “capa de
datos”, “capa de persistencia” o “correspondencia O/R (“OR mapping”)”, son los que
permiten establecer una capa intermedia entre el sistema orientado a objetos y la base de
datos relacionales donde se almacenarán toda la información del mismo.
Esta solución brinda las mejores ventajas de ambos modelos:


       Por una parte, se puede programar con orientación a objetos, aprovechando las
        ventajas de flexibilidad, mantenimiento y reusabilidad.
       Por otra parte, el poder usar una base de datos relacional, aprovechándose de su
        madurez, la estandarización y las herramientas relacionales que hay para ella.


En la actualidad existen distintos tipos de motores de persistencia. Entre los de código
abierto se pueden destacar: Hibernate, Castor, Torque, OJB y Cayenne. Entre los
comerciales, se pueden nombrar: TopLink, Cocobase y FastObjects. En los últimos años se
ha creado una especificación llamada JDO, para estandarizar la forma de programar en
Java con esos motores de persistencia. Ejemplos de motores de persistencia que cumplen




                                                                      BASE DE DATOS 2012
UNIVERSIDAD NACIONAL DE EL SALVADOR
                                                FACULTAD MULTIDICIPLINARIA DE OCCIDENTE

el estándar JDO son Kodo, JDO Genie, LiDo, Exadel JDO, IntelliBO, JRelay JDO (todos ellos
comerciales), Speedo JDO, TJDO y XORM (de código abierto).
NHibernate
En .NET los datos se representan en objetos. Sin embargo, las bases de datos habituales
(como Oracle, SQL Server) guardan sus datos en forma relacional. Evidentemente existe
una brecha entre estos dos mundos ("objetos-relacional") que, de alguna manera, debe
completarse.

Los frameworks que se encargan de adaptar el mundo de objetos al relacionan son
conocidos como ORM (Object-RelationalMapping). Existen varios ORM en el mercado.

NHibernate se encarga, justamente, de relacionar clases con tablas. A forma muy simple,
una tabla se mapea contra una clase, y cada columna contra un atributo de dicha clase.

De esta forma, NHibernate se encargará de ocultar la complejidad del acceso a datos,
exponiendo solamente objetos. Idealmente, en una aplicación con NHibernate, no es
necesario generar querys SQL para interactuar con los datos (de hecho, la aplicación no
tiene contacto directo con la base de datos).

Los mapeos
Como dijimos, las tablas a usar se mapean contra clases. Es decir, tendremos que
establecer cuál es la relación entre cada tabla y cada clase, y cuál es la relación entre cada
columna con cada atributo de clase. Con NHibernate, estos mapeos pueden escribirse en
archivos XML o utilizando anotaciones. En este curso vamos a usar anotaciones para
realizar los mapeos, ya que en términos generales es una implementación más sencilla y
rápida para desarrollar y mantener.



ARQUITECTURA DE NHYBERNATE


                                  la aplicación trabaja con objetos persistentes, pero sin
                                  comunicarse directamente con la base de datos. En su
                                  lugar, la comunicación será con elframework Nhibernate,
                                  el cual se compone de una sección de configuración
                                  según nuestro proyecto sea Windows Forms o Web) y un
                                  conjunto de mapeos Objeto-Relacionales. Utilizando
                                  estos elementos, Nhibernate se comunicará con la base
                                  de datos y realizará las acciones requeridas por los
                                  objetos persistentes (inserción, actualización, borrado,
                                  selección).



                                                                         BASE DE DATOS 2012
UNIVERSIDAD NACIONAL DE EL SALVADOR
                                              FACULTAD MULTIDICIPLINARIA DE OCCIDENTE




ARQUITECTURA LIJERA




Entrando un poco más en detalle, una arquitectura “ligera” de NHibernate es cuando la
aplicación proporciona sus propias conexiones ADO.NET

Los objetos persistentes requieren almacenar estados, para esto es necesario utilizar una
sesión (canal de comunicación entre la aplicación y la base de datos).

La sesión de comunicación será creada por una SessionFactory, que es un caché de los
mapeos de una base de datos en particular. La SessionFactory puede ser configurada
utilizando código o configurando los archivos App.config o Web.config




                                                                     BASE DE DATOS 2012
UNIVERSIDAD NACIONAL DE EL SALVADOR
                                              FACULTAD MULTIDICIPLINARIA DE OCCIDENTE



ARQUITECTURA COMPLETA




Ahora, si deseamos utilizar todas las características que provee NHibernate, podemos
utilizar una arquitectura completa como la que se muestra

En esta arquitectura, NHibernate provee lo que es el control de transacciones (utilizando
Transactions creadas por una TransactionFactory) y control de conexiones ADO.NET que
no están expuestas a la aplicación, sin embargo pueden ser extendidas o implementadas
por los desarrolladores

En detalle algunas de las partes de esta arquitectura

SessionFactory

Un caché threadsafe (inmutable) de mapeos compilados para una sola base de datos. Una
fábrica de Session y un cliente de ConnectionProvider, SessionFactory puede mantener un




                                                                     BASE DE DATOS 2012
UNIVERSIDAD NACIONAL DE EL SALVADOR
                                                 FACULTAD MULTIDICIPLINARIA DE OCCIDENTE

caché opcional (de segundo nivel) de datos reusables entre transacciones a nivel de
proceso o de clúster.



Session

Un objeto mono-hebra, de corta vida que representa una conversación entre la aplicación
y el almacenamiento persistente. Envuelve una conexión JDBC y es una fábrica
de Transaction. Sessionmantiene un caché requerido de primer nivel de objetos
persistentes, que se utiliza cuando se navega el gráfico 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,
serán separados y estarán libres para utilizarlos en cualquier capa de aplicación, (por
ejemplo, directamente como objetos de transferencia de datos hacia y desde la
presentación).



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 aplicación y aún no haber sido
persistidas, o pueden haber sido instanciadas por una Session cerrada.



Transaction(Opcional)

Un objeto de corta vida, mono-hebra que la aplicación utiliza para especificar unidades
atómicas de trabajo. Abstrae la aplicación de las transacciones subyacentes JDBC, JTA o
CORBA. En algunos casos, una Session puede extenderse sobre varias Transactiones. Sin
embargo, la demarcación de la transacción, ya sea utilizando la API subyacente
o Transaction, nunca es opcional.



ConnectionProvider (Opcional)


                                                                     BASE DE DATOS 2012
UNIVERSIDAD NACIONAL DE EL SALVADOR
                                               FACULTAD MULTIDICIPLINARIA DE OCCIDENTE

Una fábrica y pool de conexiones JDBC. Abstrae a la aplicación
del Datasource oDriverManager subyacente. No se expone a la aplicación, pero puede ser
extendido/implementado por el desarrollador.



TransactionFactory (Opcional)

Una fábrica de instancias de Transaction. No se expone a la aplicación pero puede ser
extendido/implementado por el desarrollador.



Extension Interfaces

Hibernate ofrece un rango de interfaces de extensión opcionales que puede implementar
para personalizar el comportamiento de su capa de persistencia. Para obtener más
detalles, vea la documentación de la API.



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
relación con la ubicación 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




                                                                      BASE DE DATOS 2012
UNIVERSIDAD NACIONAL DE EL SALVADOR
                                                FACULTAD MULTIDICIPLINARIA DE OCCIDENTE

separadas, Hibernate no establece ninguna garantía sobre la relación entre identidad
persistente e identidad Java.




CONFIGURACION NHYBERNATE

Existen varias formas de configurar la comunicación entre NHibernate y la base de datos,
sin embargo la más recomendable es utilizar un archivo App.config (configuración de
proyecto) ya que permite cambiar la configuración de acceso sin cambiar el código de la
aplicación en sí.

Un archivo de configuración de aplicaciones es un archivo XML que permite configurar
algunas opciones específicas de la aplicación que desarrollamos. La estructura básica del
archivo de configuración App.config es la siguiente.




En la zona de configuración es posible agregar las configuraciones específicas para cada
aplicación utilizada en la solución actual. En este caso es necesario configurar las opciones
de NHibernate para que acceda a la base de datos utilizada. A continuaciónun ejemplo de
la configuración de NHibernate para acceder a una base de datos




                                                                        BASE DE DATOS 2012
UNIVERSIDAD NACIONAL DE EL SALVADOR
                                              FACULTAD MULTIDICIPLINARIA DE OCCIDENTE




Donde se debe reemplazar los valores XXX, YYY y ZZZ según sea la base de datos que
estemos utilizando para almacenar los datos de nuestra aplicación.




La versión 1.2 de Nhibernate soporta las bases de datos más utilizadas hoy en día

Microsoft SQL Server 2000
•XXX: MsSql2000Dialect
•YYY: SqlClientDriver
•ZZZ: “Server=dbServer;Initial catalog=db;Integrated Security=SSPI”

Microsoft SQL Server 2005
• XXX: MsSql2005Dialect
•YYY: SqlClientDriver
• ZZZ: Server=Server;Database=EjemplosNHibernate;User Id=usuario;Password=pwd

MySQL
•XXX:MySQLDialect o MySQL5Dialect (MySQL 5)
•YYY: MySqlDataDriver
•ZZZ:“Server=server;Database=database;User ID=user; Password=password”

Oracle
•XXX: OracleDialect / Oracle9Dialect
•YYY: OracleClientDriver
•ZZZ:“Data Source=fuente;User Id=user;Password=pwd;”

PostgreSQL
•XXX: PostgreSQLDialect
•YYY: NpgslDriver
•ZZZ: “Server=Server;Database=db;User id=user;      Password=pwd;Encoding=UNICODE”


                                                                      BASE DE DATOS 2012
UNIVERSIDAD NACIONAL DE EL SALVADOR
                                             FACULTAD MULTIDICIPLINARIA DE OCCIDENTE



Teniendo la configuración del archivo App.config definida, sólo nos queda obtener el
driver necesario para la conexión y agregar una referencia a él en nuestro proyecto.

 •SQL Server 2000-2005:
System.Data.SqlClient en System.Data.dll (VS2005).

•MySQL:
http://dev.mysql.com/downloads/connector/net/1.0.html

•Oracle:
System.Data.OracleClient.dll (en VS2005).

•PostgreSQL:
http://pgfoundry.org/projects/npgsql/Introducción a NHibernate 8




                                                                   BASE DE DATOS 2012

Más contenido relacionado

La actualidad más candente

Los sistemas gestores de bases de datos actuales
Los sistemas gestores de bases de datos actualesLos sistemas gestores de bases de datos actuales
Los sistemas gestores de bases de datos actualesFrancisco Gómez Pino
 
Sistemas de gestión de base de datos
Sistemas de gestión de base de datosSistemas de gestión de base de datos
Sistemas de gestión de base de datosjudithmore16
 
Principales bases de datos existentes
Principales bases de datos existentesPrincipales bases de datos existentes
Principales bases de datos existentesJoseBustos32
 
Bases De Datos Orientadas A Objetos2
Bases De Datos Orientadas A Objetos2Bases De Datos Orientadas A Objetos2
Bases De Datos Orientadas A Objetos2Cristina Huerta
 
Bases de datos orientado a objetos
Bases de datos orientado a objetosBases de datos orientado a objetos
Bases de datos orientado a objetosjorge220395
 
Modo conexion manuel
Modo conexion manuelModo conexion manuel
Modo conexion manuelfanyto
 
SIstemas Manejadores De Base De Datos
SIstemas Manejadores De Base De DatosSIstemas Manejadores De Base De Datos
SIstemas Manejadores De Base De Datosrafael fonseca
 
Acceso a datos con ado.net en visual basic
Acceso a datos con ado.net en visual basicAcceso a datos con ado.net en visual basic
Acceso a datos con ado.net en visual basicAlfredo Joya
 
Primer Taller Bases De Datos
Primer Taller Bases De DatosPrimer Taller Bases De Datos
Primer Taller Bases De Datosjose olmedo soto
 
Manejador De Bases De Datos Eq 3
Manejador De Bases De Datos Eq 3Manejador De Bases De Datos Eq 3
Manejador De Bases De Datos Eq 3UV
 
Componentes de un sistema de base de datos
Componentes de un sistema de base de datosComponentes de un sistema de base de datos
Componentes de un sistema de base de datosIsabel
 
Administración y programación en sql server
Administración y programación en sql serverAdministración y programación en sql server
Administración y programación en sql serverIsabel_Samir
 
Sistemas gestores de bases de datos
Sistemas gestores de bases de datosSistemas gestores de bases de datos
Sistemas gestores de bases de datosMalteadas
 
Grupo 2 tarea sgbd
Grupo 2   tarea sgbdGrupo 2   tarea sgbd
Grupo 2 tarea sgbdjose775870
 

La actualidad más candente (20)

Los sistemas gestores de bases de datos actuales
Los sistemas gestores de bases de datos actualesLos sistemas gestores de bases de datos actuales
Los sistemas gestores de bases de datos actuales
 
Base de Datos Orientada a Objetos
Base de Datos Orientada a ObjetosBase de Datos Orientada a Objetos
Base de Datos Orientada a Objetos
 
Sistemas de gestión de base de datos
Sistemas de gestión de base de datosSistemas de gestión de base de datos
Sistemas de gestión de base de datos
 
Principales bases de datos existentes
Principales bases de datos existentesPrincipales bases de datos existentes
Principales bases de datos existentes
 
Bases De Datos Orientadas A Objetos2
Bases De Datos Orientadas A Objetos2Bases De Datos Orientadas A Objetos2
Bases De Datos Orientadas A Objetos2
 
Base de datos orientada a objetos
Base de datos orientada a objetosBase de datos orientada a objetos
Base de datos orientada a objetos
 
Ado net certificacion 2013
Ado net certificacion 2013Ado net certificacion 2013
Ado net certificacion 2013
 
Bases de datos orientado a objetos
Bases de datos orientado a objetosBases de datos orientado a objetos
Bases de datos orientado a objetos
 
Base de datos
Base de datosBase de datos
Base de datos
 
Modo conexion manuel
Modo conexion manuelModo conexion manuel
Modo conexion manuel
 
SIstemas Manejadores De Base De Datos
SIstemas Manejadores De Base De DatosSIstemas Manejadores De Base De Datos
SIstemas Manejadores De Base De Datos
 
Acceso a datos con ado.net en visual basic
Acceso a datos con ado.net en visual basicAcceso a datos con ado.net en visual basic
Acceso a datos con ado.net en visual basic
 
Primer Taller Bases De Datos
Primer Taller Bases De DatosPrimer Taller Bases De Datos
Primer Taller Bases De Datos
 
Manejador De Bases De Datos Eq 3
Manejador De Bases De Datos Eq 3Manejador De Bases De Datos Eq 3
Manejador De Bases De Datos Eq 3
 
Componentes de un sistema de base de datos
Componentes de un sistema de base de datosComponentes de un sistema de base de datos
Componentes de un sistema de base de datos
 
Administración y programación en sql server
Administración y programación en sql serverAdministración y programación en sql server
Administración y programación en sql server
 
Act 04 rivera_alfredo_bd
Act 04 rivera_alfredo_bdAct 04 rivera_alfredo_bd
Act 04 rivera_alfredo_bd
 
Sistemas gestores de bases de datos
Sistemas gestores de bases de datosSistemas gestores de bases de datos
Sistemas gestores de bases de datos
 
Grupo 2 tarea sgbd
Grupo 2   tarea sgbdGrupo 2   tarea sgbd
Grupo 2 tarea sgbd
 
Unidad I
Unidad I Unidad I
Unidad I
 

Similar a Motor de persistencia nhibernate

Unidad 4: Administración de datos en dispositivos móviles
Unidad 4: Administración de datos en dispositivos móvilesUnidad 4: Administración de datos en dispositivos móviles
Unidad 4: Administración de datos en dispositivos móvilesJuan Anaya
 
Introdución a aplicaciones web en java
Introdución a aplicaciones web en java Introdución a aplicaciones web en java
Introdución a aplicaciones web en java Rodrigo Zottola Pareja
 
Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)josecuartas
 
Principales bases de datos existentes
Principales bases de datos existentesPrincipales bases de datos existentes
Principales bases de datos existentesJazminRamos14
 
Introduccion Aplicaciones Web en java j2ee
Introduccion Aplicaciones Web en java j2ee Introduccion Aplicaciones Web en java j2ee
Introduccion Aplicaciones Web en java j2ee Rodrigo Zottola Pareja
 
FMK Capa de Presentacion
FMK Capa de PresentacionFMK Capa de Presentacion
FMK Capa de Presentacionkaolong
 
Persistencia de datos_hibernate_arquitecturas_de_software
Persistencia de datos_hibernate_arquitecturas_de_softwarePersistencia de datos_hibernate_arquitecturas_de_software
Persistencia de datos_hibernate_arquitecturas_de_softwareJose Luis Bugarin Peche
 
Herramientas BigData.pptx
Herramientas BigData.pptxHerramientas BigData.pptx
Herramientas BigData.pptxMauricio Bedoya
 
Manual hibernate
Manual hibernateManual hibernate
Manual hibernateshimbosan17
 
Accediendo a una base de datos de MySQL con Entity Framework Core desde ASP ....
Accediendo a una base de datos de MySQL con Entity Framework Core desde ASP ....Accediendo a una base de datos de MySQL con Entity Framework Core desde ASP ....
Accediendo a una base de datos de MySQL con Entity Framework Core desde ASP ....Luis Beltran
 

Similar a Motor de persistencia nhibernate (20)

Unidad 4: Administración de datos en dispositivos móviles
Unidad 4: Administración de datos en dispositivos móvilesUnidad 4: Administración de datos en dispositivos móviles
Unidad 4: Administración de datos en dispositivos móviles
 
Sesion03 apuntes
Sesion03 apuntesSesion03 apuntes
Sesion03 apuntes
 
Introdución a aplicaciones web en java
Introdución a aplicaciones web en java Introdución a aplicaciones web en java
Introdución a aplicaciones web en java
 
Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)
 
Capitulo_3_1.pptx
Capitulo_3_1.pptxCapitulo_3_1.pptx
Capitulo_3_1.pptx
 
Bases de datos
Bases de datosBases de datos
Bases de datos
 
Java persitence api
Java persitence apiJava persitence api
Java persitence api
 
Principales bases de datos existentes
Principales bases de datos existentesPrincipales bases de datos existentes
Principales bases de datos existentes
 
Ado.net
Ado.netAdo.net
Ado.net
 
Nhibernate
NhibernateNhibernate
Nhibernate
 
Introduccion Aplicaciones Web en java j2ee
Introduccion Aplicaciones Web en java j2ee Introduccion Aplicaciones Web en java j2ee
Introduccion Aplicaciones Web en java j2ee
 
FMK Capa de Presentacion
FMK Capa de PresentacionFMK Capa de Presentacion
FMK Capa de Presentacion
 
Persistencia de datos_hibernate_arquitecturas_de_software
Persistencia de datos_hibernate_arquitecturas_de_softwarePersistencia de datos_hibernate_arquitecturas_de_software
Persistencia de datos_hibernate_arquitecturas_de_software
 
Bases de datos
Bases de datosBases de datos
Bases de datos
 
Herramientas BigData.pptx
Herramientas BigData.pptxHerramientas BigData.pptx
Herramientas BigData.pptx
 
POO
POOPOO
POO
 
Manual hibernate
Manual hibernateManual hibernate
Manual hibernate
 
Accediendo a una base de datos de MySQL con Entity Framework Core desde ASP ....
Accediendo a una base de datos de MySQL con Entity Framework Core desde ASP ....Accediendo a una base de datos de MySQL con Entity Framework Core desde ASP ....
Accediendo a una base de datos de MySQL con Entity Framework Core desde ASP ....
 
MEAN Stack
MEAN StackMEAN Stack
MEAN Stack
 
Act. 4 screencast y base de datos norma
Act. 4 screencast y base de datos normaAct. 4 screencast y base de datos norma
Act. 4 screencast y base de datos norma
 

Motor de persistencia nhibernate

  • 1. UNIVERSIDAD NACIONAL DE EL SALVADOR FACULTAD MULTIDICIPLINARIA DE OCCIDENTE BASE DE DATOS 2012
  • 2. UNIVERSIDAD NACIONAL DE EL SALVADOR FACULTAD MULTIDICIPLINARIA DE OCCIDENTE NHYBERNATE Nhibernate, Motor de persistencia Puesto a que este mundo es muy cambiante debemos estar al tanto de las diferentes tipos de tecnologías que vienen saliendo al campo informático. Herramientas que van a facilitar la vida de cualquier programados, analista de base de datos, administrador de red, en fin en este campo tan variado y complicado que es la informática. Con este trabajo daremos a conocer una de las tantas tecnologías nuevas en las que el campo de programación va avanzando y mejorando para lograr hacer la vida de dichos más fácil. NHibernate es la conversión de Hibernate de lenguaje Java a C# para su integración en la plataforma .NET. Al igual que muchas otras herramientas libres para esta plataforma, NHibernate también funciona en Mono. Al usar NHibernate para el acceso a datos el desarrollador se asegura de que su aplicación es agnóstica en cuanto al motor de base de datos a utilizar en producción, pues NHibernate soporta los más habituales en el mercado: MySQL, PostgreSQL, Oracle, MS SQL Server, etc. Sólo se necesita cambiar una línea en el fichero de configuración para que podamos utilizar una base de datos distinta. Qué es un motor de persistencia? Los motores de persistencia, que en el mundo de la programación no es más que un componente de software (una capa de programación), también conocido como “capa de datos”, “capa de persistencia” o “correspondencia O/R (“OR mapping”)”, son los que permiten establecer una capa intermedia entre el sistema orientado a objetos y la base de datos relacionales donde se almacenarán toda la información del mismo. Esta solución brinda las mejores ventajas de ambos modelos:  Por una parte, se puede programar con orientación a objetos, aprovechando las ventajas de flexibilidad, mantenimiento y reusabilidad.  Por otra parte, el poder usar una base de datos relacional, aprovechándose de su madurez, la estandarización y las herramientas relacionales que hay para ella. En la actualidad existen distintos tipos de motores de persistencia. Entre los de código abierto se pueden destacar: Hibernate, Castor, Torque, OJB y Cayenne. Entre los comerciales, se pueden nombrar: TopLink, Cocobase y FastObjects. En los últimos años se ha creado una especificación llamada JDO, para estandarizar la forma de programar en Java con esos motores de persistencia. Ejemplos de motores de persistencia que cumplen BASE DE DATOS 2012
  • 3. UNIVERSIDAD NACIONAL DE EL SALVADOR FACULTAD MULTIDICIPLINARIA DE OCCIDENTE el estándar JDO son Kodo, JDO Genie, LiDo, Exadel JDO, IntelliBO, JRelay JDO (todos ellos comerciales), Speedo JDO, TJDO y XORM (de código abierto). NHibernate En .NET los datos se representan en objetos. Sin embargo, las bases de datos habituales (como Oracle, SQL Server) guardan sus datos en forma relacional. Evidentemente existe una brecha entre estos dos mundos ("objetos-relacional") que, de alguna manera, debe completarse. Los frameworks que se encargan de adaptar el mundo de objetos al relacionan son conocidos como ORM (Object-RelationalMapping). Existen varios ORM en el mercado. NHibernate se encarga, justamente, de relacionar clases con tablas. A forma muy simple, una tabla se mapea contra una clase, y cada columna contra un atributo de dicha clase. De esta forma, NHibernate se encargará de ocultar la complejidad del acceso a datos, exponiendo solamente objetos. Idealmente, en una aplicación con NHibernate, no es necesario generar querys SQL para interactuar con los datos (de hecho, la aplicación no tiene contacto directo con la base de datos). Los mapeos Como dijimos, las tablas a usar se mapean contra clases. Es decir, tendremos que establecer cuál es la relación entre cada tabla y cada clase, y cuál es la relación entre cada columna con cada atributo de clase. Con NHibernate, estos mapeos pueden escribirse en archivos XML o utilizando anotaciones. En este curso vamos a usar anotaciones para realizar los mapeos, ya que en términos generales es una implementación más sencilla y rápida para desarrollar y mantener. ARQUITECTURA DE NHYBERNATE la aplicación trabaja con objetos persistentes, pero sin comunicarse directamente con la base de datos. En su lugar, la comunicación será con elframework Nhibernate, el cual se compone de una sección de configuración según nuestro proyecto sea Windows Forms o Web) y un conjunto de mapeos Objeto-Relacionales. Utilizando estos elementos, Nhibernate se comunicará con la base de datos y realizará las acciones requeridas por los objetos persistentes (inserción, actualización, borrado, selección). BASE DE DATOS 2012
  • 4. UNIVERSIDAD NACIONAL DE EL SALVADOR FACULTAD MULTIDICIPLINARIA DE OCCIDENTE ARQUITECTURA LIJERA Entrando un poco más en detalle, una arquitectura “ligera” de NHibernate es cuando la aplicación proporciona sus propias conexiones ADO.NET Los objetos persistentes requieren almacenar estados, para esto es necesario utilizar una sesión (canal de comunicación entre la aplicación y la base de datos). La sesión de comunicación será creada por una SessionFactory, que es un caché de los mapeos de una base de datos en particular. La SessionFactory puede ser configurada utilizando código o configurando los archivos App.config o Web.config BASE DE DATOS 2012
  • 5. UNIVERSIDAD NACIONAL DE EL SALVADOR FACULTAD MULTIDICIPLINARIA DE OCCIDENTE ARQUITECTURA COMPLETA Ahora, si deseamos utilizar todas las características que provee NHibernate, podemos utilizar una arquitectura completa como la que se muestra En esta arquitectura, NHibernate provee lo que es el control de transacciones (utilizando Transactions creadas por una TransactionFactory) y control de conexiones ADO.NET que no están expuestas a la aplicación, sin embargo pueden ser extendidas o implementadas por los desarrolladores En detalle algunas de las partes de esta arquitectura SessionFactory Un caché threadsafe (inmutable) de mapeos compilados para una sola base de datos. Una fábrica de Session y un cliente de ConnectionProvider, SessionFactory puede mantener un BASE DE DATOS 2012
  • 6. UNIVERSIDAD NACIONAL DE EL SALVADOR FACULTAD MULTIDICIPLINARIA DE OCCIDENTE caché opcional (de segundo nivel) de datos reusables entre transacciones a nivel de proceso o de clúster. Session Un objeto mono-hebra, de corta vida que representa una conversación entre la aplicación y el almacenamiento persistente. Envuelve una conexión JDBC y es una fábrica de Transaction. Sessionmantiene un caché requerido de primer nivel de objetos persistentes, que se utiliza cuando se navega el gráfico 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, serán separados y estarán libres para utilizarlos en cualquier capa de aplicación, (por ejemplo, directamente como objetos de transferencia de datos hacia y desde la presentación). 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 aplicación y aún no haber sido persistidas, o pueden haber sido instanciadas por una Session cerrada. Transaction(Opcional) Un objeto de corta vida, mono-hebra que la aplicación utiliza para especificar unidades atómicas de trabajo. Abstrae la aplicación de las transacciones subyacentes JDBC, JTA o CORBA. En algunos casos, una Session puede extenderse sobre varias Transactiones. Sin embargo, la demarcación de la transacción, ya sea utilizando la API subyacente o Transaction, nunca es opcional. ConnectionProvider (Opcional) BASE DE DATOS 2012
  • 7. UNIVERSIDAD NACIONAL DE EL SALVADOR FACULTAD MULTIDICIPLINARIA DE OCCIDENTE Una fábrica y pool de conexiones JDBC. Abstrae a la aplicación del Datasource oDriverManager subyacente. No se expone a la aplicación, pero puede ser extendido/implementado por el desarrollador. TransactionFactory (Opcional) Una fábrica de instancias de Transaction. No se expone a la aplicación pero puede ser extendido/implementado por el desarrollador. Extension Interfaces Hibernate ofrece un rango de interfaces de extensión opcionales que puede implementar para personalizar el comportamiento de su capa de persistencia. Para obtener más detalles, vea la documentación de la API. 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 relación con la ubicación 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 BASE DE DATOS 2012
  • 8. UNIVERSIDAD NACIONAL DE EL SALVADOR FACULTAD MULTIDICIPLINARIA DE OCCIDENTE separadas, Hibernate no establece ninguna garantía sobre la relación entre identidad persistente e identidad Java. CONFIGURACION NHYBERNATE Existen varias formas de configurar la comunicación entre NHibernate y la base de datos, sin embargo la más recomendable es utilizar un archivo App.config (configuración de proyecto) ya que permite cambiar la configuración de acceso sin cambiar el código de la aplicación en sí. Un archivo de configuración de aplicaciones es un archivo XML que permite configurar algunas opciones específicas de la aplicación que desarrollamos. La estructura básica del archivo de configuración App.config es la siguiente. En la zona de configuración es posible agregar las configuraciones específicas para cada aplicación utilizada en la solución actual. En este caso es necesario configurar las opciones de NHibernate para que acceda a la base de datos utilizada. A continuaciónun ejemplo de la configuración de NHibernate para acceder a una base de datos BASE DE DATOS 2012
  • 9. UNIVERSIDAD NACIONAL DE EL SALVADOR FACULTAD MULTIDICIPLINARIA DE OCCIDENTE Donde se debe reemplazar los valores XXX, YYY y ZZZ según sea la base de datos que estemos utilizando para almacenar los datos de nuestra aplicación. La versión 1.2 de Nhibernate soporta las bases de datos más utilizadas hoy en día Microsoft SQL Server 2000 •XXX: MsSql2000Dialect •YYY: SqlClientDriver •ZZZ: “Server=dbServer;Initial catalog=db;Integrated Security=SSPI” Microsoft SQL Server 2005 • XXX: MsSql2005Dialect •YYY: SqlClientDriver • ZZZ: Server=Server;Database=EjemplosNHibernate;User Id=usuario;Password=pwd MySQL •XXX:MySQLDialect o MySQL5Dialect (MySQL 5) •YYY: MySqlDataDriver •ZZZ:“Server=server;Database=database;User ID=user; Password=password” Oracle •XXX: OracleDialect / Oracle9Dialect •YYY: OracleClientDriver •ZZZ:“Data Source=fuente;User Id=user;Password=pwd;” PostgreSQL •XXX: PostgreSQLDialect •YYY: NpgslDriver •ZZZ: “Server=Server;Database=db;User id=user; Password=pwd;Encoding=UNICODE” BASE DE DATOS 2012
  • 10. UNIVERSIDAD NACIONAL DE EL SALVADOR FACULTAD MULTIDICIPLINARIA DE OCCIDENTE Teniendo la configuración del archivo App.config definida, sólo nos queda obtener el driver necesario para la conexión y agregar una referencia a él en nuestro proyecto. •SQL Server 2000-2005: System.Data.SqlClient en System.Data.dll (VS2005). •MySQL: http://dev.mysql.com/downloads/connector/net/1.0.html •Oracle: System.Data.OracleClient.dll (en VS2005). •PostgreSQL: http://pgfoundry.org/projects/npgsql/Introducción a NHibernate 8 BASE DE DATOS 2012