Saturday 31 December 2011

Curso ADF 11g - Parte 2

Tema: Creación de Componentes de Negocio.

Como se comento en la primera parte. Las aplicaciones ADF están compuesto de dos proyectos un asociado al modelo y otra a la parte WEB. Lo que desarrollaremos en este capitulo es lo asociado a la parte de modelo.

Requerimiento:

  • Oracle Jdeveloper 11g. 11.1.1.3
  • Oracle Database Express 11g
  • Haber culminado la parte 1 del tutorial. Ir al capitulo 1

1. Conceptos Básicos. La existencia de componentes de negocio se ha vuelto común en cualquier framework moderno. ADF cuenta por ello con un framework denominado ADF Business Components cuya arquitectura esta compuesta principalmente de tres tipos de componentes.

Entity Objects: Representan al modelo de datos en la capa de negocio. Entre sus características podemos mencionar:

    •Brindan la capacidad del mapeo O/R

    •Alojan las reglas de negocio y las validaciones de dato

    •Añaden funcionalidades de caching

    •Permite representar una tabla como un Entity Object

View Object : Representa a un grupo de datos (colección) que se pudo haber generado en base a las entidades ó a un query de base de datos. Sus características son :

    •Se puede basar en uno ó mas EO para mostrar un grupo de datos a los clientes de las aplicaciones

    •Genera un sentencia SQL que representa el grupo de datos obtenidos

    •Presenta la información de la capa de Business Service

    •Cuenta con capacidades de ordenar y filtrar la información seleccionada

Application Module : Define el facade de la aplicación. Es decir el componente que aloja las reglas de negocio en el framework.

    •Manejan las transacciones

    •Agrupa a los componentes que son expuestos al resto de capas de la aplicación

    •Implementa las reglas de negocio que tendrá la aplicación y que usará los View Objects para extraer la información.

    Gráficamente podríamos definir la arquitectura de la siguiente manera

image

En la figura se muestra como sería la distribución de componentes. Este escenario serviría para un sistema de matriculas. Note que el modelo de datos son representados como entidades y generalmente mapearían  a las tablas de base de datos.

Los View Objects (de color rojo) están asociados a los grupos de datos (cursores, colecciones) que se usarán los métodos de negocio que se implementarán en el Modulo de aplicaciones. En esta caso tenemos una vista que recuperará información de los alumnos matriculados por curso. Obviamente las entidades involucradas serán la entidad Alumnos y Cursos. Por otro lado, tenemos otra vista “Empresas Activas” que ofrecerá todas empresas activas, las cuales se podrían interpretar por un indicar de actividad cuando se defina la consulta.

EL último elemento a desarrollar será el módulo de aplicaciones. Este componente define la reglas de negocio de la aplicaciones. Si hiciéramos un paralelo con componentes en la base de datos, el módulo de aplicaciones sería los store procedures.

En el caso del sistema de matriculas, el modulo de aplicaciones implementaría los métodos de empezarProcesoMatricula() ó registrarMatricula().

Ahora, luego de conocer los principios de ADF Business Components desarrollemos un ejercicio práctico al respecto.

El proceso de creación de componentes, deberá cubrir lo siguientes pasos :

  • Mapear componentes de negocio en base a modelo de datos.  En este paso se crearán entidades, View Objects y el módulo de aplicación. Este paso es muy sencillo, y prácticamente lo realiza la herramienta.
  • Personalizar los componentes . En esta etapa si es necesario adaptar lo que el framework te ofrece a tus necesidades.  Recuerde que el framework reduce las líneas de código que debemos programar, pero nunca lo elimina. Este paso es un buen ejemplo de eso.

Desarrollemos los pasos indicados anteriores

MAPEO DE COMPONENTES.

1. Haciendo clic derecho sobre el proyecto Modelo,  elija la opción New.

image

 

2.A continuación, aparecerá la galeria de componentes. Esta galeria ofrece la relación de componentes que se pueden incluir en la aplicación. Al elegir la categoría ADF Business Components, podremos incluir los Business Componentes que describimos al inicio de este post. Para empezar crearemos las entidades, para esta eso elija la opción Entity Object y haga OK

