Manual J2EE

Embed Size (px)

Citation preview

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

1

Manual de Desarrollo Basico de Aplicaciones En La Plataforma J2EE En Ubuntu 7.x

Miguel Abarca C. Prof. Gustavo Donoso M. Diseo de Software

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

2

IntroduccionEste manual de desarrollo basico de aplicaciones utilizando la arquitectura J2EE en UBUNTU 7.x, tiene como principales objetivo orientar al alumno tanto en lo teorico como practico de de esta arquitectura, y en el uso de herramientas de software libre que se hace cada vez mas necesario en el desarrollo y el diseo de aplicaciones empresariales, para esto es preciso tener conocimientos previos de algunos temas como son JDBC, UML, HTML, Envio de datos entre paginas web y manejo de UBUNTU, sino se tienen se recomienda investigar. Se detallaran cada uno de los componentes de este tipo de aplicaciones ademas de la introduccion de Patrones de Diseo que nos serviran para dar solucion a algunos problemas que ocurren cuando desarrollamos aplicaciones web, como es el manejo de grandes cantidades de archivos JSP en la comunicacin de la capa web y de negocio. Veremos, ademas, el uso de las herramientas que trae NetBeans 6 para Diseo de Software, que nos ayudaran a crear Diagramas de Clase con Ingenieria Reversa y Directa, Modelos de Casos de Uso, Diagramas de Secuencia y manejo de base de datos. Como consejo de experiencia personal, recomiendo no ir directamente a el desarrollo de las aplicaciones ejemplo para tratar de adelantarse, sino ir de los mas basico a los mas complejo de forma lenta pero segura, ya que de lo contrario puede costar aun mas el entendimiento del desarrollo de aplicaciones en esta arquitectura. Para la instalacion de la estacion de la estacion para trabajo en la plataforma J2EE, leer el manual Configuracin de un servidor para desarrollo con J2EE en Ubuntu 7.04, que se encuentra disponible en el sitio del curso, en el se encuentra el detalle de cada una de las partes que se utilizaran para el diseo y desarrollo de sus aplicaciones.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

3

INDICE Capitulo I: Elementos de la PlataformaPlataforma Java Ediciones Plataforma J2EE 5 6 7

Capitulo II: Arquitectura J2EEProgramacion por Niveles Modelo de Capas Modelo de 3 Niveles Modelo de 4 Niveles Arquitectura Aplicaciones J2EE Modulo EJB El Contenedor o Container Modulo WAR 9 9 10 10 11 11 13 14

Capitulo III: Elementos Aplicaciones J 2EEPartes de un Beans JNDI, referencia rapida JDBC, referencia rapida Paquetes de Aplicaciones Integracion Beans de Sesion+Entidad 17 18 18 19 19

Capitulo IV: Patrones de DiseoQue son? Para que se usan? Patrones J2EE Beans de Fachada (Session Faade) HTML dinamico y Aplicaciones Aplicacin Beans de Fachada en comunicacin Capa Web y Negocio 21 21 22 22 24 26

Capitulo V: NetBeans 6, Herramientas par Diseo de Software aEntorno de Trabajo Creacion aplicacin EAR (WAR+EJB) Agregar Driver de Coneccion a una Base de Datos PostgreSQL Herramienta para manejo de base de datos Agregar Modulo UML Creacion Modelo Casos de uso Creacion Diagramas de Clase Creacion Modelo de Analisis Creacion Modelo de Secuencia Exportar a Imagen cada Modelo Generacion de Codigo a partir de los Modelos Ingenieria Inversa 28 29 31 34 41 43 45 49 51 55 55 57

Capitulo VI: Aplicaciones de EjemploConocimientos Necesarios Aplicacin Hola Mundo Calculadora Agenda Telefonica 63 63 69 80

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

4

CAPITULO I Plataforma Java

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

5

Plataforma JavaEn el desarrollo de nuestra carrera se nos ha capacitado en la mayoria de los cursos de desarrollo de software en el uso de esta plataforma pero muchas veces no nos detenemos a buscar con que elementos contamos ni cuales son los elementos que entran en juego. Es por esto que antes de comenzar con el desarrollo de aplicaciones J2EE es preciso conocer algunos elementos basicos como por ejemplo Que es una plataforma? En que consiste la plataforma Java?Cuales son sus partes?.

Que es una Plataforma? Se entiende por plataforma al entorno de hardware y software en el cual se ejecutan programas. Plataforma JAVA Asi tenemos que JAVA esta basado solo en software que se ejecuta sobre otras plataformas y su software puede ser usado sobre varios sistemas operativos y hardware. Esta plataforma esta constituida de tres componentes:

1. El Lenguaje: es un lenguaje de proposito general, de alto nivel que utiliza elparadigma de orientacion a ojetos.

2. La Maquina Virtual: Los programas escritos en Java son compilados comoarchivos ejecutables de una maquina virtual llamada Java Virtual Machine (JVM), esto nos permite que los programas ejecutables puedan ejecutarse en distintas arquitecturas.

3. Las Bibliotecas: el conjunto de bibliotecas del lenguaje es conocido como la Java

Aplication Programming Interface (Java API) y es un conjunto de componentes que proporcionan diferentes herramientas para el desarrollo.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

6

Asi como existen versiones diferentes de programas, para la plataforma Java tambien existen diferentes ediciones, estas son 3:

J2ME J2SE J2EE1. Java 2 Plataform, Micro Edition (J2ME): Desarrollo para articulos moviles 2. Java 2 Plataform, Standard Edition (J2SE): Desarrollo para computadores 3. Java 2 Platafomr Enterprise Edition (J2EE): Desarrollo Orientado aaplicaciones corporativas o empresariales. A modo de referencia rapida podemos decir que J2SE, esta compuesto de dos partes uno que es el SDK (Software Development Kit) que tiene todo el software necesario para el desarrollo de aplicaciones JAVA. personales y aplicaciones en general. pequeos como PDAs.

Y el JRE (Java Runtime Environment) que contiene solo el ambiente y las bibliotecas principales para ejecutar el software escrito en JAVA.

La plataforma J2EE es una plataforma para crear aplicaciones empresariales utilizando un modelo de multicapas, Dividiendo a la aplicacin en diferentes niveles, cada uno basndose en una tarea particular. Est basado en J2SE y un conjunto de sus APIs a la cual J2EE aporta a la especificacin de componentes.

Como resultado basicamente, tenemos un paquete en el que podemos desarrollar aplicaciones utilizando tecnologias web, por medio de aplicaciones JAVA.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

7

Plataforma J2EEAhora, observemos los componentes que comprenden esta plataforma:

La parte externa de la plataforma como vemos se encuentra formada por JAVA BEANS, APPLETS, SQL, etc. Un nivel mas interno tenemos el CONTAINER o contenedor, que es el encargado de manejar los EJB, JSP, Servlets. Y un nivel mucho mas profundo en el que tenemos las transacciones, mensajeria y mail. De todos estos nos centraremos basicamente en el estudio de: EJBs JSP Servlets SQL

De forma rapida podemos decir que: EJBs: Son modulos encargados de manejar toda la logica de programacion dentras de nuestra aplicacin. JSP: Quienes manejan interfaces de comunicacin con el usuario o cliente. Servlets: programas en java que permiten la comunicacin y la ejecucion de programas Java a travez de una aplicacin web. SQL: contiene toda la logica de programacion que comunica nuestra aplicacin con el sistema gestor de base de datos. Todos estos elementos nos permitiran desarrollar aplicaciones basicas utilizando J2EE como herramienta de trabajo.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

8

CAPITULO II Arquitectura J2EE

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

9

Programacion por NivelesComo se dijo anteriormente J2EE utiliza una logica de programacion desarrollada en niveles o capas. Lo que nos permitira encapsular o separar elementos de nuestras aplicaciones en partes claramente definidas. Que quiere decir basicamente esto: que podremos dejar procesos en un lugar, datos en otros, mostrar interfaces en otro.

Modelo de CapasEn la programacion por capas basicamente la idea es buscar la forma de separar lo que ve el usuario con los procesos creados por el desarrollador. Asi tenemos diferentes lenguajes que nos permiten desarrollar aplicaciones por capa por ejemplo JSP, ASP, PHP. Por lo tanto debemos primero, ver de forma global donde se encuentra el usuario y donde se encuentra el desarrollador:

USUARIO

DESARROLLADORServidor Web JSP, ASP, PHP

CLIENTE

