You are on page 1of 26

SOLUCIONES WEB Y APLICACIONES DISTRIBUIDAS

DOCENTE:
ING. PÉREZ QUIROZ, Hugo Alejandro.

INTEGRANTES:

 VELEZMORO TIRADO, José.

CAJAMARCA NOVIEMBRE DEL 2014.

SOLWEB 1

[UNIVERSIDAD PRIVADA DEL NORTE] del 2014

JAVASERVER FACES

1. DEFINICION:

JavaServer Faces (JSF) es una tecnología y framework para
aplicaciones Java basadas en web que simplifica el desarrollo de interfaces de
usuario en aplicaciones JavaEE. JSF usa JavaServerPages (JSP) como la
tecnología que permite hacer el despliegue de las páginas, pero también se
puede acomodar a otras tecnologías como XUL.

JSF incluye:

 Un conjunto de APIs para representar componentes de una interfaz de
usuario y administrar su estado, manejar eventos, validar entrada, definir
un esquema de navegación de las páginas y dar soporte para
internacionalización y accesibilidad.

 Un conjunto por defecto de componentes para la interfaz de usuario.

 Dos bibliotecas de etiquetas personalizadas para JavaServerPages que
permiten expresar una interfaz JavaServer Faces dentro de una página JSP.

 Un modelo de eventos en el lado del servidor.

 Administración de estados.

 Beans administrados.

2. PORQUÉ UTILIZAR JSF EN NUESTROS PROYECTOS

JSF nos permite desarrollar rápidamente aplicaciones de negocio dinámicas
en las que toda la lógica de negocio se implementa en java, o es llamada
desde java, creando páginas para las vistas muy sencillas (salvo que
introduzcamos mucha maquetación HTML o Javascript)

JSF nos ofrece una serie de ventajas:

 Permite generar contenido dinámico para web
 Permite reutilizar condigo

SOLWEB

Estos componentes se obtendrán de un conjunto básico de clases base que se pueden utilizar para definir componentes nuevos. controlando el estado de un componente durante el ciclo de vida de su página.  Definir APIs para la validación de entrada.  Proporcionar un conjunto de componentes para la interfaz de usuario. seguras y portátiles basadas en la tecnología Java. SOLWEB .  Automatizar la generación de salidas apropiadas para el objetivo del cliente. teniendo en cuenta todos los datos de configuración disponibles del cliente. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014  Separa lógica de vista (MVC)  Soporta Enterprise EJB (desarrollo rápido de aplicaciones distribuidas. JSF nos resuelve de manera muy sencilla y automática muchas tareas:  Mostrar datos al usuario en cajas de texto y tablas.  Proporcionar un modelo de JavaBeans para enviar eventos desde los controles de la interfaz de usuario del lado del cliente a la aplicación del servidor. incluyendo soporte para la validación en el lado del cliente. clases java que recogen la información introducida y que disponen de métodos que responden a las acciones del usuario. C ÓMOFUNCIONA JSF: La principal función del controlador JSF es asociar a las pantallas.) 3.  Recoger los datos introducidos por el usuario en los campos del formulario. 4. Estas clases tratarán los aspectos del ciclo de vida de la interfaz de usuario. OBJETIVOS:  Definir un conjunto simple de clases base de Java para componentes de la interfaz de usuario. tradicionales. estado de los componentes y eventos de entrada. como versión del navegador. incluyendo los elementos estándares de HTML para representar un formulario.  Especificar un modelo para la internacionalización y localización de la interfaz de usuario.

ya que son beans gestionados por el controlador JSF.  Ficheros de configuración. combos y otros elementos a medida que el usuario va interactuando con la pantalla  Controlando los eventos que ocurren en los controles (pulsaciones de teclas. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014  Controlar el estado de los controles del formulario según el estado de la aplicación. ocultando o añadiendo y eliminando controles y demás elementos  Realizando validaciones y conversiones de los datos introducidos por el usuario  Rellenando campos. este se encarga de su construcción y destrucción automáticas cuando es necesario. botones y movimientos del ratón). javascript y otros elementos. INTRODUCCION: Es un framework de código abierto de desarrollo de aplicaciones para la plataforma Java.  Resto de recursos de la aplicación web: recursos estátios. LOS BACKBEANS  A las clases java que se asocian a los formularios JSF se les denomina backendbeans ya que son los beans (clases java) que están detras del formulario. listas. activando. quien lo lanzó primero con la publicación de su libro ExpertOne-on-One Java EE Design and SOLWEB . Estas páginas generarán las vistas de la aplicación  Beans java que se conectan con los formularios JSF  Clases java para la lógica de negocio y utilidades. SPRING 1. Las aplicaciones JSF están formadas por los siguientes elementos principales:  Páginas JSP que incluyen los formularios JSF. componentes a medidad y otros elementos del framework. La primera versión fue escrita por RodJonhson. 5. Estos beans se referencian en el fichero de configuración de JSF en el apartado de managedbeans.

