Java EE: Lo básico

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:

MostBasicJavaEEApp

Nos vemos.

Java EE: Lo básico

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.