Transacciones

Internet

Bases de Datos

Como observamos entonces ya tenemos una capa claramente definida que es la del Cliente en el cual se realizaran todas las peticiones a las capas superiores y estas a su vez enviaran las respuestas a esas solicitudes. Pero definiendo aun mas tenemos que: El servidor web es el encargado de realizar todos los procesos logicos como crear consultas crear formularios, ejecutar procesos, etc, un servidor web comunmente utilizado es Apache. El Servidor de Bases de Datos es en el que, como su nombre lo dice, tenemos todas las tablas, vistas y consultas que necesitamos para nuestro sistema, un servidor comun es PostgreSQL. Y la seguridad junto con las transacciones que contienen toda la logica de negocio entre la aplicacin y la base de datos.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

10

Modelo de 3 capasAhora que sucede en la arquitectura de tres capas, tenemos las transacciones con el servidor web realizandose en un mismo lugar, o en este caso una misma capa, y los datos se mantienen a su vez tambien en una capa aun mas superior y alejada del cliente, para dar un nivel mas de seguridad. Observemos el siguiente dibujo, en el cual ya se definen las 3 capas basicas del desarrollo de aplicaciones web: CLIENTE WEB DATOS

Servidor Web JSP, PHP, ASP

Servidor Base de Datos

Transacciones

Modelo de 4 capasEn esta arquitectura lo principal es que, separamos la segunda capa en dos: Capa Web que queda solamente con el Servidor WEB y las Transacciones se realizan en la capa de Negocio: CLIENTE WEB NEGOCIO DATOS

Servidor Web JSP, PHP, ASP

Transacciones

Servidor Base de Datos

Esto nos permitira un mejor control de todos los elementos que entran en juego a la hora de desarrollar aplicaciones Web.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

11

Arquitectura Aplicaciones J2EELas aplicaciones J2EE se basan completamente en el modelo de aplicaciones de 4 niveles. Todas las aplicaciones constan de 3 partes basicas, que son Modulos EJB: encargado de tener la logica del negocio y transacciones. En otras palabras podemos decir que es el encargado de ejecutar programas, consultas a la base de dato principalmente. (capa Negocio) Modulo WAR: que es la encargada de tener todos los elementos de interfaz como paginas web, servlets, applets. (capa WEB). Aplicacin EAR: contiene en su interior toda la configuracion de la aplicacin J2EE, eso incluye el modulo WAR y EJB.

Modulo EJBEn este modulo entran en juego varias cosas, ya que es el encargado de administrar la mayor parte de la logica de nuestra aplicacin. Que es un EJB? Facil, EJB es el acronimo de Enterprise Java Beans, basicamente un conjunto de paquetes con varias aplicaciones java.

Beans Beans

Beans

Beans Beans Modulo EJB Beans

Que es un Beans? Un poroto!, se les dice asi porque si se dan cuenta y hacen la analogia con una bolsa de porotos, esta contiene mucho, al igual que cada EJB contiene muchas aplicaciones, entonces a cada uno de esos pequeos paquetes se les asocia con un poroto, pero mas formalmente un beans es una parte del EJB que contiene toda una logica de programacion para realizar alguna actividad en particular. Existen tres tipos de Beans que son:

Beans de Entidad (Tablas)

Beans de Mensajes (Acciones)

Beans de Sesion (Tareas)

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

12

Entonces mas detalladamente tenemos: Beans de Sesion: representan sesiones interactivas con uno o mas clientes, pueden mantener un estado, pero solo durante el tiempo que el cliente interactua con el bean. Esto significa que los beans de sesin no almacenan sus datos en una BD despues que el cliente termine el proceso. Se dividen en dos Beans de sesion Con Estado: almacenan datos especificos obtenidos durante la conexin con el cliente, cada bean de sesin con estado por lo tanto almacena el estado conversacional de un cliente con el que interactua. Este estado conversacional se modifica conforme el cliente va realizando llamadas a los mtodos de negocio del bean. El estado conversacional no se guarda cuando el cliente termina la sesin. Osea este beans usado va cambiando conforme el cliente lo necesite, algunos metodos que contienen estos son los set y los get, un ejemplo claro es el carrito de compras que a medida que vamos avanando se le van agregando mas cosas, o en un inicio de sesin cuando necesitamos tener en alguna parte los datos de la persona que ha hecho login. Beans de sesion Sin Estado: no se modifican con las llamadas de los clientes solo reciben datos y devuelven resultados pero no modifican internamente el estado del bean. Estos beans por lo general son usados para encapsular procesos de negocio, mas que datos de negocio (tarea de los beans de entidad), tambin puede usarse como puente de acceso a una BD o a un bean de entidad. Cuando trabajamos con cliente-servidor estos beans podrian proporcionar al interface de usuario los datos necesarios, estos beans de sesin sin estado son de uso muy frecuente. Beans de Mensajes: pueden escuchar mensajes de un servicio de mensajes JMS, estos nunca se comunican directamente con el cliente y no necesitan objetos EJBObject, un ejemplo podra ser ListenerNuevoCliente que se activa cada vez que se enva un mensaje que se ha ingresado un nuevo cliente. Beans de Entidad: modelan conceptos o datos de negocio, que pueden expresarse como nombres. Representan cosas, objetos del mundo real como Hoteles, habitaciones, expedientes, estudiantes y demases. Un bean de entidad puede representar incluso cosas abstractas como una reserva, describen tanto el estado como la conducta de objetos del mundo real y permite a los desarrolladores encapsular reglas de datos y negocio asociadas con un concepto especifico. Por ejemplo un bean de entidad Estudiante encapsula los datos y reglas de negocio asociadas a un estudiante. esto hace posible manejar de forma consistente y segura los datos asociados a un concepto. Los beans puden contener informacin por ejemplo de un estudiante sin necesariamente estar conectados con una BD. El contenedor se encarga de sincronicar las variables de instancia del bean con la BD. Debido a que los beans de entidad se guardan en un mecanismo de almacenamiento se dice que es persistente, Persistente significa que el estado del bean existe mas tiempo que la duracion de la aplicacin. Estos beans se dividen en dos: Persistencia gestionada por el Bean (BMP): contienen el cdigo que accede a la BD..

Persistencia Gestionada por el Contenedor (CMP): la relacin entre las columnas de la BD y el bean se describe en el fichero de propiedades del bean, y el contenedor EJB se ocupa de la implementacin.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

13

El Contenedor o ContainerLos containers son un servicio que proporciona la infraestructura necesaria a una componente para ser ejecutado, para proveer sus servicios a un cliente y dar comunicacin con otras componentes. Un producto tpico proveer un container para cada tipo de componente de la aplicacin: container de la aplicacin cliente, para Applets y para componentes de EJB.

De que cosas se preocupa el contenedor? Tiene permisos el cliente para llamar al mtodo? Hay que abrir la transaccin al comienzo de la llamada y cerarla al terminar. es necesario refrescar el bean con los datos de la BD?

EJEMPLO: imaginemos que tenemos una aplicacin de ventas con un beans llamado Personas la cual tiene varios metodos entre ellos compra. Supongamos que desde el objeto cliente queremos llamar al mtodo compra, esto va a provocar que se realizen los siguientes pasos: 1. Cliente: Necesito hacer una peticion de compra al bean Personas 2. EJBObject: Espera un momento, tengo que comprobar que tienes permisos 3. Contenedor EJB: Si, tienes permisos para hacer la llamada al mtodo compra 4. Contenedor EJB: Necesito un bean Personas para realizar la operacin de compra, no se olviden de comenzar la transaccin.

5. (Reserva) Pool de Beans: A quien le toca esta vez .6. Contenedor EJB: Ya tengo un bean Personas, pasale la peticin al cliente

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

14

Modulo WAREste modulo como dijimos anteriormente es el encargado de la comunicacin ClienteServidor WEB, en el realizan las peticiones a las capas superiores, en el tenemos tres elementos basicos que son los: JSP: Java Server Pages (pagina web java) Servlets: Componente web desarrollada con el objetivo de procesar requerimientos de un cliente o requests y genera respuestas con contenido web dinmico. Para ser ejecutados es necesaria la utilizacin de un servidor que soporte Servlets y su container. Aplicaciones Java: codigos Java en su forma pura, que tienen metodos y atributos y que pueden ser utilizados en aplicaciones JSP y Servlets. Muchas veces se tiende a utilizar los JSP de la misma forma que paginas PHP, lo cual no es recomendable debido a la gran cantidad de codigo que se genera y lo cual produce mucho desorden por esto se hara gran enfasis a respetar la arquitectura J2EE, en donde debemos tener cada parte donde corresponde, vale decir, Interfaces en la capa web, peticiones y respuestas en la capa de negocio y las conecciones de la base de datos en la capa de datos. Comunicacin Capa Web+Capa Negocio Cuando recien se comienza el desarrollo de estas aplicaciones, cuesta un poco saber donde realizar la comunicacin de cada una de las capas, como dijimos anteriormente uno tiene a escribir todo ese codigo en las aplicaciones JSP, lo que no era recomendable, por lo que debemos hacerlo de la siguiente forma:

Se deben utilizar los Servlets como ente comunicador de ambas capas, para poder mantener la arquitectura de la aplicacin y el orden. Mas adelante veremos que esta comunicacin se realiza de una forma muy sencilla en la que la herramienta de desarrollo, en este caso NetBeans, la realiza en 2 sencillos pasos. Cabe sealar que es preciso tener conocimientos previos de HTML y de transferencia de informacion entre paginas web, para poder llevar a cabo el desarrollo de la aplicacin en la capa web.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

15

Entonces a modo de resumen, Como conocimiento bsico, se conoce el modelo de 3 capas, en el cual tenemos, el cliente o navegador, servidor web y la capa de datos:

Tenemos, un navegador, que es el lugar donde se encuentra el cliente Un servidor web, que es donde se ejecutan las operaciones de negocio y comunicaciones con la BD, y se genera el HTML dinmico que posteriormente ser mostrado en los navegadores. Servidor de Bases de Datos, donde se encuentra toda la informacin y de donde se retornan las consultas. Para el modelo de 4 capas tenemos que las operaciones de negocio y generacin de HTML dinmico que se envan al navegador se encuentran separadas.

Y en donde entran en juego elementos como los Servlets y EJB que ya fueron detallados.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

16

CAPITULO III Elementos Aplicaciones J2EE

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

17

Partes de un BeansUn beans esta compuesto de tres partes o de tres clases mejor dicho, de ellas tenemos:

Clase Beans (Beans) Clase Remota del Beans (Remote) Clase Remota que crea el beans (RemoteHome)

De ellas podemos decir rapidamente que: Clase Beans: contiene toda la logica de programacion de los metodos del beans. Clase Remota del Beans: es una especie de mascara, en la cual tenemos todos los metodos sin su definicion logica, mas bien una especie de resumen de todos los metodos, cuando se accede desde otros beans o de otros niveles a este beans, es a esta clase a la cual se llama y no a la clase beans en si. Clase Remota que crea el beans: esta clase es la encargada de crear el beans, de llamar a la clase remota para tener acceso a los metodos. Porque se crean estos archivos? De forma sencilla sirven para Crear, Llamar, Ejecutar y enviar la respuesta, y cada uno de ellos sirve para realizar esas acciones. Cada vez que deseamos utilizar un beans se realiza lo siguiente:: 1. Crear llamada a un beans. (clase remota que crea el beans) 2. Cuando se obtiene respuesta de un beans se genera una llamda remota. (clase remota del beans) 3. Se llaman a los metodos de la clase remota para trabajar. (clase remota llama internamente a la clase beans). Veamoslo de forma grafica, imaginemonos una conversacion entre un grupo de personas, en donde una persona llama a cada uno de ellos:

Llamada: NecesitounBeans!!

RemoteHome:Yolotengo!,lo creoenseguida!

Remote:Necesitoelmetodo Buscar(),ejecutalo.

Beans:Loejecutoenseguidayte doylarespuesta. Remote:Acaestala ejecuciondeloquenecesitas.

Lamada:Gracias

Si observan en la ejecucion de estos pasos, en la parte final, solo la clase Remote vuelve con la respuesta y no el Beans.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

18

JNDI, Referencia Rap idaEs la interfaz de nombrado de JAVA, lo que nos permitira la comunicacin entre beans, por medio del nombre, y entre servlets y beans en el caso de comunicacin capa Web y Negocio.

EJB Curso JNDI

EJB Persona

Las busquedas de beans dentro del contenedor se hacen atravez de un metodo llamado lookUp que se detallara como crearlo mas adelante.

JDBC, Referencia RapidaJava Data Base Conectivity, Coneccion Java a Base de Datos. Estos sistema de coneccion nos permitira conectar la capa web con la capa de datos, o mejor dicho con el motor de base de datos definido en este caso como Postgres, para lo cual necesitaremos un SERVIDOR DE BD, USUARIO, CONTRASEA y un Driver de coneccion.

EJB Persona JDBC

Base Datos

Paquetes de AplicacionesLos paquetes de aplicaciones se pueden crear, tanto en la capa web, como la capa de negocio, con ellos podemos crear o encapsular algunas operaciones basicas que no realizen mayor trabajo dentro del sistema por ejemplo, crear textos, titulos en html, tablas, etc. Por ejemplo imaginemonos que tenemos un paquete con funciones que generan codigos html y dentro de esa clase tenemos varias clases, una encargada de manejar los colores, otro de crear encabezados de tablas, otro para crear listas, etc.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

19

Asi tendriamos mas o menos algo asi: Paquete: CodigosHTML Clases: - colores.java - listas.java - tablas.java - encabezados.java Entonces, cuando tengamos un beans y deseemos ocupar clases de ese paquete solamente bastara con agregarlo junto con todas las otras librerias que agregamos, de la siguiente forma: import CodigosHTML.*; o en su forma individual, por ejemplo: import CodigosHTML.colores; import CodigosHTML.tablas; La ventaja de utilizar paquetes en vez de beans, es que no es tan engorroso su llamado como los beans entre ellos, y podemos tener solo operaciones de uso frecuente en una sola parte.

Integracion Beans de Sesion+EntidadPorque hacer esta integracion? Por tres motivos: El objetivo de desarrollar una aplicacin en el area de Diseo de Software, es aprender a utilizar herramientas que nos permitan llevar acabo diseo. Por otro lado, el desempeo de el servidor JBOSS, algunas veces falla al trabajar con beans de entidad o se coloca muy lento debido a que debe hacer una imagen de la base de datos, o la tabla en este caso, en el beans, lo cual puede demorar dependiendo de la cantidad de registros que tengamos, asi se hace mucho mas sencillo aprender a utilizar Beans de Entidad BMP, por medio de Beans de Sesion sin estado. No es motivo de este manual profundizar mas alla en el uso de cada uno de los componente, sino como dije anteriormente aplicar las herramientas de diseo de software en la creacion de una aplicacin.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

20

Capitulo IV Patrones de Diseo

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

21

PATRONES DE DISE OQue son?Como analistas y programadores vamos desarrollando a diario nuestras habilidades para resolver problemas usuales que se presentan en el desarrollo del software. Por cada problema que se nos presenta pensamos distintas formas de resolverlo, incluyendo soluciones exitosas que ya hemos usado anteriormente en problemas similares. Es as que a mayor experiencia que tengamos, nuestro abanico de posibilidades para resolver un problema crece, pero al final siempre habr una sola solucin que mejor se adapte a nuestra aplicacin. Si documentamos esta solucin, podemos reutilizarla y compartir esa informacin que hemos aprendido para resolver de la mejor manera un problema especfico. Un patrn de diseo es una abstraccin de una solucin en un nivel alto. Hay patrones que abarcan las distintas etapas del desarrollo; desde el anlisis hasta el diseo y desde la arquitectura hasta la implementacin. Muchos diseadores y arquitectos de software han definido el trmino de patrn de diseo de varias formas que corresponden al mbito a la cual se aplican los patrones. Luego, se dividi los patrones en diferentes categoras de acuerdo a su uso. Los diseadores de software extendieron la idea de patrones de diseo al proceso de desarrollo de software. Debido a las caractersticas que proporcionaron los lenguajes orientados a objetos (como herencia, abstraccin y encapsulamiento) les permitieron relacionar entidades de los lenguajes de programacin a entidades del mundo real fcilmente, los diseadores empezaron a aplicar esas caractersticas para crear soluciones comunes y reutilizables para problemas frecuentes que exhiban patrones similares. Fue por los aos 1994, que apareci el libro "Design Patterns: Elements of Reusable Object Oriented Sofware" escrito por los ahora famosos Gang of Four (GoF, que en espaol es la pandilla de los cuatro) formada por Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides. Ellos recopilaron y documentaron 23 patrones de diseo aplicados usualmente por expertos diseadores de software orientado a objetos. Desde luego que ellos no son los inventores ni los nicos involucrados, pero ese fue luego de la publicacin de ese libro que empez a difundirse con ms fuerza la idea de patrones de diseo.