image 

 

3. La Siguiente pantalla indicará que usará la conexión Ventas que creamos en la primera parte del curso.

image

 

4. A continuación aparecerá  el asistente para crear la entidad. Asignemos los siguientes valores :

Package : com.ventas.model.entities (simplemente estamos definiendo un paquete donde tendremos las entidades llamado entities)

Name: Cliente (Nombre de la entidad, no tiene que coincidir con el nombre de la tabla asociada)

Scheme Object: Asignemos sobre este campos la tabla Cliente. Use el botón browse para que el asistente ubique la tabla. Pulse Next.

 

image

 

5. Mantenga los valores por default en el resto de pasos. Para eso simplemente pulse Next hasta el paso 6.

6. La última pantalla brinda un resumen de lo que la herramienta va a construir. Pulse Finish para culminar la creación del componente.

 

image 

 

7. Repita los pasos 4,5 y  6 para crear las entidades Producto, Movimiento y Detalle en base a las tablas de nuestro modelo.

8. Note que se han creado unos componentes en rojo, denominados Asociaciones. Las asociaciones permiten relacionar entidades para poder acceder a su información.

image

9 Para poder entenderlo imagine como diseñaría las clases Cliente y Movimiento. En ese escenario, probablemente usted tendría una clase Cliente y un atributo del tipo Colección que agrupe a los movimientos asociados a ese cliente. Bien, en este framework, se modela de manera distinta, en vez de definir una collection de movimientos relacionadas a la entidad cliente, lo que se hace es crear una asociación  entre ambas entidades. Obviamente lo que ha hecho el asistente es tomar las foreing keys de la base de datos y en base a eso crear las asociaciones. La pregunta obvia es como se define la cardinalidad de ambas entidades, pues para eso simplemente haga doble clic sobre cualquiera de las asociaciones, elija la categoria RelationShip y pulsando el botón editar  verá las entidades involucradas en la relación y la cardinalidad, en este caso 1 a *

image

 

10 .A continuación crearemos las vistas. En este caso, las vistas dependerán de las entidades, aunque las vistas podrían no depender de una entidad sino directamente en base a una consulta SQL.

Bien para crear una vista puede realizar un procedimiento similar a lo mostrado en el caso anterior, eligiendo el componente View Objet en vez de Enttity Object ó como haremos a continuación haciendo clic derecho sobre una de las entidades, por ejemplo Cliente, y eligiendo la opción New Default View Object

image

 

9. Cambie el paquete destino, por queries y defina el nombre con el postfijo VO, por ejemplo  ClienteVO. Pulse Ok

image

 

10. Repita el procedimiento para crear las Vistas Producto VO, MovimientoVO y DetalleVO .

11. Usted debería tener los siguientes componentes, al culminar el último paso.

image

 

12. Así como las entidades se relacionan para permitir el acceso de datos, los view objects también tienen se pueden relacionar, por medio de un componente llamado view link. Su utilidad?, pues la utilidad es sincronizar datos, imagínese que planeamos construir una consulta, que cada vez que se navegue por un dato del movimiento, automáticamente se muestre los detalles del movimiento elegido. Para lograr eso, es probable que usted podría planear en “programar” para esa sincronización. Bien, el framework evita eso, permitiendo que definiendo esta relación, automáticamente los datos de dos vistas se sincronizan. Es decir si el usuario se ubica en el movimiento 545, entonces los detalles se filtran para mostrar los detalles correspondientes al movimiento 545. Bien para crear la relación, simplemente repita el paso 1 y elija la opción View link.

image

 

13. Cambie, el paquete destino por “com.ventas.model.queries” y defina un nombre para este tipo de componente por : MovimientoDetalleVL.

image

 

14. La siguiente pantalla permite definir la vista involucradas en el view Link. En este caso, definimos el atributo de la  vista origen “MovimientoVO.MovimientoId” (Será el padre) y la vista destino (DetalleVO.MovimientoId). Pulse Add para agregar la relación.

image

