Servidor RESTful sin contenedor Java EE: Grizzly, Jersey y Maven

¿Quieres implementar un servidor RESTful sin usar GlassFish, JBoss, Tomcat, Wildfly, Payara, Jetty, WebLogic ni nada parecido? ¿y en Java sin usar Node.js?

Bueno, aquí les comparto una manera de montar de montar un servidor RESTful usando Jersey pero ejecutable desde la línea de comandos.


Jersey tiene un arquetipo en Maven que nos prepara un proyecto listo para adaptarlo a nuestra manera.

Desde la consola del sistema operativo podemos poner este comando:

  mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false -DgroupId=com.example.rest -DartifactId=restful-standalone -Dpackage=com.apuntesdejava -DarchetypeVersion=2.22.1

Y listo, tenemos preparado nuestro servidor. Nos creará una clase Main que será la única clase que estará en modo de servidor y configurará los servicios REST de nuestra aplicación.

Para crear nuestro servicio, bastará con crear una clase con la anotación @Path


Implementando base de datos

Ahora bien, haremos que nuestro servicio utilice una base de datos. Para este ejemplo usé JPA, que tranquilamente puede correr fuera de un contenedor JavaEE. Me conecté a la base de datos de ejemplo de Java DB usando el archivo persistence.xml


Pero para mi aplicación necesito agregar la biblioteca del driver de Java DB, además de las dependencias necesarias para implementar JPA.

        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>eclipselink</artifactId>
            <version>2.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
            <version>2.5.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derbyclient</artifactId>
            <version>10.12.1.1</version>
        </dependency>


Ahora, hacemos las clases necesarias para usar JPA con Base de datos. Pudieron haber utilizado el que sea como Hibernate, JDBC, el que sea. Para mi comodidad usé JPA.AH! no olvidar colocar la notación @XmlRootElement en cada objeto que van a devolver al servicio.

El servicio

Y bien, el servicio es bastante sencillo. Hice solo dos métodos: leer todos y obtener uno en base a un ID:

Ojo al Piojo, es necesario agregar una dependencia más para poder convertir los objetos obtenidos de la base de datos y convertirlo en JSON.


        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
            <version>2.22.1</version>
        </dependency>


Y listo! Funciona de maravilla.

El vídeo

¿No me creen?
Aquí el vídeo usando NetBeans

El código fuente

Y, como en todo post de este humilde blog, comparto el código bajo git.

https://bitbucket.org/apuntesdejava/restful-standalone


Comentarios

Entradas más populares de este blog

UML en NetBeans

Cambiar ícono a un JFrame

Portales en Java