Para que se usan?Los patrones del diseo tratan los problemas que se repiten y que se presentan en situaciones particulares, con el fin de proponer soluciones a ellas. Por lo tanto, son soluciones exitosas a problemas comunes. Existen muchas formas de implementarlos. Los detalles de las implementaciones son llamadas estrategias. El grupo de GoF clasificaron los patrones en 3 grandes categoras basadas en su PROPSITO: creacionales, estructurales y de comportamiento. Creacionales: Patrones creacionales tratan con las formas de crear instancias de objetos. El objetivo de estos patrones es de abstraer el proceso de instanciacin y ocultar los detalles de cmo los objetos son creados o inicializados. Estructurales: Los patrones estructurales describen como las clases y objetos pueden ser combinados para formar grandes estructuras y proporcionar nuevas funcionalidades. Estos objetos adicionados pueden ser incluso objetos simples u objetos compuestos.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

22

Comportamiento: Los patrones de comportamiento nos ayudan a definir la comunicacin e iteracin entre los objetos de un sistema. El propsito de este patrn es reducir el acoplamiento entre los objetos.

Patrones J2EECon la aparicin del J2EE, todo un nuevo catlogo de patrones de diseo apareci. Desde que J2EE es una arquitectura por si misma que involucra otras arquitecturas, incluyendo servlets, JavaServer Pages, Enterprise JavaBeans, y ms, merece su propio conjunto de patrones especficos para diferentes aplicaciones empresariales. De acuerdo al libro "J2EE PATTERNS Best Practices and Design Strategies", existen 5 capas en la arquitectura J2EE: Cliente Presentacin Negocios Integracin Recurso

El libro explica 15 patrones J2EE que estn divididos en 3 de las capas: presentacin, negocios e integracin. Nosotros nos centraremos en aplicar la utilizacin del patrn de diseo SESSION FAADE o BEANS DE FACHADA, el cual nos permitir mantener la arquitectura y tener un mejor flujo de informacin y orden entre las distintas capas. El uso de un bean de sesin como una fachada (facade) para encapsular la complejidad de las Session Faade/ Session Entity Faade/ Distributed Faade interacciones entre los objetos de negocio y participantes en un flujo de trabajo. El Session Faade clientes. maneja los objetos de negocio y proporciona un servicio de acceso uniforme a los

Beans de Fachada (Session Faade)En general, como vimos en Patrones de diseo el beans de fachada sirve para controlar las diferentes llamadas a procedimientos que se producen en la capa de negocio, esto nos permitir un mejor flujo de informacin y ejecucin de procedimientos. Pero veamoslo mas claramente, imaginemos un sistema de ventas que est diseado ms o menos de la siguiente manera, tendremos mas de un JSP que realizaran las llamadas y peticiones a varios Servlets los que a su vez llamaran a mas de un beans de encargado de generar consultas, ingresos, etc. y a su vez estos realizaran consultas a los distintos EJB ya sean de compra, ventas o de personas.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

23

Ms o menos tenemos un modelo como el siguiente:

En el observamos un cliente, varios archivos JSP y a su ves varios servlets que se comunican con la capa de negocio, produciendo muchas llamadas entre las diferentes capas, esto produce que el sistema se pueda volver mas lento o que se produzca mucho mas desorden, lo que conlleva a un nivel de complejidad mucho mayor en el desarrollo, ya que se complica el tema de modificar codigos, buscar codigos, buscar errores, etc. Por eso ocuparemos un solo beans en la comunicacin capa web-negocio, pero la pregunta es como lo hacemos?, creando un beans que genere las respuestas a las solicitudes de cada servlet, y es aqu donde entra en juego el beans de fachada, que nos permitira reducir a una sola llamada todas las peticiones, y poder representar a todos los demas beans, ademas entra tambien lo que llamamos HTML Dinamico, que nos permite generar HTML que siempre cambia y tambien nos permitira, poder tener una sola pagina JSP en vez de varias, esto lo explicaremos en el siguiente tema, entonces tenemos el siguiente modelo:

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

24

HTML Dinamico y Aplic acionesLa creacion de HTML dinamico es un tema muy recurrente en este tipo de aplicaciones, ya que siempre que generamos consultas o respuestas a consultas creamos listas, tablas, formularios, etc., en base a variables que van cambiando con el tiempo. Y es en esta parte donde entra la aplicacin de el patron de diseo Session Faade o Beans de Fachada. Par comprender mejor esta aplicacin, usaremos como ejemplo una aplicacin de compras y ventas. Orden y Rapidez de Ejecucion Dentro de lo que es el desarrollo de aplicaciones con contenido dinmico tenemos un problema que es frecuente y el cual nos produce desorden y complejidad en lo que respecta a ejecucin y orden de los diferentes cdigos que nos proporcionarn el contenido dinmico.

La mayora de los desarrolladores web tienden a tener siempre diferentes pginas web para cada una de las actividades que realizan sus sistemas, por ejemplo podemos tener una pgina web que tenga dos opciones una de COMPRA y otra de VENTA y a su vez cada una de ellas tendran diferentes paginas tanto para eliminacin para ingresos y modificaciones:

Entonces nos centraremos en lograr eliminar esta lgica de desarrollo y centrarnos en una mucho ms interesante que nos permitir tener solamente un archivo HTML y en el ejecutar muchos eventos realizando solo llamadas a acciones o procedimientos, lo que nos producira un orden de ejecucin y encapsulacin de las actividades mucho mejor.

Osea, ejecutaremos muchas paginas en una sola. Para esto es preciso antes, identificar que lugares de nuestra web, es dinamica y cual es estatica. Todos los sitios tienen por lo general, estos lugares claramente definidos.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

25

Observemos el siguiente grafico. De un sitio de ventas de articulos.

Observemos que existen 4 partes pero una de ellas es claramente el lugar donde ejecutamos todos los procesos, mientras que los demas son lugares fijos, que no dependen de otras variables.

Y es este el punto el punto de union de todas las paginas web que por lo general creamos, siendo estos: eliminaciones, listados, ingresos, etc., ya que todas se ejecutan dentro de un mismo lugar que puede ser un elemento TABLE o un DIV. Ahora Como identificamos cada una de las paginas o de las acciones que deseamos ejecutar en mismo lugar? Pues muy sencillo, con un ID de accion, que enviaremos tanto por GET como POST. Por ejemplo: Veamos un formulario sencillo donde tenemos un listado de usuarios a los que podremos Modificar y Eliminar. A la accion Modificar daremos un ID (idaccion=2) y a Eliminar otro (idaccion=3) y le pasaremos por parametro GET el nombre de usuario.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

26

Entonces cada vez que ejecutemos dicho link, se ejecutara esa accion con ese nombre de usuario.

?idaccion=2&nick=user4

?idaccion=3&nick=user4

Observar que por parametro no se indica el nombre de la pagina que modifica o elimina, ya que como dijimos se ejecuta en el mismo lugar. Este tema sera visto mas adelante con una aplicacin de ejemplo.

Aplicacin Beans de Fachada en comunicacin Capa Web y NegocioLa utilizacion de esto nos servira en la comunicacin Capa Web y Capa de negocio ya que nos servira para reducir el numero de llamadas que existe entre una capa y otra, tal y como lo dijimos anteriormente. Visto de otra forma, en nuestra aplicacin de ejemplo (sistema de ventas), imaginemos tenemos tres tipos de usuarios, y que cada uno solo tendra un JSP para sus acciones y a su vez cada uno tendra un beans que generara el HTML dinamico, de la siguiente forma:

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

27

Capitulo V NetBeans 6, Herramientas para Diseo de Software

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

28

Entorno de TrabajoEl entorno d trabajo NetBeans esta compuesto de las siguientes partes:

Menu Principal Barra de Herramientas

Fichas de Proyectos, Archivos y Servicios

Navegador de Clases, Metodos y Archivos

Area de trabajo

Salida de eventos

