EJB-PERSISTENCIA

Enterprise JavaBeans

Proporcionan un modelo de componentes distribuido estándar del lado del servidor. El objetivo de los EJB es dotar al programador de un modelo que le permita abstraerse de los problemas generales de una aplicación empresarial (concurrencia, transacciones, persistencia, seguridad, etc.) para centrarse en el desarrollo de la lógica de negocio en sí. El hecho de estar basado en componentes permite que éstos sean flexibles y sobre todo reutilizables.

 

Tipos de EJB

EJB de Entidad: su objetivo es encapsular los objetos del lado del servidor que almacena los datos. Los EJB de entidad presentan la característica fundamental de la persistencia:
  • Persistencia gestionada por el contenedor (CMP): el contenedor se encarga de almacenar y recuperar los datos del objeto de entidad mediante el mapeo o vinculación de las columnas de una tabla de la base de datos con los atributos del objeto.
  • Persistencia gestionada por el bean (BMP): el propio objeto entidad se encarga, mediante una base de datos u otro mecanismo, de almacenar y recuperar los datos a los que se refiere, por lo cual la responsabilidad de implementar los mecanismos de persistencia es del programador.

 

 

Pool de Conexiones

Un pool de conexiones es un conjunto limitado de conexiones a una base de datos, que es manejado por un servidor de aplicaciones de forma tal, que dichas conexiones pueden ser reutilizadas por los diferentes usuarios. Este pool es administrado por un servidor de aplicaciones que va asignando las conexiones a medida que los clientes van solicitando consultas o actualizaciones de datos.
Cuando nuestra aplicación trabaja con bases de datos, lo que se realiza básicamente es obtener una conexión, realizar consultas o operaciones SQL y por último cerrar la conexión. El problema estriba en que las conexiones a bases de datos son limitadas en número y además suponen un coste de procesador abrirlas y cerrarlas.
Se puede evitar este sobre coste manteniendo conexiones persistentes, pero supone un gran problema para las aplicaciones web que trabajan con múltiples usuarios en un mismo instante. Ya que podemos saturar al servidor de bases de datos.


 

El pool lo que hace es mantener y gestionar un numero de conexiones físicas, que se irán reutilizando automáticamente para aumentar la eficiencia. De esta forma cuando creamos una nueva conexión desde nuestra aplicación, lo que obtenemos es una conexión lógica gestionada por el pool, y al cerrarla lo que hacemos es devolverla a dicho pool. A su vez el pool es capaz de ofrecer múltiples conexiones lógicas utilizando un reducido numero de conexiones reales. El manejo de un pool favorece la escalabilidad y el rendimiento de una aplicación.

Como crear un pool de conexión

Creando el Pool de conexiones

1) Entramos a la consola de glassfish. Si está en nuestro equipo local, ingresar a http://localhost:4848 Por defecto, el usuario es admin y la contraseña es adminadmin 
 
2) En el panel izquierdo de la consola de glassfish, seleccionamos Resources > JDBC > Pool Connections: . Hacemos clic en el botón "New"

3) En el asistente para crear un nuevo pool de conexiones, escribimos el nombre del pool. Cualquier nombre es válido, pero recomendable que solo esté compuesto por letras y números y sin espacios. También seleccionamos el tipo de recurso, que generalmente es java.sql.DataSource, y por último seleccionamos cuál es el proveedor de nuestra base de datos. En mi caso usaré MySQL. 

 

4) Luego, nos mostrará todas las propiedades de nuestra conexión a la base de datos. Generalmente muestra realmente todas las propiedades. Pero para este ejemplo solo usaré los que me interesa: username, password, databasename y Servername. Además activamos los checks "Permitir llamadores que no sean de componentes: " y "Conexiones no transaccionales" 

 

 

Qué es un Entity Class?

