Ir al contenido principal

Instalando Apache NetBeans 10 y configurarlo con Jakarta EE

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

RESTful... la forma más ligera de hacer WebServices (Parte 1)

Quienes hayan usado SOAP para WebService, sabrán que es bien fácil de diseñar, pero algo complicado de consumir: se necesita toda una API para construir los clientes utilizando el WSDL. Por ejemplo, para PHP se necesita de la biblioteca NuSOAP. Entonces, para lograr el concepto de "lenguaje único XML" es un dolor de cabeza. Y más aún si el cliente es tan simple como JavaScript, manejar XML de SOAP provocaría suicidos masivos... o no usar WebServices.

Además, con SOAP se permite crear un solo servicio y ponerle varios métodos. Esto puede llevar a un mal diseño del servicio ya que podría tener un servicio que haga de todo: por ejemplo, un servicio de manejo de Clientes que permita también manejar Proveedores.

RESTful es una propuesta muy interesante de Roy Fielding que permite manejar los servicios web con métodos definidos, manteniendo la simpleza del protocolo como XML, pero que cada servicio sea identificado únicamente con un solo URI.

En este post veremos cómo crear un Ser…

¿Por valor o por referencia?

Esta es una pregunta existencial para todo programador Java. Cada uno encuentra una respuesta satisfactoria. Pero ahora veremos, basándonos en el libro para Certificación SCJP 1.5 de Katty Sierra, sobre la respuesta correcta.

Contraseñas encriptadas con Java

¿Quién no ha querido encriptar texto o archivo? Hay diversas maneras para hacer eso, por ejemplo, utilizando un diccionario donde se reemplazara cada caracter por un código.. y para poder desencriptarlo se debería utilizar el mismo diccionario para revertir el proceso. Pero si el diccionario cae en manos de alguien que no queremos que lo sepa, entonces estamos en peligro.
Cuando yo programaba en pascal, mi encriptación favorita era invirtiendo los bits... pero cualquiera también puede invertir los bits y listo.
Pero ya gente experta logró algoritmos de encriptación populares. Los más conocidos: MD5 y SHA.
En este post hablaremos cómo encriptar texto, sobretodo las contraseñas, utilizando MD5 o SHA.