Ya no es necesario tener singletons ni  ficheros de configuración. Estas  definiciones de beans se realizan en lo que se llama el contexto de aplicación. Se basa en una configuración a base de javabeans bastante simple. Se incluyen  estrategias genéricas para JTA y un único JDBC DataSource. Spring . una aproximación consistente y elegante.NET. Es interesante el uso de programación orientada a aspectos (IoC).  ¾Una capa genérica de abstracción para la gestión de transacciones. JDBC.NET.  Una capa de abstracción JDBC que ofrece una significativa jerarquía de  excepciones (evitando la necesidad de obtener de SQLException los códigos SOLWEB . aplicando los  principios de Inversión de Control (IoC). octubre 2002). Esto hace que la configuración de  aplicaciones sea rápida y sencilla. En contraste con  el JTA simple o EJB CMT. y haciendo  sencilla la demarcación de transacciones sin tratarlas a bajo nivel. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 Development(WroxPress. Spring es un framework de aplicaciones Java/J2EE desarrollado usando licencia de OpenSource. También hay una versión para la plataforma . Es potente en cuanto a la gestión del ciclo de vida de los componentes y fácilmente ampliable. Tiene plantillas que permiten un más fácil uso de Hibernate.  permitiendo gestores de transacción añadibles (pluggables). iBatis. ¿Que proporciona? Spring proporciona:  Una potente gestión de configuración basada en JavaBeans. el soporte de transacciones de Spring no está atado  a entornos J2EE.

el manejo de transacciones. Se invierte la responsabilidad en cuanto a la manera en que un objeto obtiene la referencia a otro objeto. programaremos orientado a interfaces e inyectaremos las implementaciones a través del contenedor. En inglés denominan a estas funcionalidades “cross-cuttingconcerns” algo que se traduciría como “preocupaciones transversales”. los objetos no crean o buscan sus dependencias (objetos con los cuales colabora) sino que éstas son dadas al objeto. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014  que cada gestor de base de datos asigna a los errores).. INYECCIÓN DE DEPENDENCIAS El objetivo es lograr un bajo acoplamiento entre los objetos de nuestra aplicación. Así la dependencia puede ser intercambiada por distintas implementaciones a través del contenedor. Con este patrón de diseño. son funcionalidades que atraviesan nuestro programa en varias abstracciones de éste. 2. Especial soporte a  Hibernate añadiendo convenientes características de IoC. Por ejemplo los loggers.  Integración con Hibernate. etc. Por lo tanto corremos el riesgo de caer en la repetición de código y el acoplamiento entre nuestra lógica de negocios y la implementación de los cross-cuttingconcerns. En resumen. JDO e iBatis SQL Maps en términos de soporte a  implementaciones DAO y estrategias con transacciones. SOLWEB . simplifica el manejo  de errores. y solucionando  muchos de los comunes problemas de integración de Hibernate. 3. El contenedor (la entidad que coordina cada objeto en el sistema) es el encargado de realizar este trabajo al momento de instanciar el objeto. PROGRAMACIÓN ORIENTADA A ASPECTOS Se trata de un paradigma de programación que intenta separar las funcionalidades secundarias de la lógica de negocios. los objetos conocen sus dependencias por su interfaz. y reduce considerablemente la cantidad de código necesario. Todo ello  cumpliendo con las transacciones genéricas de Spring y la jerarquía de  excepciones DAO. la seguridad. De esta manera.

Debido a la naturaleza del IoC. 4. Inversion of Control" (IoC) o patrón Hollywood ("No nos llames. Estos puntos son suficientes y necesarios para poder hablar de una definición básica de IoC. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 La AOP (Aspect-OrientedProgramming) busca modularizar estos servicios y aplicarlos de manera declarativa a los componentes que deban afectar. nosotros le llamaremos") consiste en:  Un Contenedor que maneja objetos por ti. Por decirlo de alguna manera. IoC es lo que nosotros conocemos como el Principio de Inversión de Dependencia. el contenedor hace los “new” de las clases java para que no los realices tú. Spring proporciona un contenedor que maneja todo lo que se hace con los objetos del IoC. el contenedor SOLWEB .  El contenedor generalmente controla la creación de estos objetos. MODULOS DE SPRING: 4.  El contenedor resuelve dependencias entre los objetos que contiene.1 ¿Qué es Ioc? Spring se basa en IoC.