Entonces tenemos las siguientes areas: Menu Principal: para manejar cada parte del NetBeans ya sean proyectos, herramientas, sistema de versiones, ventanas, ayuda, etc. Barra de Herramientas: atajos para crear, abrir y guardar proyectos, copiar y pegar elementos, compilar y ejecutar, etc. Fichas de Proyectos, Archivos y Servicios: lugares donde podemos ver en forma de arbol las diferentes partes que componen una aplicacin, los servidores disponibles y archivos que tengamos. Navegador de Archivos: podemos ver cada una de las partes que componen un archivo, por ejemplo si es una clase, podemos ver los metodos, sus atributos. Salida de Eventos: siempre que realizemos inicio de un servidor, ejecucion y compilacion de archivos, veremos su detalle en esta ventana.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

29

Creacion aplicacin EAR (W AR+EJB)Para la creacion de una aplicacin J2EE, debemos presionar en el menu FILE y seleccionar NEW PROJECT.

Cuando estemos en el seleccionamos ENTERPRISE y luego en la lista derecha ENTERPRISE APLICATION.

Presionamos Siguiente (NEXT) y ahora debemos colocarle nombre a nuestra aplicacin, nos saltaremos el agregar el servidor JBOSS, ya que este se detallo en el manual de instalacion de la estacion de trabajo. En esta parte deberemos sealar un nombre de aplicacin, le colocaremos AplicacionPrueba

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

30

Seleccionamos el servidor de aplicaciones, en este caso JBOSS 4.0.4, y en la parte inferior apareceran los nombres de los modulos EJB y WAR.

Cuando estemos listos, pinchamos FINISH, y en las fichas de trabajo apareceran los tres modulos de la aplicacin.

En ellos se crean los siguientes archivos, de los cuales los mas importantes son:

Enterprise Beans: almacena todos los beans creados. Configuration Files: Archivos de Configuracion. El manejo del archivo jboss.xml debe ser tratado con cuidado ya que cualquier modificacion en el afecta totalmente a la aplicacin, se debe cuidadar la duplicidad de propiedades en el ya que tambien muchas veces se genera codigo extra. Source Packages: Contiene todos los paquetes creados, incluidos los codigos de los EJB. Libraries: Aca son almacenados todas las librerias externas que ocupemos, por ejemplo la librera JDBC para las conecciones a la Base de datos. (driver JDBC)

De igual forma tenemos Archivos para el modulo WAR, que contendran toda la logica de interfaz USUARIO-APLICACION

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x De este modulo tenemos los siguientes items:

31

Web Pages: contiene todos los archivos de la capa web, imagenes, archivos HTML, archivos JSP.

Configuration Files: archivos de configuracion como los del modulo EJB, se deben tratar con cuidado igual que los anteriores.

Source Packages: contiene toda la logica de programacion como Servlets, paquetes de aplicaciones como clases, etc.

Libreries: librerias externas, notese se que ha agregado el modulo EJB como una librera.

Agregar Driver de Coneccion a una Base de Datos PostgreSQLPara poder realizar este paso deberemos descargar el driver de PostgreSQL de la pagina oficial http://www.postgresql.org/download/ o directamente entramos al sitio http://jdbc.postgresql.org/ (Esta parte se encuentra detallada instalacion de la estacion de trabajo) de igual forma en el manual de

www.postgresql.org/download/ (seleccionar JDBC Driver)

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x jdbc.postgresql.org (seleccionar el driver JDBC 2 EE para la version 8.0)

32

Cuando ya tengamos el driver descargado, nos vamos a la ficha Services de la barra lateral izquierda, y expandimos el icono DATABASES

En el tendremos las siguientes opciones

Pinchamos con el boton derecho y seleccionamos NEW DRIVER:

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

33

Ahora deberemos buscarlo y agregarlo para ello pinchamos el boton ADD y lo buscamos en el directorio donde fue descargado.

Cuando ya este seleccionado presionamos OK Y el driver deberia haber sido agregado, podemos verificarlo expandiendo el nodo Drivers del servicio DATABASES

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

34

Herramienta para manejo de base de datosLo primero es agregar una nueva coneccion a una base de datos, Para ello pinchamos con el boton derecho sobre el driver agregado, en este caso PostgreSQL y seleccionamos Connect Using.

Luego deberemos darle la direccion de la base de datos, ingresar nuestro nombre de usuario y contrasea

Seleccionamos la ficha Advanced para seleccionar el esquema con el que deseamos trabajar, que en este caso es public, para ello pinchamos el boton GET SCHEMAS y seleccionamos en el combo de al lado public.

Ahora ya estamos listos para comenzar a a realizar operaciones con la base

de datos.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

35

Crear una tablaAhora que hemos creado la conexin a la base de datos, podremos ver tres carpetas cada una representa los tres elementos a los que tenemos acceso, sin embargo no podemos crear Procedimientos (carpeta Procedure) ya que NetBeans no trae soporte para ellos, pero si tablas y vistas.

Para agregar una tabla debemos pinchar con el boton derecho sobre la carpeta TABLES y seleccionar la opcion CREATE TABLE, nos aparecera esta ventana donde debemos agregar cada uno de los campos de nuestra tabla, seleccionar tipo de dato tipo de campo y tamao en el caso de los tipo varchar.

Para esta prueba crearemos una tabla llamada tabla_prueba, con los campos que aparecen aca abajo

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

36

Cuando esten todos los cambios agregados presionamos el boton OK y estara lista, cuando se genere se agregara el icono de esta a la carpeta TABLES.

Ahora crearemos otra siguientes campos

tabla

para

relacionarla

con

la

tabla_prueba

con

los

Cuando se genereren las dos tablas, las veremos en nuestra ficha de conexiones

Ahora deberemos crear la clave foranea de la tabla tabla_pruebas con codigo SQL.

datos_tabla_prueba

hacia

la

Ejecutar codigo SQLPara ejecutar codigo SQL debemos pinchar con el boton derecho sobre la carpeta TABLES con el boton derecho y seleccionar EXECUTE COMMAND, con esto se nos abrira un area de trabajo para ejecutar instrucciones SQL, solo es posible ejecutar una o varias instrucciones seguidas no por parte o por seleccin ya que al escribir varias las ejecuta de forma secuencial, hay que tener especial cuidado. Entonces tenemos el area de trabajo y la ventana OUTPUT donde veremos los resultados de cualquier tipo de consulta que realizemos

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

37

Asi ahora ejecutaremos el codigo para crear la clave foranea de la tabla datos_tabla_pruebas y para ingresar un dato a cada una para posteriormente crear una vista. El icono .ejecuta el codigo.

Cuando sea ejecutado en la ventana OUTPUT (barra lateral izquierda) podemos ver la clave agregada a la table expandiendo el icono FOREIGN KEYS de la tabla datos_tabla_pruebas

Ahora borramos el codigo ke ejecutamos para que no sea ejecutado nuevamente y creamos los codigos para ingresar un dato a cada uno de las tablas Ingresa dato a la tabla_prueba

Ingresa dato a datos_tabla_pruebas

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

38

Cuando esten ingresados realizamos un select a cada una de las tablas para verificar que esten ingresadas.

Como ya tenemos por lo menos un dato ingresado a cada uno, deberemos hacer una vista para ver los datos de ambas tablas que estan relacionados.

Crear una vistaPara ello tenemos dos formas de hacerla, la primera es con codigo, y la segunda es con el editor de consultas. Para la primera debemos solamente hacer click con el boton derecho sobre la carpeta VIEWS y seleccionar CREATE VIEW e ingresar el nombre de la vista y su respectivo codigo sql.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

39

Crear una consulta con el editorPara realizar una consulta con el editor basta con presionar con el boton derecho sobre cualquiera de las tablas, y seleccionar DESIGN QUERY, a continuacion nos abrira una ventana donde aparecera la tabla seleccionada solamente debemos seleccionar los campos que deseamos mostrar e ir editando sus parametros como orden, condiciones, etc. En este caso pinchamos sobre datos_tabla_prueba y deleccionamos la opcion antes nombrada (DESIGN QUERY).

Si deseamos agregar otra tabla, como tabla_pruebas, pinchamos con el boton derecho en el area blanca al ado del cuadro de la tabla datos_tabla_pruebas y seleccionamos ADD TABLE donde agregamos la tabla_pruebas, cuando se agregue aparecera una linea que muestra la relacion entre ambas tablas.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

40

Cuando hallamos seleccionado los campos de seamos debemos ejecutar la consulta presionando con el boton derecho en el area blanca y seleccionar RUN QUERY, en el caso de enviar algun error bastara solamente con copiar el codigo que ha sido creado y pegarlo en una nueva area de trabajo, o editor de codigo SQL, para probarla, y luego si deseamos convertirla en vista, solo escribimos al inicio de la consulta CREATE VIEW AS.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

