Mostrando entradas con la etiqueta ejercicios. Mostrar todas las entradas
Mostrando entradas con la etiqueta ejercicios. Mostrar todas las entradas
jueves, 13 de junio de 2013
Ejercicios de clase. Clase 13: creando un servicio web RESTful para consultar una base de datos.
Aprovechando la base de datos bdChat creada en un ejercicio anterior, crea un servicio RESTful mediante la opción del asistente de NetBeans para crear servicios RESTful a partir de bases de datos.
Para exponer la base de datos al servicio web sigue estos pasos:
![]() |
1. Sigue los pasos habituales para crear una aplicación web. No es necesario emplear JSF. |
![]() |
2. Vete a File>New File... y en el apartado Web Services selecciona RESTful Web Services from Database. |
![]() |
3. Añade la única tabla que habíamos creado en la base de datos bdChat (POST) y deja toda la configuración por defecto tal y como se va presentando en el asistente. |
Para probar el servicio una vez creado, sigue los siguientes pasos:
![]() |
1. Hacer clic con el botón secundario del ratón sobre el nombre del proyecto y seleccionar "Test RESTful Web Services" |
![]() |
2. En el cuadro de diálogo emergente cambia la selección a Web Test Client in Project y haz clic en el botón Browse... |
![]() |
3. Marca ServiciosRESTful y pulsa en OK. |
Ejercicios de clase. Clase 12: creando una operación de servicio web SOAP simple
![]() |
Una vez implementado el servicio se puede probar directamente desde NetBeans, aunque no tengamos un cliente todavía. |
![]() |
En el testeo podemos comprobar que el tipo y el valor de los argumenos y resultados es el correcto, además de todo el código XML de los mensajes SOAP de solicitud y respuesta. |
![]() |
La aplicación cliente invoca el servicio para calcular el cuadrado de un valor constante. |
Crea un servicio dentro de un proyecto web que implemente la operación cuadrado() para elevar al cuadrado el número real que se le pase como argumento. Despliégalo en el servidor GlassFish y después crea una aplicación de escritorio que consuma el servicio actuando como cliente. El cliente simplemente mostrará en la consola el resultado de aplicar la operación del servicio a un valor constante. Para realizar el ejercicio puedes apoyarte en la referencia visual paso a paso que te proporcionan estos dos tutoriales de ejemplo: el primero, para crear el servicio web y el segundo para construir la aplicación cliente.
Ejercicios de clase. Clase 12: definición y uso de estereotipos
Los estereotipos, básicamente, nos permiten agrupar conjuntos de anotaciones bajo otra anotación única. En la definición del estereotipo hay que indicar qué anotaciones lo constituyen y luego sólo hay que anotar las clases con el nuevo estereotipo como si, en realidad, estuviesen anotadas con todas y cada una de las anotaciones que conforman el estereotipo.
![]() |
1. El asistente de NetBeans para crear nuevos archivos permite definir rápidamente un estereotipo. |
![]() |
2. Al nombre del estereotipo se van a vincular todas las anotaciones que se incluyan en la definición del mismo. La declaración de estereotipo siempre va precedida de la anotación @Stereotype. |
![]() |
3. Los beans anotados con el nuevo estereotipo tiene una apariencia más limpia, al sustituir todas las anotaciones por un único estereotipo. |
Ejercicios de clase. Clase 12: ejemplo de definición y uso de un Interceptor Binding
Los Interceptor Bindings son un mecanismo que nos permite aplicar clases Interceptor a los métodos de los beans de un proyecto web, tal y como hemos visto para los EJB. Cuando creamos un tipo Interceptor Binding, su nombre genera una nueva anotación del tipo @nombreDelInterceptorBinding que será aplicada tanto a la clase Interceptor como a la clase del bean interferido, vinculándolas. De esta manera, el Interceptor podrá hacer pre y post procesamiento a los métodos del bean siguiendo el paradigma de la programación orientada a aspectos.
![]() |
1. Con el asistente de NetBeans podemos crear rápidamente un nuevo tipo Interceptor Binding |
![]() |
2. El la definición del tipo vamos a encontrarnos con la anotación @InterceptorBinding |
![]() |
4. Al igual que el punto anterior, hay que anotar con @LogginIterceptorBinding la clase del bean cuyos métodos van a ser interceptados por la clase Interceptor (LogginInterceptor) |
![]() |
5. En el archivo de configuración beans.xml debemos declarar los interceptores que vayamos a desplegar en el servidor. |
miércoles, 12 de junio de 2013
Ejercicios de clase. Clase 10: aplicación web de noticias (EJB Message-Driven + EJB de sesión Singleton + JPA + Servlets)
Sigue los pasos del proyecto propuesto por la documentación de NetBeans Creating an Enterprise Application with EJB 3.1 consistente en una sencilla aplicación web que permite añadir noticias (título + contenido) a un listado que se almacena en una base de datos. Asimismo, dispone de un contador para saber en cada momento el número de sesiones abiertas. La aplicación dispone de los siguientes elementos:
- Una clase de entidad NewsEntity para soportar la persistencia de las noticias.
- Un EJB Message-Driven llamado NewMessage que se encarga de leer los mensajes que uno de los servlets (PostMessage) va depositando en una cola gestionada por JMS, para luego guardarlos en la base de datos.
- Una clase abstracta AbstractFacade y una clase derivada de ella, NewsEntityFacade, que nos proporciona una instancia de EntityManager para permitir las operaciones habituales sobre la base de datos a nuestra clase entidad.
- Un EJB de sesión singleton, SessionManagerBean, que actúa como escuchador de los eventos de creación y destrucción de sesiones para mantener actualizado un contador. (Los beans de sesión singleton son una novedad en EJB 3.1 así como que se permita que este EJB esté incluido en el módulo web en lugar de situarse en el módulo EJB)
- Un servlet ListNews que genera la interfaz principal de la aplicación donde se muestra el listado de las noticias almacenadas actualmente, un enlace que nos lleva a comunicarnos con otro servlet (PostMessage) para añadir una noticia nueva y el número de sesiones abiertas actualmente.
- Un servlet PostMessage que se encarga de mostrar el formulario para que el usuario pueda enviar una nueva noticia al servidor. El modo de envío es asíncrono, agregándolo a la cola de mensajes que el EJB Message-Driven luego irá procesando.
(Puedes descargar el proyecto empleando el enlace de la propia documentación)
Ejercicios de clase. Clases 9 y 10: Ampliar la funcionalidad del chat
A partir de la solución al ejercicio anterior de implementar un chat empleando un EJB de sesión, amplía su funcionalidad habilitando en la interfaz del cliente un botón "Eliminar mensajes" que sea capaz de borrar todos los mensajes que se hayan guardado hasta ese momento en la base de datos.
Pasos:
- Inserta un nuevo botón en la interfaz gráfica del cliente para eliminar los mensajes.
- Añade a la interfaz remota un nuevo método para que el cliente pueda solicitar al EJB que vacíe la tabla de mensajes.
- El manejador del evento Action debe ahora invocar el método de la interfaz para borrar los mensajes valiéndose de la referencia al bean que ya había sido empleada con anterioridad para listar y enviar mensajes. Además limpiará el área de texto donde se visualizan todos los mensajes.
- En la clase entidad Post debe declararse una nueva consulta con nombre que permita borrar todos los registros de la tabla correspondiente.
jueves, 6 de junio de 2013
Ejercicios de clase. Clase 8: dar persistencia a los datos de un conjunto de personas.
Siguiendo el mismo esquema del ejemplo que se enlaza al final del post anterior, crea el soporte necesario para dar persistencia a los datos de una persona (Id/DNI, Nombre, Primer Apellido, Segundo Apellido y Fecha de Nacimiento). Puedes utilizar los asistentes de NetBeans para crear una aplicación CRUD JSF.
Pasos:
1. Crea una nueva base de datos. En el menú Window>Services de NetBeans podrás abrir el panel donde se visualizan las bases de datos (Databases). Haz clic con el botón derecho sobre la entrada "Java DB" dentro del apartado Databases y selecciona Create Database... Dale un nombre a la base de datos, como por ejemplo, Persona. Como nombre de usuario utiliza APP ya que es un esquema que se crea por defecto junto con la base, lo que te permitirá disponer rápidamente de acceso sin necesidad de ejecutar ninguna instrucción adicional. Añade una contraseña (en nuestro ejemplo, 123) Al pulsar el botón OK deberías ver que aparece enumerada la base de datos Persona bajo el apartado de Java DB. Además, aparecerá una entrada "jdbc:derby://localhost:1527/Persona [APP on APP]" bajo el nodo Databases.
2. Una vez creada la base de datos, proseguimos con la creación de la tabla PERSONA. Para ello vete al mencionado nodo "jdbc:derby://localhost:1527/Persona [APP on APP]" y sigue la ruta APP>Tables. Obviamente, está vacío, a la espera de que creemos nuestra primera tabla. Haz clic con el botón derecho sobre "Tables". En el menú contextual que aparece podrás optar por crear la tabla indicando una a una la especificación de sus atributos (Create table...) Otra opción es seleccionar "Recreate table..." que te permite importar un script con las sentencias SQL necesarias para su creación. Puedes descargar el script para nuestra tabla: PERSONA.grab
3. El siguiente paso es crear una entidad de persistencia Persona pero antes necesitamos un nuevo proyecto web. Podrás hacerlos desde el menú File>New Project...>Java Web>Web application. En nuestro caso, le hemos llamado "EjercicioPersona". Para crear la entidad Persona vamos a File>New File...>Persistence>Entity Classes from Database) y seguimos los pasos del asistente.
![]() |
a. Accediendo al asistente para crear entidades de persistencia a partir del esquema de base de datos. |
![]() |
c. Seleccionamos nuestra única tabla PERSONAS |
![]() |
d. Escribimos un nombe de paquete donde incluir la clase entidad. |
![]() |
e. La entidad JPA ha sido generada con éxito y aparece en el paquete especificado con anterioridad. |
4. Ya sólo queda crear toda la infraestructura de facelets para dar soporte a la interfaz gráfica y las clases que implementa el patrón DAO para manejar la entidad permitiendo todas las operaciones habituales sobre una tabla: guardar, eliminar, actualizar y buscar. Para ello, de nuevo, empleamos el asistente desde el menú File > New File...>Java Server Faces>JSF Pages from Entity Classes y seguimos todos los pasos.
![]() |
a. Accedemos al asistente para crear páginas JSF a partir de la clase entidad. |
![]() |
b. Seleccionamos nuestra única tabla PERSONA |
![]() |
d. Al finalizar el asistente, se crearán todos los nuevos componentes necesarios y ya dispondremos de una aplicación perfectamente funcional. |
5. Por defecto, todas las etiquetas y mensajes aparecerán en inglés pero éstas se hayan definidas en un archivo de propiedades "Bundle.properties" que podremos traducir. Puntualmente, algunas de ellas pueden estar definidas directamente en los atributos de los tags dentro de los facelets.
6. Asimismo, las fechas son tratadas con el patrón anglosajón en el que el mes precede al día. Conviene modificar todos los facelets donde aparezca dicho patrón.
martes, 4 de junio de 2013
Ejercicios de clase. Clase 6: "converters" y "validators" personalizados.
![]() |
El facelet inicial nos solicita una URL |
![]() |
El facelet de confirmación añade el prefijo del protocolo http:// si el marcador no lo tenía inicialmente |
Descargar ejemplo convertidor marcador URL (proyecto Netbeans para GlassFish)
![]() |
El facelet de inicio comprueba si el e-mail del formulario está bien formado |
![]() |
El facelet de confirmación valida el e-mail de entrada si es correcto. |
Descargar ejemplo validador campo e-mail (proyecto NetBeans para GlassFish)
EJERCICIO PROPUESTO:
a) Crea un convertidor que tome un número de D.N.I y, si no tiene letra, le añada la letra correspondiente.
b) Crea un validador que tome un número de D.N.I y compruebe si tiene letra al final. En caso de tenerla, se asegurará de que ésta sea la correcta.
NOTA: toma como referencia el ejemplo de código java de la wikipedia para el algoritmo del cálculo de la letra del D.N.I.
public static final String NIF_STRING_ASOCIATION = "TRWAGMYFPDXBNJZSQVHLCKE"; /** * Devuelve un NIF completo a partir de un DNI. Es decir, añade la letra del NIF * @param dni dni al que se quiere añadir la letra del NIF * @return NIF completo. */ public static String letraDNI(int dni) { return String.valueOf(dni) + NIF_STRING_ASOCIATION.charAt(dni % 23); }
![]() |
El validador se asegura de que se trata de 8 dígitos numéricos seguidos de una letra mayúscula o minúscula |
![]() |
El validador se asegura de que, en caso de añadir la letra, ésta es la correspondiente a ese número de D.N.I. |
![]() |
Si la letra no es introducida, el convertidor la añade automáticamente. |
![]() | ||||||
Si la última letra es introducida, ya sea en mayúscula o minúscula, el convertidor lo detecta y no hace ninguna transformación mientras que el validador verifica si se trata de la letra correcta. |
Suscribirse a:
Entradas (Atom)