una implementación del conocido patrón de diseño aplicando los principios de Spring.5). En su definición. Todos estos cuentan actualmente con una implementación SOLWEB . etc. ORM – Provee la integración para las distintas APIs de mapeo objeto- relacional incluyendo JPA. aunque su uso no se limita a los componentes software EJB. Y. por ejemplo. También puede utilizarse directamente en aplicaciones web y aplicaciones clientes. eventos de ciclo de vida. permitiéndonos desarrollar interceptores de método y puntos de corte para desacoplar el código de las funcionalidades transversales. Web – Módulo que aporta clases especiales orientadas al desarrollo web e integración con tecnologías como Struts y JSF. Toplink y JDO. INTRODUCCIÓN Java Persistence API (JPA) proporciona un modelo de persistencia basado en POJO's para mapear bases de datos relacionales en Java. incluso fuera de la plataforma Java EE.0 como parte de JSR 220. Hibernate e iBatis. AOP – provee la implementación de AOP. Tiene una capa de expeciones sobre los mensajes de error provistos por cada servidor específico de base de datos. El diagrama muestra los módulos con los que cuenta Spring (hasta la versión 2. JPA (J AVA P ERSISTENCE API) 1. en aplicaciones Java SE. JMS. Además cuenta con manejo de transacciones a través de AOP. el contenedor resuelve las dependencias entre los servicios que él controla. DAO . EJB.Provee una capa de abstracción sobre JDBC. y de las versiones anteriores de EJB. El contenedor ApplicationContext se basa en BeanFactory y extiende su funcionalidad con soporte para i18n. El Java Persistence API fue desarrollado por el grupo de expertos de EJB 3. finalmente. se han combinado ideas y conceptos de los principales frameworks de persistencia como Hibernate. JEE – Provee integración con aplicaciones Java Enterprise Edition así como servicios JMX. abstrae el código de acceso a datos de una manera simple y limpia. En su núcleo (Core) se encuentra el BeanFactory – el contenedor fundamental de Spring y quien se encarga de la inyección de dependencias. Cuenta con el paquete Spring MVC. validación y mejor integración con AOP. JDO. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 más o menos ha definido el ciclo de vida de los objetos.

Estos campos o propiedades usan anotaciones para el mapeo de estos objetos en el modelo de base de datos. El estado de persistencia de una entidad se representa a través de campos persistentes o propiedades persistentes. CARACTERÍSTICAS Una entidad es un objeto de dominio de persistencia. es decir.util.sql.util. incluyendo: o Wrappers de tipos primitivos en Java o java. por lo que no se requieren ficheros descriptores XML.BigInteger o java. la relación entre entidades Java y tablas de la base de datos. una entidad representa una tabla en el modelo de datos relacional y cada instancia de esta entidad corresponde a un registro en esa tabla. El estado persistente de una entidad puede ser accesible a través de variables de instancia a la entidad o bien a través de las propiedades de estilo de JavaBean.math.Calendar o java. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 JPA.Date o java.TimeStamp o User-definedserializabletypes o byte o Byte o char o Character o Tipos enumerados o Otras entidades y/o colecciones de entidades SOLWEB . Normalmente.sql. se realiza mediante anotaciones en las propias clases de entidad.sql. Java Persistence API consta de tres áreas:  El Java Persistence API  El lenguaje de query  El mapeo de los metadatos objeto/relacional 2.BigDecimal o java.math.Date o java. El mapeo objeto/relacional. También pueden definirse transacciones como anotaciones JPA.String  Otro tipo de objeto serializable.Time o java. Lo campos o propiedades pueden tener asociados los siguientes tipos Java:  Tipos primitivos de Java  java.lang.

List • java. si la entidad Customer tiene un SOLWEB . si se aplican a los métodos getters de la entidad.persistence.util. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 Las entidades podrán utilizar campos persistentes o propiedades. Aquellos campos que no tienen anotaciones del tipo javax. Las colecciones posibles son: • java. Si el atributo es booleano podrá utilizarse isProperty en lugar de getProperty. Hay que tener en cuenta que no es posible aplicar anotaciones tanto a campos como a propiedades en una misma entidad. Las anotaciones de mapeo objeto/relación deben aplicarse a los atributos de la instancia.Collection • java. PROPIEDADES PERSISTENTES Si la entidad utiliza propiedades persistentes. se utilizarán propiedades persistentes. la entidad debe seguir el método de los convenios de componentes JavaBeans. la entidad utiliza campos persistentes. En cambio.util. Tipo getProperty () voidsetProperty (Tipo tipo) Tanto los campos persistentes como las propiedades deben utilizar las interfaces de Java independientemente de que la entidad utilice campos o propiedades. Las propiedades de JavaBean usan métodos getters y setters en cuyo nombre va incluido el atributo de la clase al cual hacen referencia. Por ejemplo. el tipo en el método anterior debe ser uno de estos tipos de collection.util.Set • java.Map Si la entidad utiliza campos persistentes. si una entidad Customer. los accesos se realizan en tiempo de ejecución. utiliza las propiedades de persistencia.Transient o no han sido marcados como Java transitorio serán persistentes para el almacenamiento de datos. supongamos que tiene un atributo privado denominado firsName. 4. 3. Las variables genéricas de estos tipos también pueden ser utilizadas. Si las anotaciones de mapeo se aplican a las instancias de las entidades. Por ejemplo.util. Los métodos para la firma de un valor único de propiedades son los siguientes. la clase definirá los métodos getFirstName y setFirstName para recuperar y establecer el valor de la variable firstName. CAMPOS PERSISTENTES Si la entidad utiliza campos persistentes.