41

Agregar Modulo UMLPara la creacion de espacio de trabajo UML, debemos presionar en el menu FILE y seleccionar NEW PROJECT.

Luego seleccionar la Categoria UML y seleccionar Plataform-Independent Model. y Luego presionamos NEXT.

Luego, escribimos el nombre de nuestro modulo principal que almacenara todos los diagramas, y pinchamos en FINISH

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

42

Luego nos pedira, seleccionar un tipo de Diagrama, nosotros nos centraremos en los siguientes: Diagrama de Casos de Uso (Use Case Diagram) Diagrama de Clases (Class Diagram) Modelo de Analisis (Class Diagram, se utiliza para estos) Diagrama de Secuencia (Sequence Diagram)

Le colocamos el nombre, y presionamos Finish:

Cuando se genere el modulo veremos los tres items en los que se almacenaran los modelos. Principalmente Model que es el encargado de manejar todos los elementos agregados. Cabe sealar que no pueden repetirse los nombres de, por ejemplo, Clase, Actores, ya que los almacena todos en un mismo lugar, por lo que si en algun momento los necesitamos en otro modelo, bastara solo con tomarlos y arrastrarlos al area de trabajo.

En el area de trabajo, tenemos las mismas herramientas de un editor como el Visual Paradigm, donde podremos aumentar el tamao del zoom, mover los objetos, convertir el modelo en imagen, ver una vista previa, etc.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

43

Creacion Modelo Caso de uso sPara la creacion de un modelo de casos de Uso, creamos un nuevo modelo, solo clic derecho sobre el modulo principal que en este caso llamamos DiagramasUML, y seleccionamos NEW y luego DIAGRAM.

Luego seleccionamos USE CASE DIAGRAM, colocamos el nombre y presionamos FINISH.

Cuando trabajamos con modelos de casos de uso, tendremos la siguiente paleta con herramientas, donde, los principales son: Use Case Actor Extend Include Association : : : : : que dibuja el circulo representativo del caso de uso. dibuja un actor participante en el modelo. que dibuja un desde uno de los casos a otro. que dibuja un hacia otro caso de uso. asocia cada caso de uso que queramos con el actor.

Y la herramienta Comment para escribir comentarios en el modelo.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

44

A modo de ejercicio agregamos creamos un modelo que contenga los siguientes casos de uso, con un actor llamado PROFESOR: Agregar Alumno Eliminar Alumno Modificar Alumno Listar Cusos Administracion Alumnos

Luego pinchamos la herramienta ASSOCIATION y pinchamos el caso de Uso ADMINISTRACION ALUMNOS y al Actor en este caso PROFESOR, y se generara la linea que los conecta a ambos.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x Para agregar una extension, seleccionamos la herramienta Extend.

45

Pinchamos desde Agregar Alumno a Administracion Alumnos. Lo mismo hacemos con los demas y para los lo hacemos de la misma forma.

Creacion Diagramas de ClasePara la creacion de un modelo de casos de Uso, creamos un nuevo modelo, solo clic derecho sobre el modulo principal que en este caso llamamos DiagramasUML, y seleccionamos NEW y luego DIAGRAM.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x Y seleccionamos CLASS DIAGRAM.

46

Su paleta de herramientas, contiene los siguientes elementos principales: Class, para crear una clase. Association, para crear una relacion entre dos clases.

Las herramientas en si no son muy complicadas de utilizar asi que se recomienda explorarlas. Para el modelo de analisis, debemos crear tambien un Diagrama de Clases, ya que es el unico que trae las herramientas para hacerlos.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

47

Ahora dibujaremos una clase en el espacio de trabajo y le llamaremos ALUMNO, para esto hacemos doble clic en el nombre que coloca por defecto UNNAME, luego pinchamos con el boton derecho sobre Attribute y colocamos Insert Attribute. Los atributos se ingresan con el formato VARIABLE : TIPO_DATO, por ejemplo para ingresar una variable de tipo STRING, lo hacemos como PALABRA : String. Ingresamos los siguientes atributos: Nombre, tipo String Apellido Paterno, tipo String Apellido Materno, tipo String Edad, tipo entero

Para ingresar un metodo seleccionamos sobre la palabra Operations con el boton derecho y seleccionamos Insert Operation. El formato para ingresar los metodos es METODO(variable1:tipo, variable2:tipo, .....)

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x A modo de ejercicio crearemos una clase alumno con los siguientes atributos. Nombre, String Apellido Paterno, String Apellido Materno, String Edad, Entero Rut, Entero

48

Ademas ingresaremos los siguientes metodos. Agregar, con los parametros del alumno. Modificar, con los paremtros del alumno Eliminar, con solo su rut Listar Curso, con solo un idcurso, que sera de tipo entero.

Finalmente deberiamos tener algo asi:

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

49

Creacion Modelo de AnalisisPara crear un modelo de analisis, como se dijo anteriormente se debe crear un diagrama de clases, nos movemos con el scroll y bajamos hasta las herramientas que nos serviran para llevar acabo este diagrama.

La mecanica para hacer este tipo de modelo es la misma que en los casos anteriores, seleccionamos la herramienta y la dibujamos en el espacio de trabajo. A modo de ejercicio, crearemos uno con los siguientes elementos. Interfaz, ERROR DE REGISTRO Interfaz, REGISTRO USUARIO Interfaz, LOGIN USUARIO Proceso, REGISTRO AUTENTIFICAR Proceso, AUTENTIFICAR USUARIO Entidad, Usuario. Actor, Usuario

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x Ahora seleccionamos correspondientes la herramienta Association, y pinchamos cada elemento

50 sus

Asociaremos,

Registro de Usuario con, Error de Registro y Registro Usuario. Autentificar Usuario con Login Usuario. Usuario con Registro y Autentificar.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

51

Creacion Modelo de SecuenciaPara crearlo se hace de la misma forma que los anteriores, pero seleccionaremos SEQUENCE DIAGRAM.

Para aprender a ocupar estas herramientas, hay que tener un poco de paciencia, ya que es un poco complicada de utilizar, para ello crearemos un diagrama de secuencia para un tablero de agedrez, basico en el que veremos el flujo cuando un jugador mueve una pieza y se verifica si es correcta en el lugar que esta o no. Para ello lo primero es dibujar al actor Jugador, seleccionamos la herramienta y la dibujamos en el area de trabajo.

Deberiamos dejarlo mas menos de la siguiente forma, si se fijan coloca dos puntos delante del nombre del actor, es porque NetBeans pide una especie de nombre de aplicacin y de secuencia, no es necesario colocarlo.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x Para agregar una secuencoa seleccionamos la herramienta LifeLine

52

Agregaremos tres secuencias llamadas: Interfaz Usuario TableroReglas AlgoritmoJuego

NOTESE QUE NO HAY ESPACIO ENTRE PALABRAS para que cuando pasemos este modelo codigo, no genere error. Mas o menos deberia quedar asi.

Alternativamente, agregaremos un comentario que diga que significa AJ, que en este caso es Ajedrez. para identificar la aplicacin que esta en juego.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x Ahora generamos los eventos de cada secuencia, para mensaje directo entre una y otra pinchamos la herramienta Asynchronous Message

53

Y pinchamos en la linea punteada de la primera secuencia a la segunda, en este caso desde Jugador a InterfazUsuario.

Para colocar el mensaje, seleccionamos sobre la flecha de mensaje con el boton derecho la opcion LABELS y luego SHOW MESSAGE NAME

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x Nos colocara un mensaje por defecto, hacemos doble clic sobre para cambiarlo:

54

Y le llamaremos 1. Mueve Pieza, posteriormente agregamos otro desde InterfazUsuario a TableroReglas llamado 1.1 Mueve Pieza

