Creación de servicios web RestFul, con soporte a persistencia, en NetBeans.
0. Índice de contenidos.
- 1. Introducción.
- 2. Entorno.
- 3. Creación del proyecto web.
- 4. Creación de los servicios web RESTful.
- 5. Examinando todo lo generado.
- 6. Probando los servicios web.
- 7. Conclusiones.
1. Introducción
En este tutorial vamos a analizar el soporte que nos proporciona NetBeans para la creación de servicios web RESTful,
que den soporte a las operaciones típicas que se pueden realizar contra una tabla de base de datos; hablamos de un CRUD:
create, read, update y delete.
El objetivo es la creación de un proyecto web y, mediante un wizard, la generación de una serie de servicios web que den
soporte a dichas operaciones; NetBeans creará todo lo necesario para proporcionar dicho soporte y será precisamente eso, lo que
analizaremos.
En la redacción de este tutorial se da por hecho que el lector tiene experiencia en JEE, en la construcción de servicios web RESTful y está familiarizado con NetBeans IDE. En caso contrario, podéis encontrar tutoriales relacionados con estas tecnologías en adictos.
2. Entorno.
El tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil MacBook Pro 17′ (2.93 GHz Intel Core 2 Duo, 4GB DDR3 SDRAM).
- Sistema Operativo: Mac OS X Snow Leopard 10.6.1
- NetBeans 6.7.1.
- JDK 1.6.
- GlassFish v.2.
3. Creación del proyecto web.
Lo primero necesario es la creación de un proyecto web java, para ello seleccionamos File > New Project… Java Web > Web Application.
En la siguiente pantalla asignamos un nombre y una ubicación al proyecto:
En la siguiente pantalla seleccionamos el servidor en el que correrá nuestra aplicación, nosotros vamos a seleccionar la versión 2 de GlassFish:
Si no tenemos configurado el servidor, debemos seleccionar su ubicación en disco:
Y asignar la contraseña de administración para que NetBeans pueda desplegar en GlassFish, por defecto: adminadmin.
Una vez asignado el servidor podemos asignar el contexto de la aplicación web:
Por último, podemos asignar el soporte a alguno de los siguientes frameworks, nosotros no los vamos a usar.
Tras pulsar finalizar, se creará el proyecto web y deberíamos tener un proyecto con una estructura similar a la que sigue:
4. Creación de los servicios web RESTful.
Lo primero es dar al proyecto el soporte necesario para hacer uso de alguna tecnología de persistencia de datos.
En el soporte que proporciona NetBeans para realizar el CRUD a través de los servicios RESTful, estos últimos delegan
la persistencia en clases de entidad de la tecnología elegida.
Para ello, seleccionamos File > New File… Persistence > Persistence Unit
Asignamos un nombre a la unidad de persistencia, por defecto el nombre del proyecto con el sufijo PU, un proveedor
de persistencia y una fuente de datos.
Para este tutorial vamos a hacer uso del soporte por defecto de TopLink y de una base de datos de pruebas Derby que trae GlassFish, accesible a través de jndi con el datasource jdbc/sample.
El resultado es la creación de un fichero persistence.xml con la configuración seleccionada.
Ahora, con el soporte de persistencia, podemos crear lo necesario para acceder a las tablas de dicha base de datos.
Para ello, seleccionamos File > New File… Web Services > RESTful Web Services from Database
Seleccionamos una fuente de datos y las tablas elegidas para «publicar» su acceso a través de los servicios web.
Tras pulsar siguiente, se mostrará una pantalla como la que sigue, en la que se muestran las clases que se crearán y podremos asignar el paquete de las mismas.
Además de las clases de entidad, se crearán las propias clases de los servicios web y unos conversores, que examinaremos más tarde, en la siguiente pantalla podemos asignar el paquete de los mismos.
Tras pulsar finalizar, se crearán las clases necesarias y tendremos un proyecto con una estructura similar a la que sigue:
5. Examinando todo lo generado.
Las clases generadas las hemos dividido, conscientemente en los siguientes paquetes:
- com.autentia.tutorials.netBeansRestFul.persistence: contiene las dos clases de entidad anotadas con el soporte de JPA necesario para ser persistidas.
Se Generan una serie de namedQueries para poder realizar búsquedas sobre las mismas y las anotaciones de relación necesarias para vincularse. - com.autentia.tutorials.netBeansRestFul.service: contiene los servicios web generados y el servicio de persistencia
que tiene el acceso al entityManager, que da acceso a la unidad de persistencia. Se crearán dos servicios web por cada entidad,
para trabajar con el listado de entidades y con una entidad individual, y estarán anotadas con el soporte de jax-ws necesario para que los servicios
sean publicados correctamente. - com.autentia.tutorials.netBeansRestFul.converter: contiene un conversor por cada servicio web, que son quien hacen uso de los mimos. Los conversores están
anotados con jaxb y dan el soporte necesario para la serialización de ojetos a xml y viceversa. De este modo, cuando se solicita un cliente se obtiene la entidad y esta es
convertida a xml para su devolución. La conversión de xml a objeto se realiza en las modificaciones e inserciones, puesto que lo que recibe el web service es un xml
que debe ser convertido a entidad para persistirlo.
6. Probando los servicios web.
Ahora vamos a comprobar que todo lo generado funciona correctamente y, para ello, vamos a usar, también, el soporte de NetBeans.
Sobre el proyecto, pulsamos botón derecho y seleccionamos «Test RESTful Web Services», el proyecto se desplegará en GlassFish y se mostrará una página web, como la siguiente:
Desde esta página podemos realizar todas las operaciones disponibles a través de los servicios web.
- Listar clientes: seleccionando customers o accediendo a la siguiente url: http://localhost:8080/RestFulSample/resources/customers/
- Acceder a la información de un cliente: seleccionando customers > {customerId} o accediendo a la siguiente url: http://localhost:8080/RestFulSample/resources/customers/1
- Realizar las operaciones de modificación o borrado a través de las opciones que proporciona la propia página de cliente, a través de los métodos: GET, PUT o DELETE..
Además nos permite seleccionar entre xml o json.
7. Conclusiones.
Cierto que no hemos tirado una línea de código y tenemos una funcionalidad bastante completa, ahora es cuestión
de explotarla mediante el cliente adecuado, y la página web que se monta en torno a los servicios publicados nos
permite testear bastante bien los mismos.
Hemos visto el ejemplo más completo, pero NetBeans también nos permite generar servicios web en base a
entidades ya existentes, por si fuese esa vuestra casuística.
Un saludo.
Jose
Funciona de lujo, excelente tutorial.
He probado a hacer lo mismo con Hibernate y no lo consigo. Se genera bien toda la unidad de persistencia y el servicio, para al lanzar el test de prueba, y hacer un get en la interfaz da un fallo, que me parece que tiene que ver con que al servidor le falta algo.
¿Has probado con hibernate?
Como se puede modificar el webservice para que solo regrese json por que por defecto regresa un xml, cuando se tiene acceso a la URI desde el navegador
Se puede hacer este ejemplo esando como servidor Tomcat
Como puedo probar un metodo PUT
Buenos días
Caballero su tutorial me ha enseñado mucho y pues quería pedirle una consulta, cuando intento ejecutar el servicio me aparece lo siguiente:
Building jar: C:UsersahsierraDocumentsNetBeansProjectsPoder_RestdistPoder_Rest.war
Starting GlassFish Server 4.0
GlassFish Server Open Source Edition 4.1.1 (build 1) is already running and responding on administrator port
GlassFish Server 4.0 is running.
In-place deployment at C:UsersahsierraDocumentsNetBeansProjectsPoder_Restbuildweb
GlassFish Server 4.0, deploy, null, false
C:UsersahsierraDocumentsNetBeansProjectsPoder_Restnbprojectbuild-impl.xml:1046:
The module has not been deployed.
See the server log for details.
BUILD FAILED (total time: 4 seconds)
Siguiendo la ruta: C:UsersahsierraDocumentsNetBeansProjectsPoder_Restnbprojectbuild-impl.xml:1046 aparece este error
La verdad no sé como continuar, espero pueda ayudarme