por ejemplo. Por ejemplo. Las relaciones uno a uno utilizan anotaciones javax.persistence. Esta multiplicidad es lo contrario a la relación uno a muchos. La orden (Order) tendrá una relación uno a muchos con las partidas (LineItem). El mapeo de las anotaciones no puede aplicarse a los campos o propiedades anotadas como @Transient o marcadas como transient. y muchos a muchos.  Muchos a muchos: En este caso varias instancias de una entidad pueden relacionarse con múltiples instancias de otras entidades. muchos a uno. Las relaciones uno a muchos utilizan anotaciones javax. En la aplicación de la orden.ManyToOne en los campos o propiedades persistentes. puede tener varias partidas (LineItem). desde la perspectiva de la orden de venta (LineItem) la relación con la Orden (Order) es de muchos a uno.  Muchos a uno: Múltiples instancias de una entidad pueden estar relacionadas con una sola instancia de otra entidad. cada curso de una SOLWEB . StorageBin y Widget. Las relaciones muchos a uno utilizan anotaciones javax. RELACIONES MÚLTIPLES DE LA ENTIDAD Hay cuatro tipos de relaciones: uno a uno. uno a muchos. tendrá que tener los siguientes métodos: Set<PhoneNumber>getPhoneNumbers() {} Void setPhoneNumbers(Set<PhoneNumber>) {} Las anotaciones del mapeo objeto/relacional deben aplicarse a los métodos getter.persistence.OneToMany en los campos o propiedades persistentes.persistence. 5. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 atributo que contiene un conjunto de números de tlfno. En el ejemplo anterior.  Uno a uno: Cada entidad se relaciona con una sola instancia de otra entidad. al modelo físico de almacén en el que cada almacén contiene un único artilugio. deberían tener una relación uno a uno. Una orden de venta (Order). Por ejemplo. puede estar relacionada con varias instancias de otras entidades.OneToOne.  Uno a muchos: Una entidad.