Asi creamos un modelo como el siguiente. para el mensaje a una misma secuencia (1.1.1 Es valido?, utilizamos la herramienta MESSAGE TO SELF.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

55

Exportar a Imagen cada ModeloBastara solamente con pinchar el boton indicado en la barra de herramientas del area de trabajo.

Generacion de Codigo a partir de los ModelosPara generar el codigo de nuestro modulo completo, pinchamos en el modulo principal con el boton derecho y seleccionamos GENERATE CODE.

Luego seleccionamos el Modulo de la aplicacin J2EE al que enviaremos el codigo, en este caso bastara solo con el modulo WAR, y seleccionar a que lugar de esta lo generaremos (en el caso de tener varios paquetes), esto dependera de lo que estemos haciendo.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

56

Como seleccionamos SOURCE PACKAGES lo envio a ese lugar en un solo paquete. en este caso tradujo el diagrama de secuencia y el diagrama de clases que habiamos creado llamado Alumno.

Podemos observar el codigo generado, por ejemplo de la clase alumno, haciendo doble clic en ella.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

57

Ingenieria InversaPara las pruebas de Ingenieria inversa, crearemos una clase sencilla, para ello pinchamos con el boton derecho sobre SOURCE PACKAGES en nuestro modulo WAR, seleccionamos NEW y luego JAVA CLASS.

Ahora le colocaremos Calculadora tanto al nombre de clase (CLASS NAME) y al de paquete (PACKAGE).

Una vez creada la clase, hacemos doble clic en ella y se nos abrira el espacio de trabajo, para editar el codigo.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

58

En este caso crearemos metodos para una calculadora que recibe dos atributos para cada uno. De la siguiente forma:

Cuando terminemos de digitar todos los metodos, bastara solamente con presionar con el boton derecho sobre la clase en la ventana de proyectos y seleccionar REVERSE ENGINEER

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

59

Ahora nos consultara si queremos crearlo usando un modulo o projecto UML existente, o en uno nuevo, para este caso crearemos un nuevo projecto UML y le daremos un nombre, siempre genera uno por defecto que lo relaciona con la aplicacin asociada.

Observaremos en el modulo creado, que solamente genero la clase, pero no el modelo, para esto creamos un nuevo diagrama, presionando con el boton derecho sobre el icono principal y seleccionamos NEW y luego DIAGRAM

Creamos un diagrama de clases, cuando este generado, solamente arrastramos la clase hacia el espacio de trabajo y veremos su detalle.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

60

Para crear un modelo con Ingenieria inversa a partir de algun paquete de clases que tengamos en alguna aplicacin, creamos un nuevo proyecto y seleccionamos UML y luego REVERSE ENGINEERED JAVA-PLATAFORM MODEL.

Acontinuacion colocamos el nombre del proyecto y seleccionamos el modulo al que queremos hacerle ingenieria inversa, puede ser al EJB o al modulo WAR

Presionamos FINISH cuando estemos listo y se generara el nuevo modulo UML con todas las clases que tengamos en ese momento.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

61

Expandemos el item MODEL y veremos las clases hacia abajo y de la misma forma que agregamos la clase CALCULADORA, agregamos todas las que tengamos o necesitemos.

En este caso moveremos todas las que teniamos.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

62

Capitulo VI Aplicaciones de Ejemplo

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

63

Conocimientos NecesariosPara el desarrollo de aplicaciones J2EE, son necesarios algunos conocimientos previos que son los siguientes y deben ser averiguados por ustedes. Familiaridad con el modelo de desarrollo de 3 niveles (cliente-servidorWeb-ServidorBD) Manejo de conecciones Java a bases de datos o JDBC. Sino poseen este conocimiento les recomiendo pedir en biblioteca el libro (solo existe uno) Programacin de Bases de Datos con JDBC y JAVA Reese, George Para el desarrollo de esta aplicacin solo utilizaremos Beans BMP, ya que los CMP trabajan con DataSource lo que hace que sea un tanto mas complejo, y no es necesario, ya que el objetivo principal es aplicar las herramientas que nos permiten hacer Diseo deSoftware. HTML basico, creacion de formularios y envio de datos atravez de ellos, para los que no saben sobre envio de datos, les recomiendo leer sobre los envios por GET y POST de PHP, ya que son muy similares. JSP basico. comunicacin con clases, instrucciones IMPORT y clausulas de trabajo dentro de codigos HTML. Generacion de HTML dinamico.

Aplicacin Hola MundoPrimero cabe sealar, de que cada una de las acciones que vamos haciendo se repite en los ejemplos siguientes asi que se recomienda ir por orden. Para la creacion de nuestro conocido Hola Mundo!, lo haremos utilizando un servlet, como dijimos en los capitulos anteriores, un servlet no es mas que un programa en java que se ejecuta por medio de una pagina en JSP, y que genera contenido dinamico. Se da por echo que ya se ha leido el manual de instalacion del NetBeans donde se explica la instalacion del JBOSS y las demas herramientas. Comenzamos creando un nuevo proyecto Enterprise

Seleccionamos nuestro servidor de aplicaciones y le damos el nombre a nuestra aplicacin, en este caso HolaMundo.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x Cuando este creado veremos los siguientes tres modulos en nuestra ficha de proyectos.

64

El icono representa a la aplicacin EAR como dijimos en capitulos contiene la configuracion de la aplicacin completa. El icono representa el modulo EJB, este contiene toda la logica de negocio, los beans, conecciones a BD, etc. El icono representa el modulo WAR, que contiene toda la interfaz grafica, clases, etc.

El detalle del funcionamiento de cada uno ha sido definido en capitulos anteriores. A continuacion expandimos nuestro modulo WAR y hacemos doble clic sobre nuestro index para editarlo.

Y procedemos a editar el codigo, que nos permitira ejecutar nuestro servlet. En un inicio nos aparecera un codigo estandar, pero lo modificaremos, en el crearemos un formulario que ejecutara un servlet que llamaremos elServlet

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x Modificamos nuestro codigo y lo dejamos de la siguiente forma.

65

Notese que en el action de nuestro formulario hemos puesto el nombre del servlet que ejecutaremos.

Luego procedemos a crear nuestro servlet, de la siguiente forma, presionamos con el boton derecho sobre el icono SourcePackages, seleccionamos NEW y luego Servlet.

En la ventana que nos abrira deberemos especificar: el nombre del Servlet y el nombre del paquete al que deseamos este asociado.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

66

Le daremos los siguientes nombres. Presionamos siguiente y en la pantalla siguiente la dejamos tal cual y le damos FINISH.

Cuando se cree, veremos en la ficha de proyectos, el servlet creado con su respectivo paquete.

En el area de trabajo veremos el codigo estandar que se genera, de ellos los mas importantes son: processRequest: ejecuta el codigo del servlet. doGet: captura datos enviados por post. doPost: captura datos enviador por get.

La estrctura del process es la siguiente: recibimos por parametro los datos enviados por post y get, y out.println nos servira para ejecutar el codigo dinamico. solo debemos descomentar la parte central del try.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x Descomentamos y dejamos el codigo como sigue a continuacion.

67

Cuando este listo, compilamos y ejecutamos de la siguiente forma: clic derecho sobre el modulo principal y seleccionamos RUN.

En algunas ocaciones, tendremos problemas con las ejecuciones anteriores debido a los archivos temporales para evitar esto deberemos hacer, siempre que lo necesitemos, un Clean and Build, de la misma forma en que compilamos.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

68

En mas de una ocacion veremos el siguiente mensaje: solo presionamos OK cada vez que aparezca.

Finalmente cuando ejecutemos veremos en nuestro navegador lo siguiente:

Presionamos ejecutar y veremos nuestro servlet corriendo:

Para ejercitar el trabajo recomiendo hacer el siguiente ejercicio: Crear un formulario de datos y enviarlo a un servlet, y que este a su vez muestre todos lo datos enviados en una tabla. Pedir un numero de 1 al 10 y generar la tabla de multiplicar por medio de un servlet, mostrandola en una columna de un objeto con HTML. En general inventar problemas de enviar y recibir datos.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

69

CalculadoraEl desarrollo de este ejemplo lo haremos de dos formas: Para ambos: Crearemos un beans de sesion en la capa de negocio con las 4 operaciones (suma, resta, multiplicacion y division) y un formulario que pida dos numeros en la capa web. 1. 2. Ejecutaremos por medio de un Servlet. Ejecutaremos utilizando una clase, como un inicio a la aplicacin del patron de diseo.

Creamos una nueva aplicacin EAR a la que daremos el nombre de Calculadora:

En la capa web crearemos un beans de sesion de la siguiente forma: clic derecho sobre el item Enterprise Beans luego NEW y seleccionamos Session Bean.

Como trabajaremos con una interfaz remota, seleccionamos REMOTE y Stateless, para indicar que es un beans, remoto y sin estado.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

70

Veremos que se nos generan tres archivos en nuestro beans, la funcionalidad de cada uno fue detalla en los capitulos anteriores.

El codigo estandar que se crea para la clase beans, es la siguiente, de ellas es importante no eliminar ninguna solamente agregar, ya que son para la creacion y llamadas internas del beans por medio del contexto JNDI.

Para agregar metodos nuevos, es recomendable hacerlo de la siguiente manera ya que se generaran los codigos automaticamente y se agregaran los descriptores automaticamente a la clase remota para hacer las llamadas a los metodos de la clase. Presionamos con el boton derecho sobre el area de trabajo y seleccionamos EJB Methods y luego ADD BUSINESS METHOD.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

71

Luego nos pedira definir un nombre de funcion, un tipo de dato de retorno, y la descripcion de los parametros de entrada a la funcion. Asi agregamos un metodo llamado SUMAR que retornara un String, y que contendra dos parametros de entrada de tipo entero llamados numX y numY.

De la misma forma agregamos el resto para el metodo RESTAR, MULTIPLICAR y DIVIDIR. Y hacemos su codigo individualmente de la siguiente forma:

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

72

Cuando este listo veremos que en nuestra clase remota, cada uno de los descriptores de cada una de las funciones ha sido agregado:

Esta clase no debe ser EN LO POSIBLE no modificada ya que cualquier cambio que hagamos no reflejara lo que esta en la clase beans, asi que recomienda tener cuidado. Cuando este listo, compilamos el beans para comprobar que no tiene errores.

Ahora crearemos nuestro formulario HTML en la capa negocio de la siguiente forma:

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

73

Ahora, creamos nuestro servlet, al que definimos en el action como operaciones, este recibira los datos enviados por get y los ejecutara mediante un beans en la capa de negocio.

Le damos el NEXT y luego FINISH. Ahora que ya tenemos el servlet creado, debemos generar la llamada a la capa de negocio para utilizar nuestro beans. Para esto presionamos con el boton derecho sobre el area de trabajo y seleccionamos ENTERPRISE RESOURCES y luego CALL ENTERPRISE BEAN

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x A continuacion nos pedira seleccionar el beans al que deseamos llamar. Expandimos el modulo EJB, seleccionamos CalculadoraSB y presionamos OK.

74

Cuando presionemos OK nos generara la funcion lookUp que contendra todo el codigo necesario para crear la llamada JNDI a la capa de negocio.

Esta funcion no debe ser modificada. Luego creamos el codigo en nuestro process que recibira y ejecutara cada una de las operaciones de la siguiente forma.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

75

Como, acotacion se daran cuenta que cuando llamen a un metodo del beans, les abrira una lista con las funciones disponibles de la siguiente forma:

Esto les servira para comprobar que la coneccion JNDI se ha realizado correctamente. sucede incluso cuando llaman a una clase comun y corriente.

Esto

Finalmente compilamos y ejecutamos nuestra aplicacin EAR de la misma forma que hizimos en el ejemplo anterior (HolaMundo). Ingresaremos nuemos para probar.

Probar todas las operaciones.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

76

Para la segunda parte de ejercicio debemos crear denuevo una aplicacin EAR para hacer la coneccion ya no via servlet sino via clases. Repetimos los dos primeros pasos: crear Modulo EJB con sus respectivas funciones y crear el formulario HTML, pero esta vez no llamaremos a un servlet sino que agregaremos con un import la clase operaciones dentro del JSP, y no crearemos paginas nuevas sino que ejecutaremos dentro del mismo sitio las operaciones. Esto a fin de dar un inicio a la aplicacin del patron de diseo que deberan utilizar en sus trabajos. Entonces, la idea es que por medio de un IF ejecutemos las operaciones cada vez que se necesite y cada vez que se produzca una llamada a la misma pagina, esto es cuando ejecutamos el formulario o un link que haga referencia con el simbolo interrogacion (?) Asi creamos una nueva clase JAVA:

Con los siguientes datos:

Luego se creara la clase a la que debemos escribirle su respectivo constructor y agregar la llamada al beans que creamos en la capa negocio.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x Se genera el lookUp

77

Y luego creamos la funcion encargada de solicitar las operaciones: Cuando comenzamos a digitar el metodo, normalmente nos olvidamos del try-catch por esto en algunos caso nos indicara que es necesario agregarlo mostrando un icono al lazo izquierdo con una ampolletita, basta con presionarla y nos agregara el codigo faltante.

Finalmente deberemos tener una funcion mas o menos como esta.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x Cuando este lista, agregamos a nuestro JSP la librera que contiene la clase:

78

Y creamos el codigo del formulario: Observar las partes marcadas, que se agregan para utilizar la clase. Ejemplo Calculadora Ingrese Numeros Numero X Numero Y Operacion Sumar Restar Multiplicar Dividir Resultado:

79

De igual forma cuando creamos la clase se genera una lista con las funciones del beans, cuando llamamos a la clase, se abre un popup con la lista de funciones disponibles:

Y finalmente veremos como se ejecuta nuestra calculadora en una misma pagina sin necesidad de llamar a un servlet:

Observar como en la barra de direcciones se envian los datos al mismo index, y se ejecutan las acciones segn un ID de operacin, que definimos en nuestro codigo.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

80

La tecnica para hacer esto es definir una id diferente a cada accion, para poder identificar eventos y condicionarlos con un IF en diferentes partes de nuestro sitio. Un ejemplo de esto lo veremos con la agenda telefonica.

Agenda TelefonicaLo primero que necesitan es crear una tabla en una base de datos llamada Personas y que contenga los siguientes campos: idpersona (int) nombre (varchar) fijo (int) celular (int) email (varchar)

Ademas idntificaremos las siguientes acciones y le daremos los siguientes Ids a cada uno:

Variable idaccion idaccion idaccion idaccion idaccion

Valor Accion/Evento 1 2 3 4 5 Agregar nuevo Modificar persona Eliminar Confirma Modificacion Confirma Ingreso Persona

Descrpcion Muestra formulario de ingreso persona Muestra formulario con los datos a modificar Elimina persona de la base de datos

No se detallara el funcionamiento de cada funcion que conecta con la base de datos. El como agregar el driver de coneccion que usaremos se encuentra definido en el manual de instalacion de la estacion de trabajo. Primero comenzamos con crear una nueva aplicacin JEE, a la que llamaremos AgendaPersonas. En el creamos primero nuestro metodo de coneccion al que llamaremos useBase, que retornara un objeto de tipo coneccion:

Observaremos nos marca algunas instrucciones debido a que nos falta agregar librerias JDBC. Para agregarlas basta con pinchar las ampolletitas y seleccionar la librera que deseamos.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x Por ejemplo de la siguiente forma:

81

Despues que hemos agregado las librerias que faltan creamos los siguientes metodos de negocio:

Y en nuestra BD creamos 3 procedimientos almacenados, uno para cada opcion, menos la que genera el listado con las personas ingresadas, osea uno para: AGREGAR, MODIFICAR y ELIMINAR. Y creamos nuestro primer metodo AGREGAR:

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x Luego los demas de la siguiente forma:

82

Agregamos un metodo de negocio llamado BUSCAR antes de definir el metodo listado::

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x Definimos el metodo listado:

83

Si se desconoce el funcionamiento de algunas instrucciones se recomienda leer el libro recomendado al inicio de este capitulo sobre JDBC.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

84

Ahora creamos nuestra clase que manejara todas las conecciones con la capa negocio, generara los formularios de ingreso y modificacion,solicitara el listado con todos las personas y eliminara personas. NO OLVIDAR CREAR LA LLAMADA AL BEANS.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

85

Para nuestro index debemos crear algo como esto:

En donde ZONA DINAMICA es donde se mostraran las acciones como mostrar formularios, modificaciones y eliminaciones. Y LISTADO GENERAL mostrara las personas registradas.

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

86

Luego creamos nuestro codigo HTML que mostrara nuestro listado con personas, que nos pedira ingresar personas nuevas, modificara y eliminara datos de la base de datos:

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x

87

Finalmente compilamos y ejecutamos, deberiamos ver algo como lo siguiente:

Si presionamos el boton INGRESAR NUEVA PERSONA, veremos:

Cuando tengamos los datos presionamos INGRESAR PERSONA y nos enviara un mensaje, se actualizara la pagina y veremos lo siguiente:

Manual de desarrollo basico Plataforma J2EE en Ubuntu 7.x Probamos ingresando otra persona.

88

Y probamos eliminando la persona con ID = 2:

Y despues modificamos la persona 1:

FIN... Que J2EE Los Acompae...! xD