Como se describe en la sección anterior, las clases de entidad se combinan clases clave / valor que son administrados por enlaces de entidad. En este ejemplo, las Part, Suppliery Shipment las clases son clases de entidad. Estas clases contienen campos que son una unión de los campos de las clases de claves y valores que se han definido anteriormente para cada tienda.
En general, las clases de entidad pueden ser definidas en cualquier forma deseada por la aplicación. La entidad de unión, que también se define por la aplicación, es responsable de la asignación entre objetos clave / valor y objetos de entidad.
Las Part, Supplier y Shipment las clases de entidad se definen a continuación.
Una diferencia importante entre las clases de entidad definidas aquí y la clave y clases de valores definidos anteriormente es que las clases de entidad no son serializable (no aplicar la Serializable interfaz). Esto se debe a las clases de entidad no se almacenan directamente. La entidad de unión se descompone un objeto de entidad en objetos de clave y valor, y sólo la clave y valor los objetos se serializan para el almacenamiento.

 


Pasos para crear un EntityClass

Creamos un proyecto Java Aplication

2.- Le Asignamos un Nombre a nuestro proyecto y Finalizamos

3.- Ahora agregaremos a nuestro proyecto una conexión a nuestra base de datos, Para eso vamos a la pestaña Services, damos click derecho a Databases y presionamos New Connection…

4.- Ahora Configuramos; Seleccionamos el driver de MYSQL y completamos con los datos de la base de dato yFinalizamos.

5.- Ahora vamos a la pestaña Proyects, click derecho en Libraries y Add Library...

Agregaremos el Driver de MySQL y TopLink


Ahora ya podemos empezar a trabajar. Ahora agregaremos clases a nuestro proyecto. TopLink puede mapear la base de datos y transformar bd relacional a programación objetual. Para eso agregamos a nuestro proyecto una clase mapeada de la base de datos llamada Entity Clases From Data Base…

Nos pedirá la conexión y según ésta nos mostrará las tablas. Agregamos las tablas que deseamos ocupar en nuestro Proyecto y damos a Next.

Las tablas se mapearán y se convertirán en Clases , ahora nos pedirá el nombre que tendrán esas Clases mapeadas… Luego configuramos Persistence Unit… (Necesario para percistence)

Seleccionamos TopLink como Persistence Library y precionamos Create

Por Último presionamos Finish

Si todo sale Bien se habrán creado las clases que fueron mapeadas desde la base de datos

Ahora podemos empezar a programar:P , en este mini tutorial crearé el siguiente programa.

Un combobox con todos los países de la base de datos, al seleccionar algún país mostrará todas las ciudades asociadas a ese país.
Agregamos a nuestro proyecto un JFrame Form y agregamos JComboBox,JList y los JLabel’s correspondientes.





 Qué es WAR?

En computación, un archivo WAR (de Web Application Archive - Archivo de aplicación web) es un archivo JAR utilizado para distribuir una colección de JavaServer Pages, servlets, clases Java, archivos XML, bibliotecas de tags y páginas web estáticas (HTML y archivos relacionados) que juntos constituyen una aplicación web.

 

 

Java Message Service

 El Java Message Service ( JMS ) API es un Java Message Oriented Middleware API (MOM) para el envío de mensajes entre dos o más clientes . Se trata de una aplicación para manejar el problema del productor-consumidor . JMS es una parte de la Plataforma Java, Enterprise Edition , y está definido por una especificación desarrollada en el marco del proceso de la comunidad de Java como JSR 914. Se trata de un estándar de mensajería que permite que los componentes de aplicación basados en la Java Enterprise Edition (Java EE) para crear, enviar, recibir y leer mensajes. Permite la comunicación entre los diferentes componentes de una aplicación distribuida a ser imprecisa , fiable y asíncrona. 

 

 

Timer Service En EJB

Los EJB proveen un servicio de timer que permite ejecutar métodos en forma programada.
No provee todas las funcionalidades de Quartz, pero puede resultar práctico para algunas ocasiones. A continuación un ejemplo. 

La interfaz TimedObject

Tanto los EJB de entidad como de sesión son susceptibles de implementar esta interfaz, que les permite declarar el método que se ejecutará al activarse el timer.
En particular, se debe implementar el método ejbTimeout(Timer), el cual será invocado por el servicio de Timer cuando se active el mismo. Este método contendrá la lógica que queremos se ejecute.



 

 

 

Comentarios