.persist(li). mappedBy="order") public Collection<LineItem>getLineItems() { returnlineItems. UNIDADES DE PERSISTENCIA La unidad de persistencia define un conjunto de todas las entidades (clases) que son gestionadas por la instancia del EntityManager en una aplicación. en una solicitud de inscripción. return li. el método persist elevará una excepción IllegalArgumentException. aunque la operación persist se ejecutará en cascada con las entidades relacionadas. publicLineItemcreateLineItem(Order order. INSTANCIAS DE ENTIDADES PERSISTENTES Una nueva instancia se gestiona y se actualiza invocando al método persist. product. Por lo tanto. Este tipo de relación utiliza anotaciones javax. Si la entidad se separa. em. Esto significa que el dato de la entidad se almacena en base de datos cuando la transacción asociada con la operación persist se completa. Las unidades de persistencia se definen en el fichero de configuración persistence. Si la entidad ya se encuentra actualizada.getLineItems(). la operación persist se ignora. int quantity) { LineItem li = new LineItem(order. se convierte en una instancia gestionada.add(li).ManyToMany en los campos o propiedades persistentes. .xml. order. Si se llama al método persist o al método removed.. } 7. @PersistenceContext EntityManagerem. Este conjunto de clases de entidad representa los datos contenidos en un único almacén de datos. 6. Product product. los cursos y los estudiantes tendrían una relación muchos a muchos. o la realización del commit fallará. y cada estudiante puede tener varios cursos. o por una operación de actualización en cascada llamada desde una entidad relacionada a través de las anotaciones cascade=PERSIST o cascade=ALL. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 universidad tiene muchos estudiantes.persistence.quantity). El fichero JAR cuyo directorio META-INF contiene SOLWEB . } La operación persist se propaga a todas las entidades relacionadas con la entidad que tienen el elemento de cascada configurado con ALL o PERSIST @OneToMany(cascade=ALL.

El ámbito de la unidad de persistencia se determina por la raíz de la unidad de persistencia. clases embebidas y superclases mapeadas. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 persistence.xml El fichero persistence. o pueden empaquetarse como un archivo JAR que pueda ser incluido en un fichero WAR o EAR. mientras que el elemento class indica el nombre de esas clases. El fichero JAR y los elementos de la clase especifican las clases de persistencia: clases de entidad.xml se llama raíz de la unidad de persistencia. El elemento jar-file especifica los ficheros JAR en los que se encuentran las clases persistentes.xml define una o más unidades de persistencia: Este archivo define una unidad de persistencia llamada OrderManagement. y desplegarla en cualquier servidor de aplicaciones que soporte las especificaciones JEE5.2. con lo que ahora es posible desarrollar una capa de acceso a datos compatible con los estándares de Java en hibernate. la cual utiliza jdbc / MyOrderDB.0 Hibernate desarrolla la especificación JPA. El fichero persistence. Las unidades de persistencia pueden empaquetarse como parte de un WAR o un fichero EJB JAR. 8. El elemento jta-data-source especifica el nombre global JNDI de la fuente de datos que utiliza el contenedor. Cada unidad de persistencia debe ser identificada con un nombre único en el ámbito de la unidad de persistencia. INTERACTÚA  H IBERNATE La versión 3.  TOPLINK SOLWEB .

Los clientes ya no tienen que enfrentarse a las incompatibilidades de modelos no estándar.0 que es a su vez parte de la plataforma Java EE 5. Es una versión limitada del propietario del producto. por ejemplo. como en Java EE. El Java Persistence API se basa en las mejores ideas de tecnologías como la persistencia Hibernate. TopLink no proporciona sincronización de la caché entre la agrupación de las aplicaciones. ni tampoco un servidor de aplicaciones Java EE con el fin de ejecutar aplicaciones que utilizan persistencia 9. CONCLUSIONES Open JPA consisten en que objetos transitorios pueden ser almacenados en forma permanente en una base de datos relacional. Además. en lugar de ocupar su tiempo con el código de infraestructura. la Java Persistence API se puede usar tanto en entornos Java SE. TopLink. SOLWEB .  EJB JPA se definió como parte de la especificación EJB 3. Open JPA pretende hacer más eficaz el proceso de desarrollo.0 JPA (Java Persistence API). permitiendo a los desarrolladores enfocarse a resolver los problemas de negocios a los que se enfrentan. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 TopLink es una implementación del EJB 3. y JDO. la política de validaciones y la caché de consultas.No se utiliza un contenedor de EJB's. Además.

ARQUITECTURA HIBERNATE En la siguiente Figura muestra los roles de las interfaces Hibernate más importantes en las capas de persistencia y de negocio de una aplicación J2EE. SOLWEB . 2. La capa de negocio está situada sobre la capa de persistencia. mediante archivos declarativos (XML) o anotaciones en los beans de las entidades que permiten establecer estas relaciones. ya que la capa de negocio actúa como un cliente de la capa de persistencia. Hibernate es software libre.Net con el nombre de NHibernate) que facilita el mapeo de atributos entre una base de datos relacional tradicional y el modelo de objetos de una aplicación. INTRODUCCION Hibernate es una herramienta de Mapeo objeto-relacional (ORM) para la plataforma Java (y disponible también para . distribuido bajo los términos de la licencia GNU LGPL. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 HIBERNATE 1.

Lifecycle.  Interfaces callback que permiten a la aplicación reaccionar ante determinados eventos que ocurren dentro de la aplicación. e IdentifierGenerator. CompositeUserType.. tales como JDBC. SESSION SOLWEB . consultas. JTA (Java Transaction Api) y JNDI (Java NamingDirectory Interface).. como por ejemplo UserType.  Interfaces llamadas por el código de la infraestructura de la aplicación para configurar Hibernate. y Validatable. 3. Transaction.. borrados. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 Las interfaces mostradas pueden clasificarse como sigue:  Interfaces llamadas por la aplicación para realizar operaciones básicas (inserciones.): Session. Hibernate hace uso de APIs de Java.  Interfaces que permiten extender las funcionalidades de mapeado de Hibernate. La más importante es la clase Configuration. tales como Interceptor. Además. y Query.

openSession().hbm. si la aplicación accede a varias bases de datos se necesitará una SessionFactory por cada base de datos. Una instancia de Session es "poco pesada" y su creación y destrucción es muy "barata".  SESSION FACTORY Permite obtener instancias Session. La aplicación utiliza una instancia de Configuration para especificar la ubicación de los documentos que indican el mapeado de los objetos y propiedades específicas de Hibernate. Es la que mantiene las conversaciones entre la aplicación y la base de datos.beans.class). Sin embargo.Categoria. 4. Esto es importante. Hibernate puede detectar cambios en los objetos pertenecientes a una unidad de trabajo. Típicamente hay una única SessionFactory para toda la aplicación. ya que nuestra aplicación necesitará crear y destruir sesiones todo el tiempo. Puede ser útil pensar en una sesión como en una caché o colección de objetos cargados (a o desde una base de datos) relacionados con una única unidad de trabajo. También es el encargado de procesar la información correspondiente a los aparejamientos. SessionFactorysessionFactory = conf.buildSessionFactory(). Es el encargado de leerse y verificar los archivos de emparejamiento nombreDeClasse. SOLWEB . Configuration conf = new Configuration().xml. quizá en cada petición. Session session = sessionFactory. Un objeto Configuration es capaz de crear una SessionFactory ya que tiene tota la información necesaria. CONFIGURATION Se utiliza para configurar y "arrancar" Hibernate.addClass(escuela. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 Es una de las interfaces primarias en cualquier aplicación Hibernate. conf. y a continuación crea la SessionFactory. creada durante la inicialización de la misma.

tienen un tipo Hibernate correspondiente. y para ejecutar dicha petición. 4. Un elemento fundamental y muy importante en la arquitectura Hibernate es la noción de Type. Aunque solamente vamos a ver cómo configurar Hibernate en un entorno no gestionado.1 C ONFIGURACIÓN BÁSICA Para utilizar Hibernate en una aplicación. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014  QUERY Permite realizar peticiones a la base de datos y controla cómo se ejecuta dicha petición (query). limitar el número de resultados devueltos por la petición. pero las aplicaciones swing y AWT también son usuales. es importante comprender la diferencia entre la configuración de Hibernate para entornosgestionados y no gestionados: SOLWEB . Las aplicaciones cliente normalmente utilizan un navegador web. Hibernate se utiliza en aplicaciones cliente/servidor de dos y tres capas. incluyendo las asociaciones. es necesario conocer cómo configurarlo. Todas las propiedades persistentes de las clases persistentes. Este diseño hace que Hibernate sea altamente flexible y extendible. Las peticiones se escriben en HQL o en el dialecto SQL nativo de la base de datos que estemos utilizando. Hibernate puede configurarse y ejecutarse en la mayoría de aplicaciones Java y entornos de desarrollo. Incluso se permiten tipos definidos por el usuario (interfaz UserType y CompositeUserType). Una instancia Query se utiliza para enlazar los parámetros de la petición. desplegándose Hibernate únicamente en el servidor. Generalmente. Un objeto TypeHibernate hace corresponder un tipo Java con un tipo de una columna de la base de datos.

La mayoría de las aplicaciones requieren un fichero de configuración estático. C REACIÓN DE UNA SESSIONFACTORY SOLWEB .properties en el classpath.Configuration representa un conjunto completo de correspondencias entre los tipos Java de una aplicación y los tipos de una base de datos SQL. Los entornos no gestionados no proporcionan infraestructura para transacciones automáticas.  Situar un fichero denominado hibernate. Tanto en un entorno gestionado como en uno no gestionado. Las dos últimas opciones sirven para lo mismo: 6.xml en el classpath Las dos primeras opciones no se suelen utilizar. gestión de recursos. o seguridad. Para hacer esto debemos crear una SessionFactory desde la clase Configuration. Una aplicación stand-alone también se considera como no gestionada. se pueden utilizar cualquiera de las siguientes formas:  Pasar una instancia de java.cfg. tal como JBoss.  Entorno no gestionado: Proporciona una gestión básica de la concurrencia a través de un pooling de threads.util. como Tomcat proporciona un entorno de servidor no gestionado para aplicaciones web Java. Para especificar las opciones de configuración. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014  Entornogestionado: Los pools de recursos tales como conexiones a la base de datos permiten establecer los límites de las transacciones y la seguridad se debe especificar de forma declarativa. ESPECIFICACIÓN DE OPCIONES DE CONFIGURACIÓN (CONFIGURATION) Una instancia de org. lo primero que debemos hacer es iniciar Hibernate. 5. Un contenedor de servlets. Un servidor de aplicaciones J2EE.setProperties().  Incluir elementos <property> en el fichero hibernate.hibernate. además de contener un conjunto de propiedades de configuración. Una lista de las posibles propiedades de configuración y su explicación la podemos consultar en el manual de referencia de Hibernate incluido en la distribución (directorio doc\reference\en\pdf).cfg.Properties a Configuration. La propia aplicación es la que gestiona las conexiones con la base de datos y establece los límites de las transacciones. excepto para pruebas rápidas y prototipos.  Establecer las propiedades del sistema mediante java- Dproperty=value. es decir. en sus metadatos. Bea WebLogic o IBM WebSphere implementan un entorno gestionado para Java.

Hibernate busca un fichero con nombre hibernate. que suele hacerse sólo una vez al comienzo de la aplicación. SOLWEB .xml en el CLASSPATH de la aplicación. que utiliza las anotaciones definidas en las clases persistentes para obtener los mappings objeto/relacional.cfg. La inicialización del objeto SessionFactory es un proceso costoso. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 La forma habitual de inicializar Hibernate es creando un objeto SessionFactory a partir de un objeto Configuration() Un objeto Configuration() es una representación objetual del fichero de configuración de Hibernate. Cuando se invoca el método configure sin argumentos. Existe otra versión de configure que permite especificar otro nombre de fichero.

Ya que este entorno es no gestionado. la aplicación es la responsable de obtener las conexiones JDBC. Sin Hibernate. Hay tres razones por las que usar un pool:  Conseguir una nueva conexión es caro. pool de conexiones. La siguiente Figura muestra el papel de un pool de conexiones JDBC en un entorno de ejecución de una aplicación web (sin utilizar Hibernate). En vez de eso.  Crear la preparación de sentencias es también caro para algunos drivers. las aplicaciones Java deberían usar un pool de conexiones. como por ejemplo un contenedor de servlets. HibernateUtil. etc. Pooling de conexiones JDBC en un entorno no gestionado SOLWEB . Hibernate es parte de la aplicación.  En un bloque estático se inicializa la instancia de SessionFactory que utilizará la aplicación  El método getSessionFactory devuelve siempre la misma instancia de la clase SessionFactory  El método shutdown cierra la instancia única de SessionFactory y libera todos sus recursos (información de mapping. no implementa el pooling de conexiones. por lo que la aplicación debe implementar su propio algoritmo de pooling o utilizar alguna librería como por ejemplo el pool de conexiones de libre distribución C3P0. por lo que es responsable de obtener dichas conexiones. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 Normalmente se utiliza una clase. Generalmente. el código de la aplicación normalmente llama al pool de conexiones prara obtener las conexiones JDBC y ejecutar sentencias SQL. no es conveniente crear una conexión cada vez que se quiere interactuar con la base de datos.) CONFIGURACIÓN DE LA CONEXIÓN DE BASE DE DATOS En un entorno no gestionado.  Mantener muchas conexiones ociosas es caro. para implementar la instancia única de este objeto.

postgresql.connection.c3p0.max_elements=50 hibernate.max_size=20 hibernate. Hibernate con un pool de conexiones en un entorno no gestionado Hibernate define una arquitectura de plugins que permite la integración con cualquier pool de conexiones.idle_test_period=3000 El especificar las propiedades de la forma hibernate.dialect = net.c3p0.c3p0. SOLWEB . Un ejemplo de un fichero hibernate. tal y como se muestra en la siguiente Figura. vamos a ver cómo usarlo. idealmente.dialect.c3p0.username = auctionuser hibernate.conection.hibernate.c3p0.properties utilizando C3P0 se muestra en el siguiente listado: hibernate.c3p0.sf.min_size=5 hibernate. El código de la aplicación utiliza los APIsSession y Query para las operaciones de persistencia y solamente tiene que gestionar las transacciones a la base de datos. Hibernate actualizará la configuración del pool por nosotros con las propiedades que determinemos.PosgreSQLDialect hibernate.url = jdbc:postgresql://localhost/auctiondb hibernate. este escenario cambia: Hibernate actúa como un cliente del pool de conexiones JDBC. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 Con Hibernate.timeout=300 hibernate.* selecciona C3P0 como el pool de conexiones para Hibernate (sin necesidad de ninguna otra acción). utilizando el API HibernateTransaction.connection.connection.password = secret hibernate.driver_class=org.Driver hibernate. Puesto que Hibernate ya incluye soporte para C3P0. Otros pools de conexiones soportados son Apache DBCP y Proxool.

CONFIGURACIONES BASADAS EN XML Un fichero de configuración XML para configurar completamente una SessionFactory.connection.xml puede especificar también la ubicación de los documentos de mapeado. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 7.properties.url.connection.dialect  Especifica qué variante de SQL tiene que generar para comunicarse con la BD  Incluye dialectos para multitud de BBDD  Configuración pool de conexiones (opcional) o hibernate.connection.connection. o hibernate. o hibernate.connection.username. o hibernate. el fichero hibernate. Un ejemplo de fichero de configuración basado en XML es el siguiente: Siempre va estar compuesto por lo siguiente:  Configuración de Conexión a BD (data source) o hibernate.password  Dialecto hibernate o hibernate. en vez de añadir parámetros a Configuration en el código de la aplicación. Muchos usuarios prefieren centralizar la configuración de Hibernate de esta forma. que contiene solamente parámetros de configuración.pool_size SOLWEB .driver_class.cfg. A diferencia del fichero hibernate.

//Se crea la sesión SessionFactoryfact = config. //Se abre la sesión Session ses = fact.format_sql  Hace que la salida sea más legible. ses.saveOrUpdate(Alumno1).use_sql_comments  Hibernate añade comentarios a todas las sentencias SQL generadas para explicar su origen  Mapping de entidades o Lista de clases anotadas o de ficheros XML definiendo mappings. Ejmplo: Alumno Alumno1 = new Alumno().flush(). TRABAJANDO CON OBJETOS MAPEADOS Al trabajar con objetos mapeados. Con el atributo cascade=”save-update”. ses. con el atributo “all-delete-orphan” indicamos que el padre es el responsable del ciclo de vida del hijo. basta con que la clase este mapeada e incluida en el archivo de configuración de Hibernate. pero ocupa más espacio en pantalla o hibernate.show_sql  Habilita mostrar todas las sentencias SQL ejecutadas por Hibernate por consola o hibernate. Configuration config = new Configuration().setName(“VictorGonzalez“). 8.buildSessionFactory(). onetomany.close(). luego con la interfaz session. MODIFICAR UN OBJETO SOLWEB . se procede a ejecutar la función saveOrUpdate. incluye soporte nativo para C3P0  Propiedades para habilitar logging (deshabilitado en un entorno en producción) o hibernate. se pueden establecer relaciones de manytomany. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 o Soporte para integrar cualquier pool de conexiones.openSession(). C REAR UN OBJETO Si se desea insertar un objeto a la base de datos. le indicamos a hibernate que persista todos los extremos de las relaciones sin necesidad de realizar un sabe explicito. ses. Hibernate provee una gran cantidad de funciones y formas de mapeo para manipular los datos resultantes. Alumno1.setCarne(“200230367”). Alumno1. onetoone con el atributo inverse le indicamos a Hibernate que la relación es bidireccional.

con la propiedad “dynamic-update = true”. es decir se genera una sentencia update que contiene solo las columnas que fueron modificadas. esto produce que el objeto se vuelva transitivo.setCarne(“200230368”). simplemente es necesario ejecutar la función delete desde la interfaz sessión.class). Id).  Cargándolo por medio de su identificador ya sea por medio de get(Class. "200230367"). empezando por un objeto ya cargado. ses. List resultado = criterios. parseado en tiempo de compilación. //Se abre la sesión Session ses = fact. query.list().close().flush(). Configurationconfiguracion = new Configuration().like("carne".add(Expression.delete(Alumno1).  Navegar en el grafo de objetos persistidos. permite especificar restricciones dinámicamente sin trabajar directamente con cadenas. SOLWEB . ELIMINAR UN OBJETO Para eliminar un objeto de la base de datos con Hibernate. Ejemplo: Alumno1. criterios. solo se modifican los campos que han sido modificados.list(). [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 Por defecto se escriben todas los campos de la tabla.carne = :fcarne"). Ejemplo: Búsqueda con interfaz criteria Criteria criterios = session.buildSessionFactory(). ses. mientras que get retorna null. ses. List result = q. Id). //Se crea la sesión SessionFactory fact = configuracion. "200230367") ).createCriteria(Usuario. Utilizar la API Criteria que permite hacer consultas. Ejemplo: Busqueda con HQL Query query = session. o por medio de load(Class.createQuery("from Alumno u where u. load a diferencia de get envía una excepción si no se encontrase el objeto. OBTENER UNA LISTA DE OBJETOS En Hibernate existen varias formas de obtener los objetos de la base de datos.saveOrUpdate(Alumno1).setString("fcarne".openSession().  Utilizar HQL. Ejemplo: session.

udc. Emmanuel Bernard. y Steve Ebersole.pdf  Introducción a JPA (I) URL: http://www. URL: http://www. [UNIVERSIDAD PRIVADA DEL NORTE] del 2014 BIBLIOGRAFÍA  Tutorial basico de Hibernate .tic.youtube.es/is-java/is-java-2009-2010/Tema3-3. URL: http://www.php?id=144  Aplicaciones Spring http://www.com/watch?v=6EykF5QZQ74 SOLWEB .es/blog/entrada. Max Rydahl Andersen.Gavin King.davidmarco. Christian Bauer.html  Implementación de la Persistencia con Hibernate.es/tutoriales/hibernate-reference/index.davidmarco.