JSF con CDI - Parte I

SQL SERVER ORACLE MYSQL JAVA JAVAEE JDBC MVC DAO PATRONES ANDROID CDI
INTRODUCCIÓN
JavaServer Faces 2.0 define sus propias anotaciones para registrar las clases que van a ser Managed Beans. La anotación es @javax.faces.bean.ManagedBean y por lo tanto ya no es necsario especificar esta información en el archivo XML faces-config.xml.
También permite definir el ámbito de los Managed Beans y los hace accesibles desde expresiones EL.
@javax.faces.bean.ManagedBean
@javax.faces.bean.SessionScoped
public class ClaseDemo implements Serializable{ 
   ... 
}
Context and Dependency Injection (CDI) define el mecanismo para administrar beans y resolver dependencias entre servicios dentro del estándar JEE. CDI ofrece la posibilidad de inyectar componentes en una aplicación, incluyendo la posibilidad de seleccionar en tiempo de despliegue que implementación en particular se inyectara.
CÓDIGO FUENTE - EUREKA-CS-ORACLE-JDBC
En esta sección te presento un video que una aplicación CLIENTE-SERVIDOR.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.
CDI: ANOTACIONES BASICAS
Registrar una Clase
Para registrar una clase en CDI se utiliza la anotación @javax.inject.Named.
@javax.inject.Named
public class ClaseDemo implements Serializable{ 
   ... 
}
Por defecto el nombre de la instancia es el nombre de la clase con su primera letra en minúscula, pero es posible especificar otro nombre para referirnos a la instancia de la clase, tal como se muestra a coninuación:
@javax.inject.Named(value = "demoController")
public class ClaseDemo implements Serializable{ 
   ... 
}
Ambito de la Instancia
CDI permite que las instancias existan en ámbitos bien definidos. Para marcar el ámbito de una clase manejada por CDI, se utilizan anotaciones que se encuentran en el paquete javax.enterprise.context.
Los ámbitos soportados por CDI son los siguientes:
@ApplicationScoped Las instancias existen durante todo el ciclo de vida de la aplicacion. Estas instancias son globales y accesibles desde cualquier sesión HTTP.
@SessionScoped Las instancias son accesibles por todas las peticiones que ocurren durante una sesión HTTP.
@ConverstationScoped Las instancias existen durante una conversación. Una conversación esta compuesta de varias peticiones y pueden existir varias conversaciones por sesión.
@RequestScoped Las instancias solamente existen durante la peticion HTTP. Una vez que termina el ciclo de vida de la petición, también termina su contexto.
El ámbito @RequestScoped es muy común, por lo que existe una anotación que incluye las anotaciones @Named y @RequestScoped, esta anotación es:
@javax.enterprise.inject.Model
CÓDIGO FUENTE - EUREKA-WEB-ORACLE-JDBC
En esta oportunidad te presento un video donde te explico cómo ejecutar el código fuente de una aplicación Java Web, utilizando HTML, CSS, JavaScript, AJAX y JSON, en la capa de persistencia se utiliza JDBC y base de datos Oracle XE 11g.
Tú tienes acceso al código fuente de esta aplicación, después del video esta el enlace.
EJEMPLO
Descripción
En este ejemplo se desarrolla una aplicación sencilla, que sirva para ilustrar como se aplica CDI con JSF.
El caso es una aplicación que permita sumar dos números, tendremos una pagina para ingresar los números y otra para mostrar el resultado.
El IDE utilizado es NetBeans 7.4 con Glasfish 4.0.
En este ejemplo se utilizarán los siguientes recursos:
index.xhtml Página que presenta el formulario para ingresar los dos números.
result.xhtml Página para mostrar el resultado de la operación.
DemoController.java Clase java administrada por CDI.
Programación
Clase Java: DemoController
package pe.egcc.controller;

import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

/**
 *
 * @author Gustavo Coronel
 */
@Named
@RequestScoped
public class DemoController {

  private int num1;
  private int num2;
  private int suma;

  public int getNum1() {
    return num1;
  }

  public void setNum1(int num1) {
    this.num1 = num1;
  }

  public int getNum2() {
    return num2;
  }

  public void setNum2(int num2) {
    this.num2 = num2;
  }

  public int getSuma() {
    return suma;
  }

  public String doProcesar() {
    suma = num1 + num2;
    return "result";
  }

}
Página: index.xhtml
    <h:form>
<h1>SUMA DE DOS NUMEROS</h1>; <h:panelGrid columns="2"> <h:outputLabel value="Número 1:"/> <h:inputText value="#{demoController.num1}" size="5" /> <h:outputLabel value="Número 2:"/> <h:inputText value="#{demoController.num2}" size="5"/> <f:facet name="footer"> <h:commandButton value="Procesar" action="#{demoController.doProcesar()}"/> </f:facet> </h:panelGrid> </h:form>
Página: result.xhtml
    <h:form>
  
       <h1>SUMA DE DOS NUMEROS</h1>

       <h:panelGrid columns="2">
 
           <h:outputLabel value="Número 1:"/>
           <h:outputText value="#{demoController.num1}"/>
           
           <h:outputLabel value="Número 2:"/>
           <h:outputText value="#{demoController.num2}"/>

           <h:outputLabel value="Suma:"/>
           <h:outputText value="#{demoController.suma}"/>
 
           <f:facet name="footer">
               <h:commandLink value="Retornar" 
                              action="index" />
           </f:facet>
           
       </h:panelGrid>
    </h:form>
CÓDIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un video de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.