Documentos de Académico
Documentos de Profesional
Documentos de Cultura
J2ee Manual
J2ee Manual
Miguel Abarca C.
Prof. Gustavo Donoso M.
Diseo de Software
Introduccion
Este 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.
INDICE
Capitulo I: Elementos de la Plataforma
Plataforma Java
Ediciones
Plataforma J2EE
5
6
7
9
9
10
10
11
11
13
14
17
18
18
19
19
21
21
22
22
24
26
28
29
31
34
41
43
45
49
51
55
55
57
63
63
69
80
CAPITULO I
Plataforma Java
Plataforma Java
En 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?.
Asi como existen versiones diferentes de programas, para la plataforma Java tambien
existen diferentes ediciones, estas son 3:
J2ME
J2SE
J2EE
1. Java 2 Plataform, Micro Edition (J2ME): Desarrollo para articulos moviles
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.
Plataforma J2EE
Ahora, 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
CAPITULO II
Arquitectura J2EE
Modelo de Capas
En 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
DESARROLLADOR
Servidor 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.
10
Modelo de 3 capas
Ahora 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 capas
En 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
Servidor Web
JSP, PHP, ASP
NEGOCIO
DATOS
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.
11
Modulo EJB
En 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)
12
13
El Contenedor o Container
Los 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.
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.
14
Modulo WAR
Este 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.
15
Y en donde entran en juego elementos como los Servlets y EJB que ya fueron detallados.
16
CAPITULO III
Elementos Aplicaciones J2EE
17
Partes de un Beans
Un beans esta compuesto de tres partes o de tres clases mejor dicho, de ellas tenemos:
Llamada:
NecesitounBeans!!
RemoteHome:Yolotengo!,lo
creoenseguida!
Remote:Necesitoelmetodo
Buscar(),ejecutalo.
Beans:Loejecutoenseguidayte
doylarespuesta.
Lamada:Gracias
Remote:Acaestala
ejecuciondeloquenecesitas.
Si observan en la ejecucion de estos pasos, en la parte final, solo la clase Remote vuelve
con la respuesta y no el Beans.
18
EJB Curso
EJB Persona
JNDI
Las busquedas de beans dentro del contenedor se hacen atravez de un metodo llamado
lookUp que se detallara como crearlo mas adelante.
EJB Persona
Base Datos
JDBC
Paquetes de Aplicaciones
Los 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.
19
20
Capitulo IV
Patrones de Diseo
21
PATRONES DE DISEO
Que 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.
22
Patrones J2EE
Con 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
maneja
los
objetos
de
negocio
23
24
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.
25
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.
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.
Capitulo V
NetBeans 6, Herramientas para
Diseo de Software
27
28
Entorno de Trabajo
El 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
29
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
30
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:
De igual forma tenemos Archivos para el modulo WAR, que contendran toda la logica de interfaz
USUARIO-APLICACION
31
de
igual
forma
en
el
manual
de
32
33
34
de datos.
35
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
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.
tabla
para
relacionarla
con
la
tabla_prueba
con
los
Cuando se genereren las dos tablas, las veremos en nuestra ficha de conexiones
datos_tabla_prueba
hacia
la
37
.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
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.
39
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.
40
41
Luego, escribimos el nombre de nuestro modulo principal que almacenara todos los diagramas, y
pinchamos en FINISH
42
Luego nos pedira, seleccionar un tipo de Diagrama, nosotros nos centraremos en los siguientes:
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.
43
Cuando trabajamos con modelos de casos de uso, tendremos la siguiente paleta con
herramientas, donde, los principales son:
Use Case
Actor
Extend
Include
Association
:
:
:
:
:
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
45
46
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.
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:
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, .....)
Nombre, String
Apellido Paterno, String
Apellido Materno, String
Edad, Entero
Rut, Entero
48
49
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.
Asociaremos,
la
herramienta
Association,
50
pinchamos
cada
elemento
sus
51
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.
52
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.
53
Ahora generamos los eventos de cada secuencia, para mensaje directo entre una y otra
pinchamos la herramienta Asynchronous Message
Para colocar el mensaje, seleccionamos sobre la flecha de mensaje con el boton derecho la opcion
LABELS y luego SHOW MESSAGE NAME
54
Nos colocara un mensaje por defecto, hacemos doble clic sobre para cambiarlo:
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.
55
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.
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.
57
Ingenieria Inversa
Para 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.
Una vez creada la clase, hacemos doble clic en ella y se nos abrira el espacio de trabajo, para
editar el codigo.
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
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.
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.
Presionamos FINISH cuando estemos listo y se generara el nuevo modulo UML con todas las
clases que tengamos en ese momento.
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.
Capitulo VI
Aplicaciones de Ejemplo
62
63
Conocimientos Necesarios
Para el desarrollo de aplicaciones J2EE, son necesarios algunos conocimientos previos que son los
siguientes y deben ser averiguados por ustedes.
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.
64
Cuando este creado veremos los siguientes tres modulos en nuestra ficha de proyectos.
icono
representa el modulo WAR, que contiene toda la interfaz grafica, clases, etc.
65
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.
66
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:
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.
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.
68
En mas de una ocacion veremos el siguiente mensaje: solo presionamos OK cada vez que
aparezca.
Crear un formulario de datos y enviarlo a un servlet, y que este a su vez muestre todos lo
datos enviados en una tabla.
69
Calculadora
El 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.
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.
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.
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.
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.
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.
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.
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.
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:
77
Se genera el lookUp
78
Cuando este lista, agregamos a nuestro JSP la librera que contiene la clase:
Y creamos el codigo del formulario: Observar las partes marcadas, que se agregan para utilizar la
clase.
<%-Document : index
Created on : 11-05-2008, 12:55:11 AM
Author
: dargo
--%>
<%@ page import="Paquete.*" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ejemplo Calculadora</title>
</head>
<body>
<% operacion operacion = new operacion(); %>
<form action="?" method="get">
<table>
<tr>
<td colspan="2">Ingrese Numeros</td>
</tr>
<tr>
<td>Numero X</td>
<td><input type="text" name="numX" id="numX"></td>
</tr>
<tr>
<td>Numero Y</td>
<td><input type="text" name="numY" id="numY"></td>
</tr>
<tr>
<td>Operacion</td>
<td>
<select name="idoperacion" id="idoperacion">
<option value="1">Sumar</option>
<option value="2">Restar</option>
<option value="3">Multiplicar</option>
<option value="4">Dividir</option>
</select>
</td>
</tr>
<tr>
<td> </td>
<td><input type="Submit" value="Realizar Operacion"></td>
</tr>
<tr>
<td>Resultado:</td>
<%
//aca definicimos la ejecucion de las acciones en el mismo JSP
String resultado="";
int idoperacion=0;
int numX=0;
int numY=0;
try {
79
idoperacion=Integer.parseInt(String.valueOf(request.getParameter("idoperacion")));
numX=Integer.parseInt(String.valueOf(request.getParameter("numX")));
numY=Integer.parseInt(String.valueOf(request.getParameter("numY")));
resultado = operacion.resultado(idoperacion, numX, numY);
} catch (Exception ex){
idoperacion = 0;
numX=0;
numY=0;
}
%>
<td><%=resultado%></td>
</tr>
</table>
</form>
</body>
</html>
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.
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 Telefonica
Lo 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
Valor Accion/Evento
Descrpcion
idaccion
Agregar nuevo
idaccion
Modificar persona
idaccion
Eliminar
idaccion
Confirma Modificacion
idaccion
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.
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:
82
83
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.
En donde ZONA DINAMICA es donde se mostraran las acciones como mostrar formularios,
modificaciones y eliminaciones.
Y LISTADO GENERAL mostrara las personas registradas.
85
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:
87
Cuando tengamos los datos presionamos INGRESAR PERSONA y nos enviara un mensaje, se
actualizara la pagina y veremos lo siguiente:
88