Noté que esta relación es muy similar a la de una asociación de entidades, pero no se confunda. Mientras la asociación entre entidades sirva para un acceso de datos entre entidades, por ejemplo se podría “personalizar el código” para que desde el movimiento se acceda a todos sus detalles para por ejemplo, calcular el total de detalles . Mientras que cuando usamos los viewLink lo que logramos es sincronizar datos “sin necesidad de personalizar código alguno” y que es muy útil para mostrar resultados anidados en la pantalla.

15. Pulse Next y luego Finish para culminar la creación del viewLink. Usted debería tener una imagen como la siguiente :

image

 

16. Ahora, procederemos a crear le módulo de aplicaciones. Repita los pasos 1 y 2 para mostrar la galería de componentes y elegir la opción Application Module.

image

 

17. Cambie le nombre del paquete por com.ventas.model.applications y el nombre del applications module por VentasAM. Pulse Next.

image

 

18. En la siguiente pantalla se define las vistas que serán expuestas por la aplicación que vamos a desarrollar.Este punto es importante destacarlo para comprender este tipo de componentes. Cuando construimos un modulo de aplicación tenemos que definir que vistas (View Object) serán usadas y expuestas hacia la capa WEB. Como explicamos en la parte introductoria, el módulo de aplicaciones concentrará la lógica de negocio de la aplicación y obviamente para poder implementar estas reglas, es necesario acceder a datos. Justamente estos datos son proveídos por los view objects, y este paso, es para que el modo de aplicación “vea” las vistas que necesita.

Si hacemos un analogía, es como si usted construyera un store procedures (Application Module) y declarará el uso de cursores creados previamente.

19.  En este caso, exponemos las vistas Cliente, Producto y Detalle. Para eso selecciónelas y use los botones de desplazamiento para agregarlas.

image

 

20.  Bien la vista que nos faltaría añadir sería la de movimiento. En este punto es importante recordar lo que hicimos en el paso 12 para crear el ViewLink entre Movimiento y Detalle. Note que se creo una relación entre las vistas para lograr sincronizar los datos. Bien, esta “jerarquia” tiene que ser expuesta para poder ser utilizada posteriormente. Entonces, para esto primero elija la vista movimiento y desplazela a la izquierda.

image

 

21. Ahora lo que hay que hacer es pasar la vista de detalle hacia la derecho, para eso en la region de la izquerda seleccione la vista detalle y en la región de la derecha seleccione la vista MovimientoVO, agregada previamente, luego pulse el boton de desplazamiento. Usted debería tener una imagen similar a lo mostrado a continuación. Pulse Finish para culminar la construcción del módulo de aplicaciones.

image

 

22. Bien todo lo construido debería tener la siguiente imagen.

image

 

23. Ok, para culminar la parte de mapeo vamos a usar una de las funcionalidades que ofrece el framework que es la capacidad de visualizar los datos una vez construido la capa de modelo. Que significa eso, pues que usted puede inspeccionar datos, probar métodos y actualizar información directamente desde el modelo, sin necesidad de crear una interfaz de usuario como una página jsf. Esto es muy útil, porque ayuda a hacer debug y probar la capa de modelo antes de iniciar el desarrollo del  la capa WEB, y de esa manera miminizar los errores en la aplicación.

24. Bien, para lograr esto simplemente haga clic derecho sobre el módulo de aplicaciones y eliga la opción Run.

image

 

25. Haga doble clic sobre la vista ClienteVO y use las flechas de desplazamiento para navegar entre los datos de esa vista.

image

 

26. Finalmente si hace doble clic sobre el viewLink  MovimientoDetalleVL1, vera la relación entre la vista movimiento y detalle. Si usted se desplaza entre los datos del movimiento, notará que automaticamente se refrescan los datos del detalle. Que es el efecto que queriamos lograr.

image

 

27. Si llegó hasta aquí, felicitaciones ya su aplicación va tomando forma y estamos seguros que esta listo para las siguientes entradas del curso. Si no llegó y tiene dudas, puede descargar el código del proyecto para que revise la solución.

 

CODIGO FUENTE

2 comments: