Introducción a Java Enterprise Edition (JEE)

¿Para qué Java EE?

  • Extiende Java SE para la creación de aplicaciones
    sobre la red con las siguientes características:
    • Larga escala
    • Multi-capas
    • Escalables
    • Confiables
    • Seguras

¿Para qué Java EE?

Fuente: Google Trends

Multicapas

  • La funcionalidad de la aplicación se separa en areas
    funcionalmente aisladas llamadas capas.
  • Cada capa ofrece servicios a sus capas superiores
  • Capas típicas:
    • Capa cliente
    • Capa media (Java EE)
      • Capa web
      • Capa de negocio
    • Capa de datos

Multicapas

Capa Web

  • Funciones
    – Generar dinamicamente contenido en varios formatos
    para el cliente
    – Obtener entradas de los usuarios y retornar resultados
    de los componentes de negocio
    – Controlar el flujo de pantallas o páginas en el cliente
    – Mantener el estado de los datos para la sesión del
    usuario
    – Realizar algúna lógica básica y mantener datos
    temporales

Capa Web

Capa Web - Servlet

import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletExample extends HttpServlet {

    private int count;
    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        getServletContext().log("init() called");
        count = 0;
    }

    @Override
    protected void service(HttpServletRequest request,  HttpServletResponse response) throws ServletException, IOException {
        getServletContext().log("service() called");
        count++;
        response.getWriter().write("Incrementing the count: count = "
        + count);
    }

    @Override
    public void destroy() {
        getServletContext().log("destroy() called");
    }
}

Ejemplo 1 - Servlet

  • Instalar Spring Tool Suite
  • Crear nuevo "Dynamic Web Project"
    • Incluir creación del web.xml
  • En la carpeta WebContent crear una nueva página index.html
  • En la carpeta src crear un nuevo servlet con los métodos init, doGet, doPost
  • Desplegarlo en el servidor

 

Nota: Observar la respuesta usando el Advanced REST Client

Ejemplo 2 Servlet

(link)

Capa Web - JSP

Capa Web - Expression Language

<%@ page import="java.io.*,java.util.*" %>
<%
String title = "User Agent Example";
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>${header["user-agent"]}</p>
</div>
</body>
</html>

Capa Web - Java Server Faces

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(name = "helloWorld", eager = true)
@RequestScoped
public class HelloWorld {
	
	public HelloWorld() {
		System.out.println("Hello World a comenzado!");
	}
	
	public String getMessage() {
		return "Hello World!";
	}
}
<!DOCTYPE html>

<html xmlns = "http://www.w3.org/1999/xhtml">
   <head>
      <title>Welcome JSF!!</title>
   </head>

   <body>
      #{helloWorld.getMessage()}
   </body>
</html>

Ejemplo - JSF

  1. Crear nuevo "Dynamic Web Project"
    • Incluir creación del web.xml
  2. Convertir a proyecto Maven (click derecho -configure... - Convert to maven project)
  3. En el archivo pom.xml incluir después de la etiqueta <name>:
 <dependencies>
   <dependency>
      <groupId>com.sun.faces</groupId>
      <artifactId>jsf-api</artifactId>
      <version>2.1.7</version>
   </dependency>
	
   <dependency>
      <groupId>com.sun.faces</groupId>
      <artifactId>jsf-impl</artifactId>
      <version>2.1.7</version>
   </dependency>
   </dependencies>  

Ejemplo - JSF

  • Modificar el archivo WebContent/WEB-INF/web.xml de la siguiente manera:
 <?xml version = "1.0" encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns = "http://java.sun.com/xml/ns/javaee" 
   xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee 
   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   id = "WebApp_ID" version="2.5">
	
   <welcome-file-list>
      <welcome-file>home.xhtml</welcome-file>
   </welcome-file-list>
	
   <!-- 
      FacesServlet is main servlet responsible to handle all request. 
      It acts as central controller.
      This servlet initializes the JSF components before the JSP is displayed.
   -->
	
   <servlet>
      <servlet-name>Faces Servlet</servlet-name>
      <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>
	
   <servlet-mapping>
      <servlet-name>Faces Servlet</servlet-name>
      <url-pattern>/faces/*</url-pattern>
   </servlet-mapping>
	
   <servlet-mapping>
      <servlet-name>Faces Servlet</servlet-name>
      <url-pattern>*.jsf</url-pattern>
   </servlet-mapping>
	
   <servlet-mapping>
      <servlet-name>Faces Servlet</servlet-name>
      <url-pattern>*.faces</url-pattern>
   </servlet-mapping>
	
   <servlet-mapping>
      <servlet-name>Faces Servlet</servlet-name>
      <url-pattern>*.xhtml</url-pattern>
   </servlet-mapping>
	
</web-app>

Ejemplo - JSF

  • Crear la Clase HelloWorld de la diapositiva 4.8, en el paquete co.edu.unicauca.
  • Crear el archivo WebContent/home.xhtml con el código de la diapositiva 4.8.
  • Correr el proyecto. Maven Install - Run on Server.

Capa Web - Etiquetas JSF

<html xmlns = "http://www.w3.org/1999/xhtml"
   xmlns:f = "http://java.sun.com/jsf/core"    
   xmlns:h = "http://java.sun.com/jsf/html">
   
   <head>
      <title>Ejemplo de etiquetas</title>
   </head>
   
   <h:body>
      <h2>h:selectManyListbox example</h2>
      <hr />
      
      <h:form>
         <h3>List Box</h3> 
         <h:selectManyListbox value = "#{userData.data}">
            <f:selectItem itemValue = "1" itemLabel = "Item 1" />
            <f:selectItem itemValue = "2" itemLabel = "Item 2" />
            <f:selectItem itemValue = "3" itemLabel = "Item 3" />
            <f:selectItem itemValue = "4" itemLabel = "Item 4" />
            <f:selectItem itemValue = "5" itemLabel = "Item 5" />
         </h:selectManyListbox>
         <h:commandButton value = "Submit" action = "result" />
      </h:form> 		
   
   </h:body>
</html> 

Capa de Negocio

  • Tecnologías
    • Enterprise JavaBeans componentes
    • Java API for RESTful Web Services (JAX-RS)
    • Context Dependency Injection (CDI)
      • Contexto: Definición de contexto que permite ligar las interacciones y los ciclos de vida de los componentes
      • Inyección de dependencias: la habilidad de inyectar componentes en una aplicación. Se puede escoger en tiemplo de despliegue cual implementación de un componente inyectar.

Capa de Datos

  • Tecnologías
    • Java Database Connectivity API (JDBC)
    • Java Persistence API
    • Java EE Connector Architecture
    • Java Transaction API (JTA)

Servidores o Contendores

JEE

By Gustavo Andrés Uribe Gómez