Hoy vamos a hacer algo muy simple. Estos días he estado escuchando discusiones sobre que los proyectos hechos en Java EE requieren muchos ficheros, configuraciones y demás, y la verdad, es que me temo que no estoy nada de acuerdo. Quizás antiguas versiones J2EE lo requerian, pero ahora Java EE nos permite centrarnos en el negocio y la única complejidad que se añade se debe a este. Así que he decidido implementar un ejemplo muy básico con ellos para ver cuanta complejidad obtenía implementando un pequeño servicio REST sin BBDD.
Lo primero que tenemos que hacer es crear un proyecto maven en nuestro IDE favorito, en mi caso yo usaré Eclipse. Este proyecto maven será con el arquetipo básico o sin arquetipo. El contenido del fichero pom.xml sera:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.wordpress.infow</groupId> <artifactId>MostBasicJavaEEApp</artifactId> <version>1.0</version> <packaging>war</packaging> <name>MostBasicJavaEEApp</name> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <failOnMissingWebXml>false</failOnMissingWebXml> </properties> <dependencies> <!-- Java EE 7 --> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> </dependencies> <build> <finalName>basic</finalName> </build> </project>
Lo siguiente es crear el servicio REST para esto necesitamos la clase que nos configura REST en nuestra aplicación, cuyo contenido será:
package com.wordpress.infow.basic.rest; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; @ApplicationPath("/rs") public class ApplicationConfig extends Application { }
Como podéis ver, muy simple.
Y ahora creamos nuestros servicio REST:
package com.wordpress.infow.basic.rest; import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; import com.wordpress.infow.basic.boundary.BasicStuff; @Path("/sessions") public class Session { @GET public String getSession() { return "Jonh Doe"; } }
Con esto, ya podremos arrancar nuestro servidor, yo estoy usando GlassFish 4, y accediento a la URL correcta podremos ver el resultado.
Lo siguiente es añadir el servicio al que el servicio REST va a invocar e injectar este en nuestro código REST.
package com.wordpress.infow.basic.boundary; import java.util.Date; import javax.ejb.Stateless; import javax.inject.Inject; import com.wordpress.infow.basic.entity.BasicEntity; @Stateless public class BasicStuff { public String getDate() { return new Date().toString(); } }
package com.wordpress.infow.basic.rest; import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; import com.wordpress.infow.basic.boundary.BasicStuff; @Path("/sessions") public class Session { @Inject BasicStuff bs; @GET public String getSession() { return "Jonh Doe" + this.bs.getDate(); } }
Con esto ya tenemos nuestro servicio REST invocando a la lógica de negocio de nuestra aplicación, y sin un xml todavía ni nada raro.
El siguiente paso será añadir la entidad que debería conectar con la BBDD.
package com.wordpress.infow.basic.entity; public class BasicEntity { public String getStatus() { return "OK"; } }
package com.wordpress.infow.basic.boundary; import java.util.Date; import javax.ejb.Stateless; import javax.inject.Inject; import com.wordpress.infow.basic.entity.BasicEntity; @Stateless public class BasicStuff { @Inject BasicEntity be; public String getDate() { return new Date().toString() + " - " + this.be.getStatus(); } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" version="1.1" bean-discovery-mode="all"> </beans>
Vaya, aquí s’i que hemos tenido que añadir un xml para permitir al contenedor web la injección de todos los objectos.
Y ahora, vamos a… Ummm, espera, ya está todo. No necesitamos hacer nada más.
Como se ve Java EE nos deja centrarnos en la lógica de negocio y los problemas derivados de está, en vez de, en complejas configuraciones.
Podeís encontrar el código del proyecto como siempre en mi repositorio:
Nos vemos.