Curso Java y Tecnologías J2EE [Modo de compatibilidad]_japar18

download Curso Java y Tecnologías J2EE [Modo de compatibilidad]_japar18

If you can't read please download the document

description

Curso java para principiantes

Transcript of Curso Java y Tecnologías J2EE [Modo de compatibilidad]_japar18

  • Java y Tecnologas J2EE

    WEB MASTER

    Empresa POKY

    Trabajo elaborado por el hacker el japar18

  • Contenidos I Objetivos del Curso

    Curso de introduccin al mundo de Java EE. Dirigido a:

    Desarrolladores sin experiencia en Java EE. Analistas/Jefes de Proyecto inmersos en proyectos Java EE. Cualquier profesional con nimo de conocer Java EE.

    Para saber ms: FundeWeb. Herramientas de Desarrollo Herramientas de Desarrollo

    Nociones bsicas de Eclipse. Mencin especial a otras herramientas importantes.

    Lenguaje Java Nociones bsicas de POO. Nociones bsicas de POA. Nociones bsicas de Java y novedades de Java 1.5.

    Patrones de Diseo Ideas generales de patrones de diseo. Patrones de diseo Web. El Patrn MVC.

  • Contenidos II Arquitectura Java EE

    Modelo de Capas Contenedores y Servicios Java EE Ensamblado y Empaquetado Java EE. Eclipse y Java EE.

    Tecnologas Java EE Tecnologas de la Vista: JSF y Facelets Tecnologas de la Vista: JSF y Facelets Tecnologas de Control: EJB Tecnologas del Modelo: JPA

    Tecnologas Avanzadas Java EE Servicios WEB: JAXWS Autenticacin Java EE Portlets

    El Proyecto del Curso Un peridico digital con teletipo.

  • I. Herramientas de

    DesarrolloDesarrollo

  • I. Herramientas de Desarrollo Multitud de Herramientas

    Jdeveloper, NetBeans, IntelliJ, Eclipse, La decisin es clara: Eclipse.

    Modular y ampliable mediante plugins.Modular y ampliable mediante plugins. Muy utilizada y en constante desarrollo. En realidad todas las citadas tienen gran calidad. Es la que se emplea en FundeWeb.

    No slo sirve para desarrollar Java.

  • I. Herramientas de Desarrollo 1.Menu : Incluye todas las opciones del entorno y algunos iconos de acceso directo a las ms empleadas.

    2.Perspectiva : Permite alternar entre las diferentes perspectivas que haya abiertas.

    3.Control Proyecto : Permite controlar el contenido del proyecto, los archivos que lo componen.

    4.Editor : La zona ms amplia para editar el contenido de los archivos ya sea visualmente o en modo texto.

    5.Propiedades : Utilizada en muchas ocasiones para editar propiedades del archivo editado.

    6.Control Ejecucin : Incluye todo lo necesario para controlar y monitorizar la ejecucin de nuestro proyecto.

  • I. Herramientas de Desarrollo Terminologa de Eclipse

    Espacio de Trabajo: Workspace Directorio en el que se almacenan los proyectos y configuraciones

    especficas. Se puede cambiar de espacio de trabajo de forma sencilla. Recomendacin: No tener todos los proyectos en un E T.

    Perspectivas Configuracin predeterminada de las zonas de trabaj o adecuadas para un

    tipo de tarea concreta: Proyectos Web, Swing, BBDD, etc Configuracin predeterminada de las zonas de trabaj o adecuadas para un

    tipo de tarea concreta: Proyectos Web, Swing, BBDD, etc Vistas

    Pestaas que se ubican en las zonas de trabajo y que permiten hacer tareas concretas: Editor, Console, Navigator, Server,

    Artefactos de desarrollo: Vistas que nos ayudan a editar el proyecto. Artefactos de runtime: Vistas que nos ayudan a monitorizar y testar el

    proyecto. Configuracin y Actualizacin de Eclipse

    Window >> Preferences. Podemos ampliar las funcionalidades del IDE segn nuestras necesidades. Help >> Software Updates.

  • I. Herramientas de Desarrollo Subversion.

    Eclipse incluye su control de versiones local por sesin, pero no es suficiente.

    Mediante el plugin Subclipse, se incorporan a nuestros proyectos todas las posibilidades a nuestros proyectos todas las posibilidades del control de versiones.

    Importante emplear Subversin de forma correcta:

    Liberar versiones. Emplear comentarios adecuados. Crear ramas.

  • I. Herramientas de Desarrollo Maven.

    Gestor de proyectos. Forma de compartir el conocimiento de la

    metainformacin de un proyecto.

  • I. Herramientas de Desarrollo Maven.

    Incorporar alguien a un proyecto. Sin Maven

    Instalacin del software. Descarga de fuentes. Descarga de fuentes. Descarga de libreras. Configurar la herramienta para compilar y ejecutar.

    Con Maven Instalacin del software. Descarga de fuentes. Ejecucin de tarea maven.

  • I. Herramientas de Desarrollo Hudson.

    Servidores de integracin contnua. Todas las fases de generacin de mi proyecto automa tizadas. No necesito personas supervisando tareas automticas.

    Repositorio Desarrollador

    Servidor de Integracin Contnua

    Repositorio Subversion

    Desarrollador1. Commit

    2. Update4. Resultados de la Fase de Test

    3. Rehace el Proyecto con Maven

  • I. Herramientas de Desarrollo Prcticas I

    Introduccin a Eclipse Crea un proyecto Java. Crea dos clases. Cambia la perspectiva entre Java y Resource.

    Perspectivas Perspectivas Modifica las vistas que aparecen en la perspectiva Resource. Elimina la vista Project Explorer. Incluye la vista Navigator y Package Explorer. Incluye la vista Problemas. Restaura el estado original de la perspectiva.

    Configuracin Modifica aspectos generales del editor, colores, tipos de

    letra, etc Amplia la funcionalidad de eclipse con algn plugin.

  • I. Herramientas de Desarrollo Crea un proyecto Java.

  • I. Herramientas de Desarrollo Crea dos clases Java.

  • I. Herramientas de Desarrollo Instalar un Plugin: Subversion.

  • I. Herramientas de Desarrollo Prcticas II

    Gestin de Proyectos Modifica las clases Java: Crea un Hola Mundo. Compara ambas clases. Incluye tareas pendientes en ambas clases. Visualiza las tareas pendientes. Visualiza las tareas pendientes.

    Ejecucin de Proyectos Ejecuta alguna de las clases creadas. Incluye puntos de ruptura. Observa las posibilidades del Debug.

    Compartir Proyectos Comparte tu proyecto en un repositorio. Descarga un proyecto desde el repositorio.

  • I. Herramientas de Desarrollo Gestionar Proyectos.

  • II. Lenguaje JavaJava

  • II. Lenguaje Java Definicin:

    !!" # $"%

    " " &

  • II. Lenguaje Java Programacin Orientada a Objetos

    Conceptos de Diseo Clase

    Definicin de propiedades y comportamiento de un tipo. Objeto

    Instancia de una clase, dispone de unas propiedades Instancia de una clase, dispone de unas propiedades concretas.

    Mtodo Algoritmo asociado a un objeto que se lanza tras recibir un

    mensaje. Atributo

    Contenedor de un tipo de dato asociado a un objeto. Notacin punto.

    Mensaje Comunicacin dirigida a un objeto. Notacin punto.

  • II. Lenguaje Java Programacin Orientada a Objetos

    Sintaxis en Java

    public class Triangulo {

    // Propiedades del tringulo

    public int base;

    public int altura;

    // Mtodos del tringulo

    public float area() { return (base*altura)/2; }

    }

    // Ejemplo de Uso

    Triangulo t = new Triangulo();

    t.Altura = 10; t.base = 2;

    System.out.println(Area: +t.area());

  • II. Lenguaje Java Programacin Orientada a Objetos

    Conceptos de Anlisis Abstraccin

    Caractersticas esenciales del objeto.

    Ocultacin Exponer una interface.

    Encapsulamiento Aumentar la cohesin.

    Polimorfismo Comportamientos diferentes asociados a objetos diferentes

    pero con igual nombre.

    Herencia Las clases se relacionan a travs de una jerarqua.

  • II. Lenguaje Java Programacin Orientada a Objetos

    Anlisis en Java

    Figuraabstract float area();

    Triangulofloat area();

    Cuadradofloat area();

  • II. Lenguaje Java Programacin Orientada a Aspectos

    Conceptos Bsicos Aspect

    Funcionalidad transversal a implementar. Join Point

    Punto de la ejecucin donde puede conectarse un asp ecto. Advice

    Implementacin del aspecto. Implementacin del aspecto. Pointcut

    Define los aspectos a aplicar en cada Join Point. Introduction

    Permite aadir mtodos o atributos a clases ya existentes. Target

    Clase a la que se aade el aspecto. Proxy

    Objeto creado despus de aplicar el aspecto. Weaving

    Proceso de aplicar aspectos a los objetos.

  • II. Lenguaje Java Programacin Orientada a Aspectos: AspectJ

  • II. Lenguaje Java Programacin Orientada a Aspectos

    Interceptores en Java Una de las formas en las que podemos encontrar

    este tipo de programacin es con los interceptores.interceptores.

    Ciertos objetos disponen de un ciclo de vida. Interceptando este ciclo podemos aadir

    funcionalidad sin modificar el cdigo del objeto. Ejemplo: Auditar los accesos a una aplicacin.

    Se puede hacer interceptando el ciclo de vida de las sesiones del servidor.

    Aadiendo esta funcionalidad en el evento de creacin.

  • II. Lenguaje Java Plataforma Java

    Lenguaje: Veremos sus caractersticas. JVM: Mquina virtual. API: Biblioteca de libreras.

    Ediciones Ediciones Java ME: Micro Edition. Java SE: Standart Edition. Java EE: Enterprise Edition.

    Desarrollo vs Ejecucin JSDK: Kit de desarrollo. JRE: Kit de runtime.

  • II. Lenguaje Java Elementos del Lenguaje

    package curso.ejemplos;

    import curso.interfaces.Dibujable;

    public class Cuadrado extends Figura implements Dibujable {

    Package, Clase Herencia, Implementacin

    private int lado;

    public void dibujar() { }

    }

  • II. Lenguaje Java Elementos del Lenguaje

    Variables Tipos primitivos: char, byte, short, int, long, float,

    double y boolean. Objetos y Arrays. Objetos y Arrays. El mbito marcado por los bloques { }. Accesibilidad: public, protected, private. Ejemplos de declaracin:

    int x; int y=1; Clase c; Clase d = new Clase(); int [] array; int [] array = {1,2,3,4}; Clase [] array = new Clase[] {c,d};

  • II. Lenguaje Java Elementos del Lenguaje

    Operadores Aritmticos: +, -, *, /, % Asignacin: =, += , -=, *=, /=, %=. Incrementales: ++, --. Relacionales: >, >=, =, ,

  • II. Lenguaje Java Elementos del Lenguaje

    Excepciones Control de errores dentro del propio lenguaje. Implcitas: RuntimeException.

    Generadas por errores de programacin.

    Explcitas: Resto de Exception. Explcitas: Resto de Exception. El compilador obliga a chequear estas excepciones.

    public void ejemplo (String n, String c) throws Exception {

    try {

    int num = Integer.parseInt(n);

    Class.forName(c);

    } catch (NumberFormatException nfe) { throw nfe; }

    catch (ClassNotFoundException cnfe) { throw cnfe; }

    finally { }

    }

  • II. Lenguaje Java Elementos del Lenguaje

    Multithreading Capacidad de ejecucin en paralelo. Extender Thread o Implementar Runnable.

    Arranque y Parada. Suspender y Reanudar. Suspender y Reanudar.

    public class HiloThread extends Thread {

    public void run() {

    for (int i=0;i

  • II. Lenguaje Java Elementos del Lenguaje

    Multithreading Comunicacin entre hilos.

    public class Productor extends Thread {

    private Contenedor contenedor;

    public Productor (Contenedor c) { contenedor = c; }

    public class Consumidor extends Thread {

    private Contenedor contenedor;

    public Consumidor (Contenedor c) { contenedor= c; }

    public class ProductorConsumidorTest {

    public static void main(String[] args) {

    Contenedor c = new Contenedor ();

    public class Contenedor {

    private int dato;

    private boolean hayDato = false ;

    public void run() {

    for (int i = 0; i < 10; i++) {

    contenedor.put(i);

    System.out.println("Productor. put: " + i);

    try { sleep((int )(Math.random() * 100)); } catch (InterruptedException e) { }

    }

    }

    }

    public void run() {

    int value = 0;

    for (int i = 0; i < 10; i++) {

    value = contenedor.get();

    System.out.println("Consumidor. get: " + value);

    }

    }

    }

    Contenedor c = new Contenedor ();

    Productor produce = new Productor (c);

    Consumidor consume = new Consumidor (c);

    produce.start();

    consume.start();

    }

    }

    public synchronized int get() {

    if (!hayDato) { try { wait(); } catch (InterruptedException e) { } }

    hayDato = false ;

    notifyAll();

    return dato;

    }

    public synchronized void put(int valor) {

    if (hayDato) { try { wait(); } catch (InterruptedException e) { } }

    dato = valor;

    hayDato = true ;

    notifyAll();

    }

    }

  • II. Lenguaje Java Elementos del Lenguaje: Novedades Java 1.5

    Tipos Parametrizados Vector v = new Vector(); String s = v.elementAt(0); // No requiere casting.

    Autoboxing Vector v = new Vector(); v.addElement(30); // No requiere conversin int In teger.

    Bucles Simples Vector v = new Vector(); Vector v = new Vector(); for (String c: v) System.out.println(c);

    Tipo enum enum EstadoCivil { soltero, casado, divorciado }; EstadoCivil ec = EstadoCivil.casado;

    Import Esttico import static java.lang.Math; double raiz = sqrt(1245);

    Argumentos Variables public void miFunc(String p1,int args) { for (int i:args) { } }

    Metainformacin Anotaciones p.e. @Override.

  • II. Lenguaje Java Prcticas I

    Crea un proyecto Java: Calculadora. Crea una calculadora para las 4 operaciones

    bsicas. Como interface usaremos los argumentos de

    entrada. java Calculadora 3 * 5

    Maneja las excepciones oportunas.

  • II. Lenguaje Java Crea un proyecto Java: Calculadora.

    public class Calculadora {

    public static void main(String[] args) {try {

    double resultado = 0;switch (Calculator.aOperador(args[1])) {

    case suma: resultado = Calculator.suma(args[0],args[2]); break;

    case resta: resultado = Calculator.resta(args[0],args[2]); break;

    public class Calculator {

    public static enum Operador { suma , resta, multiplica, divide };public static double suma(String a,String b) throws CalculatorError {

    try { return Double.parseDouble(a)+Double.parseDouble(b); } catch (Exception ex) { throw new CalculatorError("CalculatorError: "+ex.getMessage()); }

    }public static double resta(String a,String b) throws Exception {

    return Double.parseDouble(a)-Double.parseDouble(b);}public static double multiplica(String a,String b) throws Exception {

    public class CalculatorError extends Exception {public CalculatorError(String msg) { super (msg); }

    }

    resultado = Calculator.resta(args[0],args[2]); break;case multiplica:

    resultado = Calculator.multiplica(args[0],args[2]); break;case divide:

    resultado = Calculator.divide(args[0],args[2]); break;}System.out.println(args[0]+" "+args[1]+" "+args[2]+" = "+resultado);

    } catch (Exception ex) {ex.printStackTrace();

    }}

    }

    public static double multiplica(String a,String b) throws Exception {try { return Double.parseDouble(a)*Double.parseDouble(b); } catch (Exception ex) { System.out.println("CalculatorError en Multiplica."); throw ex; }

    }public static double divide(String a,String b) throws NumberFormatException {

    try { return Double.parseDouble(a)/Double.parseDouble(b); } catch (NumberFormatException nfe) { throw nfe; }

    }public static Operador aOperador(String op) throws CalculatorError {

    if (op!=null ) {if (op.toLowerCase().equals("mas")) return Operador.suma;if (op.toLowerCase().equals("menos")) return Operador.resta;if (op.toLowerCase().equals("por")) return Operador.multiplica;if (op.toLowerCase().equals("entre")) return Operador.divide;

    }throw new CalculatorError("CalculatorError: Operador incorrecto.");

    }}

  • II. Lenguaje Java Prcticas II: El diario digital.

    La prctica global del curso consiste en la creacin de un Diario Digital.

    El Diario es un simple listado de noticias, y cada noticia pertenece a una categora.cada noticia pertenece a una categora.

    La portada del Diario estar formada por las noticias de ltima hora (novedades).

    Las noticias se componen de un ttulo, una fecha y el contenido.

    Crea las clases que creas necesarias y una sencilla interface para testarlas.

  • II. Lenguaje Java Prcticas II: El diario digital.public class Noticia {

    private int codigo;private String contenido;private Date fecha;private boolean portada;private String titulo;private Categoria categoria;

    public Noticia() { }

    public class Categoria {private int codigo;private String nombre;private List noticias;

    public Categoria() { }public int getCodigo() { return this .codigo; }public void setCodigo(int codigo) { this .codigo = codigo; }public String getContenido() { return this .contenido; }public void setContenido(String contenido) { this .contenido = contenido; }public Date getFecha() { return this .fecha; }public void setFecha(Date fecha) { this .fecha = fecha; }public boolean isPortada() { return this .portada; }public void setPortada(boolean portada) { this .portada = portada; }public String getTitulo() { return this .titulo; }public void setTitulo(String titulo) { this .titulo = titulo; }public Categoria getCategoria() { return this .categoria; }public void setCategoria(Categoria categoria) { this .categoria = categoria; }

    }

    public int getCodigo() { return this .codigo; }public void setCodigo(int codigo) { this .codigo = codigo; }public String getNombre() { return this .nombre; }public void setNombre(String nombre) { this .nombre = nombre; }public List getNoticias() { return this .noticias; }public void setNoticias(List noticias) { this .noticias = noticias; }

    }

  • III. Patronesde

    DiseoDiseo

  • III. Patrones de Diseo Definicin:

    Esquemas predefinidos aplicables en diversas situaciones que garantizan ciertas cualidades al diseo obtenido.

    Motivacin: Un porcentaje muy elevado de los problemas

    a los que nos enfrentamos ya han sido resueltos anteriormente por otras personas.

    Design Patterns, Gang of Four, (Erich Gamma, Richard Helm, Ralph Johnson y John Vlisides)

  • III. Patrones de Diseo Divisin GoF

    Patrones Creacionales : Abstraer el proceso de creacin de los objetos.

    Abstract Factory, Builder, Factory Method, Prototype y Singleton.Singleton.

  • III. Patrones de Diseo Abstract Factory: Crear familias de objetos.

    DocumentBuilderFactory fac = new DocumentBuilderFactory();

    DocumentBuilder builder = fac.newDocumentBuilder(); // Retorna una implementacin de Builder Concreto

    Builder: Simplificar la creacin en si.DocumentBuilder builder = fac.newDocumentBuilder();DocumentBuilder builder = fac.newDocumentBuilder();

    Document doc = builder.newDocument(); // Retorna un documento vaco

    Document doc = builder.parse(cadena); // Retorna un documento tras parsear la cadena

    Abstract Factory: Permite crear un builder diferente segn la implementacin de XML disponible.

    Builder: Simplifica procesos de creacin complejos para un documento.

  • III. Patrones de Diseo Divisin GoF

    Patrones Estructurales : Combinar objetos para crear estructuras de mayor tamao.

    Adapter, Bridge, Composite, Decorator, Facade, Flyweight y Proxy.Proxy.

  • III. Patrones de Diseo Decorator: Aadir funcionalidad a un objeto.

    JFrame frame = new JFrame();

    frame.getComponentPane().add(JLabel(Un Texto));

    frame.getComponentPane().add(JLabelConBorde(Un Tex to));

    frame.getComponentPane().add(JLabelResizable(Un Texto));

    frame.getComponentPane().add(new BorderDecorator(JLabel(Un Texto)));

    frame.getComponentPane().add(new ResizableDecorator(JLabel(Un Texto)));

    frame.getComponentPane().add(new ResizableDecorator(new BorderDecorator(JLabel(Un Texto))));

    SXEOLFFODVV%RUGHUHFRUDWRUH[WHQGV-&RPSRQHQW^

    SURWHFWHG-&RPSRQHQWFKLOGGHFRUDWHGFRPSRQHQW

    SXEOLF%RUGHUHFRUDWRU-&RPSRQHQWFRPSRQHQW^

    FKLOG FRPSRQHQW

    WKLVVHW/D\RXWQHZ%RUGHU/D\RXW

    WKLVDGGFKLOG

    SXEOLFYRLGSDLQW*UDSKLFVJ^

    VXSHUSDLQWJ

    JGUDZ5HFWWKLVJHW:LGWK WKLVJHW+HLJKW

  • III. Patrones de Diseo Divisin GoF

    Patrones Comportamiento : Definir interaccin entre objetos reduciendo el acoplamiento.

    Chain of Responsability, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Mediator, Memento, Observer, State, Strategy, Template Method y Visitor.

  • III. Patrones de Diseo Observer: Patrn muy empleado.

    public class ObservableValue extends Observable {

    private int n = 0;

    public ObservableValue(int n) { this .n = n; }

    public void setValue(int n) {

    this.n = n; setChanged();

    notifyObservers();

    } }

    public int getValue() { return n; }

    }

    public class TextObserver implements Observer {

    public void update(Observable obs, Object obj) { System.out.println(((ObservableValue)ov).getValue()); }

    }

    public static void main(String[] args) {ObservableValue ov = new ObservableValue(0);TextObserver to = new TextObserver();ov.addObserver(to);ov.setValue(145); // Este cambio se notifica al Observer

    }

  • III. Patrones de Diseo Patrones Web

    Al amparo de los patrones de diseo del GoF aparecen otra serie de patrones especficos del mundo Web.

    http://java.sun.com/blueprints/corej2eepatterns/Patterns/index.html

    Se distribuyen en tres capas: Presentacin, Negocio e Integracin.

    De entre todos los patrones Web existentes el ms conocido y empleado es el MVC.

  • III. Patrones de Diseo Modelo Vista Control: Descrito en 1979.

    Modelo : Representacin especfica de la informacin. Vista : Representacin del modelo en un formato adecuado

    para que el usuario interacte.

    Control : Responde a la interaccin del usuario con la vista Control : Responde a la interaccin del usuario con la vista provocando cambios en el modelo.

  • III. Patrones de Diseo Modelo Simplificado

    public class Cliente extends Observable {

    private String link = "";

    public void link(String l) {link = l;setChanged(); notifyObservers();

    }

    public String getLink() { return link; }

    public class Server implements Observer {

    private boolean enviado = false ;

    @Overridepublic void update(Observable o, Object arg) {

    String action = ((Cliente)o).getLink();// Se pincha un enlaceif (action.equals(Index")) {

    public String getLink() { return link; }

    public static void main(String[] args) {Cliente c = new Cliente();c.addObserver(new Server());// Peticin Inicialc.link(Index");// Verificoc.link(Verify");// Envio Formularioc.link(Send");// Verificoc.link(Verify");

    }}

    if (action.equals(Index")) {System.out.println("Retorno Pgina Index !!");

    } else if (action.equals(Send")) {enviado = true ; System.out.println("Respuesta de Send !!");

    } else if (action.equals(Verify")) {if (enviado) System.out.println("Send ya ejecutado !!");else System.out.println("Send no ejecutado !!");

    }}

    }

  • III. Patrones de Diseo Modelo Simplificado

    public class Server implements Observer {

    private Control control = new Control();

    @Overridepublic void update(Observable o, Object arg) {

    String action = ((Cliente)o).getLink();Vista vista = control.doAction(action);vista.send();

    }}

    public class Control {

    private Modelo model = new Modelo();

    public Vista doAction(String action) {try {

    return (Vista)this .getClass().getMethod("do"+action, new Class[]{}).invoke(this ,new Object[]{});} catch (Exception e) {

    return new Vista("Error: "+e);}

    }

    VISTA

    public class Vista {

    private String text;

    public Vista(String t) { text = t; }

    public void send() { System.out.println(text); }

    } }

    public Vista doIndex() {return new Vista("Retorno Pgina Index.");

    }

    public Vista doSend() {model.setEnviado(true );return new Vista("Respuesta de Send.");

    }

    public Vista doVerify() {if (model.isEnviado()) return new Vista("Send ya ejecutado.");return new Vista("Send no ejecutado.");

    }

    }

    }

    MODELO

    public class Modelo {

    private boolean enviado = false ;

    public void setEnviado(boolean enviado) { this .enviado = enviado; }

    public boolean isEnviado() { return enviado; }}

  • III. Patrones de Diseo Modelo Vista Control

    Unidos a este modelo aparecen otras dos estrategias.

    Inversin de Control (IoC) Empleada en todos los frameworks de desarrollo. Principio Hollywood: No me llames, ya te llamo yo .

    Inyeccin de Dependencias (DI) Configurar vs Programar. Simplifica la obtencin de recursos comunes. Utilizacin de las anotaciones.

  • III. Patrones de Diseo Inversin de Control

    public class Control {

    public Vista doAction(String action) {try {

    return (Vista)this .getClass().getMethod("do"+action, new Class[]{}).invoke(this ,new Object[]{});} catch (Exception e) {

    return new Vista("Error: "+e);}

    }}

    public class SubControl extends Control {

    private Modelo model = new Modelo();

    public Vista doIndex() {return new Vista("Retorno Pgina Index.");

    }

    public Vista doSend() {} public Vista doSend() {model.setEnviado(true );return new Vista("Respuesta de Send.");

    }

    public Vista doVerify() {if (model.isEnviado()) return new Vista("Send ya ejecutado.");return new Vista("Send no ejecutado.");

    }

    }

  • III. Patrones de Diseo Inyeccin de Dependencias

    public class Server implements Observer {

    private Control control;

    public Server() {

    // Cdigo que instancia un objeto de la subclase de contr ol// adecuada para manejar las peticiones de la aplicacin

    }

    public class Server implements Observer {

    @Controlador(name=SubControl)private Control control;

    }

    @Overridepublic void update(Observable o, Object arg) {

    String action = ((Cliente)o).getLink();Vista vista = control.doAction(action);vista.send();

    }}

    @Overridepublic void update(Observable o, Object arg) {

    String action = ((Cliente)o).getLink();Vista vista = control.doAction(action);vista.send();

    }}

  • III. Patrones de Diseo Prcticas

    Repasa los diferentes patrones del GoF y localiza los ms adecuados para estos problemas:

    Dotar de un sistema de undo/redo a un editor.Crear un sistema gestor de ventanas que permita Crear un sistema gestor de ventanas que permita crear ventanas con diferentes caractersticas.

    Crear un sistema de actualizaciones automticas en funcin de la variacin de diversos objetos.

    Crear nmeros aleatorios permitiendo emplear diversas APIs de generadores de nmeros aleatorios.

    Asegurar la aleatoriedad de dichos nmeros.

  • III. Patrones de Diseo Prcticas

    Memento. Dotar de un sistema de undo/redo a un editor. Es un patrn especfico para este tipo de trabajo.

    Decorator. Crear un sistema gestor de ventanas que permita crear ventanas con

    diferentes caractersticas. De este modo se pueden crear ventanas que mezclen diferentes

    caractersticas sin necesidad de crear todas las combinaciones. De este modo se pueden crear ventanas que mezclen diferentes

    caractersticas sin necesidad de crear todas las combinaciones. Observer.

    Crear un sistema de actualizaciones automticas en funcin de la variacin de diversos objetos.

    Es un patrn especfico para este tipo de trabajo. Abstract Factory.

    Crear nmeros aleatorios permitiendo emplear diversas APIs de generadores de nmeros aleatorios.

    Builder puede ser excesivo mejor para tratar de simplificar la construccin. Singleton

    Asegurar la aleatoriedad de dichos nmeros.

  • IV. ArquitecturaJava EEJava EE

  • IV. Arquitectura Java EE Modelo de Capas

    A medida que evolucionan las aplicaciones Web, surge la necesidad de organizarlas.

    Inicialmente se emplean 3 capas. Actualmente es ms adecuado el uso de 4.

  • IV. Arquitectura Java EE Contenedores Java EE

    Entorno de ejecucin especfico para un conjunto de objetos de un determinado tipo y con unos fines concretos.

  • IV. Arquitectura Java EE Servicios Java EE

    Para cada contenedor Java EE proporciona una serie de servicios, como por ejemplo:

    Java Transaction API (JTA) Java Persistence API (JPA) Java Message Service (JMS) Java Message Service (JMS) Java Naming Direct Interface (JNDI) JavaMail Java Beans Active Framework (JAF) Java API for XML Procesing (JAXP) Java EE Connector Arquitecture Java Authentication and Authorization Service (JAAS) Servicios Web (JAXWS)

  • IV. Arquitectura Java EE Ensamblado y Empaquetado

    Mdulo EAR Contienen una aplicacin completa.

    /*.war /*.jar /META-INF/application.xml

    EjemploEAR

    Ejemplo.warEjemplo

  • IV. Arquitectura Java EE Ensamblado y Empaquetado

    Mdulo WEB Contienen un mdulo web.

    /*.* /WEB-INF/web.xml /WEB-INF/classes/*.class /WEB-INF/lib/*.jar

    Dentro del mdulo web: Servlets Filters Listeners

    El contenido varia mucho en funcin del tipo de desarrollo utilizado.

  • IV. Arquitectura Java EE Ensamblado y Empaquetado: Mdulo WEBDiarioDigitalDiarioDigital

    index.html

    RichFaces Filter richfaces org.ajax4jsf.Filter org.ajax4jsf.Filter

    richfaces Faces Servlet

    com.sun.faces.config.ConfigureListener

    Faces Servletjavax.faces.webapp.FacesServlet1

    Faces Servlet*.jsf

  • IV. Arquitectura Java EE Ensamblado y Empaquetado

    Mdulo EJB Contienen un mdulo EJB.

    /*.class /META-INF/ejb-jar.xml

    El uso de anotaciones simplifica el contenido del descriptor.

    SimpleEJB

  • IV. Arquitectura Java EE Servlets

    Clase Java con un ciclo de vida concreto. Init: Ejecutado al cargarse la primera vez. doGet/doPost/do: Ejecutados al recibirse

    peticiones de cada tipo concreto.peticiones de cada tipo concreto. Destroy: Ejecutado al finalizar.

    Importante: Se ejecuta en un hilo. Request/Response/Session.

  • IV. Arquitectura Java EE JSPs

    Al estilo de otros lenguajes, escribir cdigo Java dentro de HTML.

    Se compila y se convierte en un servlet. Maneja los mismos objetos.

    Custom Tags. Ampliar la sintaxis de HTML.

    public class MiServlet extends HttpServlet {

  • IV. Arquitectura Java EE Custom Tags

    package tag;

    import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.*;

    public class MiTag extends SimpleTagSupport {

    public void doTag() throws JspException {PageContext pageContext = (PageContext) getJspContext();

    /WEB-INF/tlds/MiTag.tld

    1.0 MTags

    fichero.jsp

    PageContext pageContext = (PageContext) getJspContext();

    JspWriter out = pageContext.getOut();try {

    out.println("Hello World");} catch (Exception e) { }

    }

    }

    MTags MisTags

    mitag tag.MiTag empty

    Insert title here

  • IV. Arquitectura Java EE Custom Tags: Argumentos.

    package tag;

    import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.*;

    public class MiTag extends SimpleTagSupport {

    private String propiedad;

    /WEB-INF/tlds/MiTag.tld

    1.0 MTags MisTags

    fichero.jsp

    public void setPropiedad(String p) { propiedad = p; }

    public void doTag() throws JspException {PageContext pageContext = (PageContext) getJspContext();JspWriter out = pageContext.getOut();try {

    out.println("Hello World: "+propiedad);} catch (Exception e) { }

    }

    }

    MisTags

    mitag tag.MiTag empty

    propiedadtruefalse

    Insert title here

  • IV. Arquitectura Java EE Custom Tags: Body

    package tag;import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.*;public class MiTag extends SimpleTagSupport {

    public void doTag() throws JspException {JspFragment body = getJspBody();PageContext pageContext = (PageContext) getJspContext();JspWriter out = pageContext.getOut();try {

    /WEB-INF/tlds/MiTag.tld

    1.0 MTags

    fichero.jsp

    try {

    StringWriter stringWriter = new StringWriter();StringBuffer buff = stringWriter.getBuffer();buff.append("");body.invoke(stringWriter);buff.append("");out.println(stringWriter);

    } catch (Exception e) { }}

    }

    MTags MisTags

    mitag tag.MiTag

    "http://www.w3.org/TR/html4/loose.dtd">Insert title here

    Texto Interno

  • IV. Arquitectura Java EE Custom Tags: Simplificado

    /WEB-INF/tags/mitag.tag

    * Simple *

    Hola Mundo !!

    * Con Parmetros *

    fichero.jsp

    Hola Mundo!!Hola Mundo!!

    * Con Contenido *

    "http://www.w3.org/TR/html4/loose.dtd">Insert title here

    Texto

  • IV. Arquitectura Java EE Prcticas

    Crea un Server WebLogic11g. Crea un Dynamic Web Project sobre el

    servidor. Aade un Servlet/JSP/CustomTag. Aade un Servlet/JSP/CustomTag. Aade un Filtro. Aade un Listener. Aade una pgina index con un enlace al

    servlet/jsp. Incluye la vista TCP/IP Monitor y sala.

  • IV. Arquitectura Java EE Crea un Servidor WebLogic.

  • IV. Arquitectura Java EE Crea un Dynamic Web Project.

  • IV. Arquitectura Java EE Aade un Servlet.

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ServletOutputStream out = response.getOutputStream();out.println("");out.println("MiServlet");out.println("");long numero = 0;HttpSession session = request.getSession(true );if (session.isNew()) {out.println("Acabo de pensar un nmero del 1 al 10, adivina cul es:");session.setAttribute("MiNumero", Math.round(Math.random()*10+1));

    } else {} else {out.println("Tengo pensado un nmero del 1 al 10, adivina cul es:");numero = (Long)session.getAttribute("MiNumero");

    }if (request.getParameter("number")!=null ) {try {

    if (Long.parseLong(request.getParameter("number")) == numero) { out.println(" Has Acertado !"); }else { out.println("Lo siento, vuelve a intentarlo."); }

    } catch (NumberFormatException nfe) { out.println("Debes escribir un nmero."); }}out.println("");out.println("Tu numero:");out.println("");out.println("");out.println("");out.flush(); out.close();

    }

  • IV. Arquitectura Java EE Aade un Filtro.

    int minHour = 0;int maxHour = 24;public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException,ServletException {

    int hora = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);if (hora>=minHour && hora23 || minHour23 || maxHourmaxHour) throw new Exception("Hora no vlida.");

    } catch (Exception ex) {System.out.println("Formato Hora Incorrecto!");

    }

  • IV. Arquitectura Java EE Aade un Listener.

    public void attributeRemoved(HttpSessionBindingEvent arg0) { }public void attributeAdded(HttpSessionBindingEvent arg0) {

    System.out.println("Acaba de Pensarse en el: "+arg0.getSession().getAttribute("MiNumero"));}public void attributeReplaced(HttpSessionBindingEvent arg0) { }

  • V. TecnologasJava EEJava EE

  • V. Tecnologas Java EE Tecnologas Vista: JSF

    Estndar SUN: Existen muchas alternativas. Comunidad de desarrollo amplia. Apoyo tecnolgico de las principales compaas. Adaptacin de las mejores ideas de otros. Lentitud en asimilar nuevas tecnologas. Modificaciones o mejoras lentas. Dependencia de implementaciones de terceros.

  • V. Tecnologas Java EE Tecnologas Vista: JSF

    Componentes de JSF: API + Implementacin de Referencia.

    Representan componentes UI y manejan su estado, eventos, validaciones, navegacin, etc

    Librera de Etiquetas. Librera de Etiquetas. Etiquetas personalizadas de JSP para dibujar los componentes

    UI dentro de las pginas JSP.

  • V. Tecnologas Java EE Ciclo de Vida JSF

    Las peticiones Faces no se limitan a peticin-respuesta, disponen de un ciclo de vida.

    El ciclo de vida depende del tipo de peticin. Respuesta No-Faces: Respuesta generada al margen de la Respuesta No-Faces: Respuesta generada al margen de la

    fase de renderizar respuesta de faces. Respuesta Faces: Respuesta generada en la fase de

    renderizar respuesta de faces. Peticin No-Faces: Peticin enviada a un componente no

    faces. Peticin Faces: Peticin enviada desde una respuest a faces

    previamente generada.

    El escenario normal Peticion faces/Respuesta faces.

  • V. Tecnologas Java EE Ciclo de Vida JSF

  • V. Tecnologas Java EE Ciclo de Vida JSF

    Reconstruir el rbol de componentes. Se construye el rbol de componentes faces.

    Aplicar valores a la peticin. Se asocian a los componentes los nuevos valores desde los

    parmetros de la peticin. Procesar validaciones.

    Se procesan las validaciones para los componentes. Actualizar los valores del modelo.

    Una vez es vlido se actualizan los valores del modelo. Invocar aplicacin.

    En este punto se manejan los eventos a nivel de aplicacin. Renderizar respuesta.

    Por ltimo se dibujan los componentes del rbol.

  • V. Tecnologas Java EE Componentes JSF

    Conjunto de clases UIComponent. Representan los componentes.

    Modelo de renderizado. Forma de visualizar el componente.

    Modelo de eventos. Modelo de eventos. Forma de manejar los eventos lanzados.

    Modelo de conversin. Conectar conversores de datos al componente.

    Modelo de validacin. Forma de registrar validadores para el componente.

    Se emplean las etiquetas. RichFaces, ICEFaces: Libreras de etiquetas.

  • V. Tecnologas Java EE Componentes JSF

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------

    http://java.sun.com/javaee/javaserverfaces/reference/docs/---------------------------------------------------------------------------------------------------------------------------------------------------------------





    http://java.sun.com/javaee/javaserverfaces/1.2/docs/tlddocs/

    http://java.sun.com/javaee/javaserverfaces/1.2_MR1/docs/api/index.html

  • V. Tecnologas Java EE Faces-Config.xml

    Archivo de configuracin principal. Describe los bean manejados.

    NoticieroGestorNoticiasweb.GestorNoticias

    Describe las reglas de navegacin.

    web.GestorNoticiasapplication/session/request/non e

    /editar/editar.xhtml

    nuevaCategoria/editar/new/categoria.xhtml

    nuevaNoticia/editar/new/noticia.xhtml

    javax.faces.CONFIG_FILES /WEB-INF/faces-config.xml,/WEB-INF/faces-beans.xml

  • V. Tecnologas Java EE JSF Paso a Paso

    Ciclo de Vida Podemos crear un Listener.

    Escucha la fase indicada en getPhaseId.

    public class PhaseListener implements javax.faces.event.PhaseListener {public void afterPhase(PhaseEvent event) { System.out.println("AFTER - "+event.getPhaseId()); }public void beforePhase(PhaseEvent event) { System.out.println("BEFORE - "+event.getPhaseId()); }public void beforePhase(PhaseEvent event) { System.out.println("BEFORE - "+event.getPhaseId()); }public PhaseId getPhaseId() { return PhaseId.ANY_PHASE; }

    }

    /WEB-INF/faces-config.xml

    lst.PhaseListener

  • V. Tecnologas Java EE JSF Paso a Paso

    Mapear Componentes Con Objetos Mapear Valores Fijos

    Mapear Propiedades de un Bean Manejado Siguen convenciones JavaBean.

    managedBeansmbeans.ManagedBeansrequest

    propiedadHola Mundo !!

  • V. Tecnologas Java EE JSF Paso a Paso

    Mapear Componentes Mapear Componentes Completos Backing Beans

    package mbeans;import javax.faces.component.UIOutput;import javax.faces.component.UIOutput;public class ManagedBeans {

    private UIOutput component;public void setComponent(UIOutput ui) {

    component = ui;component.setValue("Hola Mundito !!");

    }public UIOutput getComponent() { return component; }

    }

  • V. Tecnologas Java EE JSF Paso a Paso

    Invocar Mtodos Mtodos de Validacin

    Utilizados slo en UIInput. Reciben el FacesContext y el componente a validar y su

    valor.valor.

    public void validateEmail(FacesContext ctx, UIComponent cmp, Object obj) {String email = (String)obj;if (email.indexOf("@")

  • V. Tecnologas Java EE JSF Paso a Paso

    Invocar Mtodos Manejadores de Acciones

    Se utiliza en UICommand y UIButton. Reciben el evento.

  • V. Tecnologas Java EE JSF Paso a Paso

    Invocar Mtodos Manejadores de Navegacin

    Se utiliza en UICommand y UIButton. Retornan una cadena de navegacin.

  • V. Tecnologas Java EE JSF Paso a Paso

    Invocar Mtodos Manejadores de Cambios

    Capturar cambios sobre componentes UIInput.

  • V. Tecnologas Java EE JSF Paso a Paso

    Controlar Navegacin Conjunto de reglas para seleccionar la siguiente

    pgina a la que moverse. La seleccin depende de:

    Pgina actual. Pgina actual. Action ejecutado por el componente que navega. Cadena retornada por el action (outcome).

    Admite patrones en from-view-id.

    /logon.jsp

    #{LogonForm.logon}success/continue.jsp

  • V. Tecnologas Java EE JSF Paso a Paso

    Controlar Navegacin. Ejemplos.

    /pages/logon.jspsuccess/continue1.jsp

    #{m.acc}success/continue2.jsp

    Enlace en /pages/logon.jsp Destino

    continue2.jsp

    continue3.jsp

    error.jsp

  • V. Tecnologas Java EE JSF Paso a Paso

    Crear el adivinador de nmeros JSF. Crear un bean para calcular el nmero aleatorio. El mismo bean puede recoger el nmero

    introducido.introducido. Crea el JSP para solicitar el nmero, valida la

    entrada con validateLongRange. Configura la navegacin adecuada.

  • V. Tecnologas Java EE Crea un Hola Mundo JSF.

  • V. Tecnologas Java EE Crea un Hola Mundo JSF.

  • V. Tecnologas Java EE JSF Paso a Paso

    Crear el adivinador de nmeros JSF.

    adivinambeans.Adivinasession

    minimo1

    public class Adivina {

    private long numeroPensado;private int numero;private int minimo;private int maximo;

    Insert title here

    Internacionalizar i18n

    esen

    msg.mensajes

    msg.mensajes1

    maximo10

    /index.jsp

    success/next.jsp

    fail/index.jsp

    private int maximo;

    public Adivina() { numeroPensado = Math.round(Math.random()*10); }public int getNumero() { return numero; }public void setNumero(int n) { numero = n; }public int getMinimo() { return minimo;}public void setMinimo(int minimo) { this .minimo = minimo; }public int getMaximo() { return maximo; }public void setMaximo(int maximo) {this .maximo = maximo; }public String adivinar() { return (numeroPensado==numero)? "success:"fail"; }public boolean isIntentado() { return numero!=0; }public void cambiaIdioma(ValueChangeEvent event) {

    FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale((String)event.getNewValue()));// Cortocircuito !!FacesContext.getCurrentInstance().renderResponse();

    } }

    He pensado un nmero entre y

    , adivina !!

    Insert title here

    Has acertado, era el !!

    msg.mensajesmsg

    Archivo de Propiedades : msg/mensajes.properties, msg/mensajes_en.properties,

    titulo=Pienso en un nmero entrejavax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE=Sumariojavax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE_detail=Valor fuera de rango {0} - {1} .

  • V. Tecnologas Java EE Facelets

    Complemento ideal para JSF. Definir una plantilla para tu portal y emplearla en todas tus

    pginas.

    /pagina.xhtml

  • V. Tecnologas Java EE Crea una plantilla facelets.

    Aadir la librera Facelets:

    jsf-facelets-1.1.15.B1.jar

    Nota : web.xml y faces-config.xml los modifica eclipse !!

    Debemos cambiar las vistas y las reglas del faces-config.xml los id de las vistas pasan de .jsp a .xhtml.

    Simple JSF

    Default Content

  • V. Tecnologas Java EE Usar RichFaces.

    Para Usar RichFaces Aadir Libreras:

    commons-beanutils-1.7.0.jar

    commons-digester-1.8.jar

    commons-logging-1.1.1.jar

    richfaces-api-3.3.1.GA.jar

    org.richfaces.SKINblueSky

    org.ajax4jsf.VIEW_HANDLERScom.sun.facelets.FaceletViewHandler

    RichFaces Filter richfaces


    richfaces-impl-3.3.1.GA.jar

    richfaces-ui-3.3.1.GA.jar

    Nota : Hay que configurar a mano !!

    richfaces org.ajax4jsf.Filter

    richfaces Faces ServletREQUESTFORWARDINCLUDE

    com.sun.faces.config.ConfigureListener


    Y muchos componentes ms: RichFaces Live Demo .

  • V. Tecnologas Java EE Tecnologas Control: EJB

    Dar ms servicios a los objetos empleados en las aplicaciones web. Contenedor especfico para desplegar y ejecutar este tipo de objetos. Posibilidad de compartir lgica a travs de estos objetos. Necesario un Contenedor de EJB. Servidor JEE.

  • V. Tecnologas Java EE Tecnologas Control: EJB

    Tipos de EJB Session Beans: Sitos en la lgica de negocio.

    Stateless: Sin informacin de estado. Stateful: Mantienen el estado entre peticiones.

    Message Driven Beans: Utilizados para invocar mtodos de forma Message Driven Beans: Utilizados para invocar mtodos de forma asncrona.

    Entity Beans: Empleados en la capa de persistencia para representar datos del modelo.

  • V. Tecnologas Java EE Tecnologas Control: EJB

    Ciclo de Vida Creacin, Destruccin, Pasivacin (Stateful).

  • V. Tecnologas Java EE Tecnologas Control: EJB

    Callbacks Siempre que tenemos un ciclo de vida. Posibilidad de emplear AOP.

    @PostConstruct @PreDestroy @PreDestroy @PreActivate @PostActivate

    Interceptores Siempre que empleamos contenedores IoC y Ciclos de Vida. Posibilidad de emplear AOP.

    Default Clase Mtodo

  • V. Tecnologas Java EE Tecnologas Control: EJB

    Anotaciones. Forma de simplificar la definicin del EJB.

    @Stateful @Stateless

    @Statelesspublic class PlaceBidBean implements PlaceBid {

    @Interceptors(ActionBazaarLogger.class )public void addBid(Bid bid) {

    ...}

    }

    public class ActionBazaarLogger {@AroundInvokepublic Object logMethodEntry(InvocationContext invocationContext) throws Exception {

    System.out.println(Entering: + invocationContext.ge tMethod().getName());return invocationContext.proceed();

    }}

  • V. Tecnologas Java EE Prcticas II

    Crea un proyecto EJB. Liga tu proyecto EJB a una aplicacin Web. Emplea los EJBs creados desde la aplicacin Web. Crea los EJB necesarios para Diario Digital. Crea los EJB necesarios para Diario Digital.

  • V. Tecnologas Java EE Crea un proyecto EJB.

  • V. Tecnologas Java EE Crea un EJB.

    @Statelesspublic class Ejemplo implements EjemploLocal {double numero;public Ejemplo() {

    System.out.println("Stateless!!!");numero = Math.floor(Math.random()*10+1);

    }@Overridepublic String getMensaje() {

    numero++;

    @Statefulpublic class EjemploB implements EjemploBLocal {double numero;public EjemploB() {

    System.out.println("Stateful!!!");numero = Math.floor(Math.random()*10+1);

    }@Overridepublic String getMensaje() {numero++;

    return "Mensaje ["+numero+"]";}

    }

    public String getMensaje() {numero++;return "MensajeB ["+numero+"]";

    }}

    public class JSFBean {@EJBpublic EjemploBLocal ejemplo;public String getMensaje() { return ejemplo.getMensaje(); }

    }

    Faces-config.xml--------------------------------------------------------------------------------------

    jSFBeanmb.JSFBeansession

    Pgina--------------------------------------------------------------------------------------

  • V. Tecnologas Java EE Crea un EJB.

  • V. Tecnologas Java EE Tecnologas Modelo: JPA

    Muchos proyectos diferentes ORM. IBatis, Hibernate, JDO, TopLink,

    Necesario unificar: JPA.Necesario unificar: JPA.

  • V. Tecnologas Java EE Tecnologas Modelo: JPA

    Contextos de Persistencia

    Transacciones JTA : Empleada en Servidores de Aplicaciones JavaEEorg.hibernate.ejb.HibernatePersistencejdbc/NombreDataSource

  • V. Tecnologas Java EE Tecnologas Modelo: JPA

    Empleo de Persistencia Declarar un EntityManager ligado a la Unidad que necesites.

    public @Stateful class NoticiasBean implements Noticias,Serializable {@PersistenceContext(unitName="diarioPU")protected EntityManager entityManager;private List listado;private List listado;

    public List getListado() {listado = entityManager.createQuery("from noticias.Noticia noti").getResultList();return listado;

    }public void nuevaNoticia(Noticia not) { entityManager.persist(not); }

    }

  • V. Tecnologas Java EE Tecnologas Modelo: JPA

    Ciclo de Vida: Entity Beans

  • V. Tecnologas Java EE Tecnologas Modelo: JPA

    Anotaciones Bsicas: Entidades y Claves@Entitypublic class Entidad {

    @EmbeddedId@AttributeOverrides({

    @AttributeOverride(name = "id", column = @Column(name = "ID", nullable = false , precision = 5, scale = 0)),

    @AttributeOverride(name = "nombre", column = @Column(name =

    @Entity@Table(name="USUARIOS")public class Usuario {

    @Idprivate String nick;

    Clave Simple

    @AttributeOverride(name = "nombre", column = @Column(name = "NOMBRE", nullable = false , length = 50)),

    })private EntidadId id;public Entidad() { }// Getters y Setters

    }@Embeddedpublic class EntidadId {

    int id;String nombre;public EntidadId() { }public boolean equals(Object o) { /* Comprueba si son iguales */ }public int hashCode() { /* Buenas practicas equals() -> hashCode() */ }

    } Clave Compuesta

    private String nick; ...public Usuario() { }// Getters y Setters

    }

  • V. Tecnologas Java EE Tecnologas Modelo: JPA

    Anotaciones Bsicas: Atributos@Entity@Table(name="USUARIOS")public class Usuario {

    @Idprivate String nick; @Embedded@AttributeOverrides({

    @AttributeOverride(name="codigoPostal",column=@Column(name="COD_POS")),

    @Entity@Table(name="USUARIOS")public class Usuario {

    @Idprivate String nick; @Column(name="PASSWORD", nullable=false )

    Atributo Simple

    @AttributeOverride(name="codigoPostal",column=@Column(name="COD_POS")),@AttributeOverride(name="direccionPostal",column=@Column(name="DIR_POS"))

    })private Direccion direccion;public Usuario() { }// Getters y Setters

    }@Embeddable public class Direccion implements Serializable {

    private String direccionPostal;private String ciudad;private int codigoPostal;private String pais;public Direccion() { }public boolean equals(Object o) { /* Comprueba si las dos entidades son iguales */ } public int hashCode() { /* Buenas practicas equals() -> hashCode() */ } // Getters y Setters

    } Atributo Compuesto

    @Column(name="PASSWORD", nullable=false )private String pass;@Column(name="E-MAIL", nullable=false )private String mail;@Lob@Basic(fetch=FetchType.LAZY)private byte [] imagen;...public Usuario() { }// Getters y Setters

    }

  • V. Tecnologas Java EE Tecnologas Modelo: JPA

    Anotaciones Bsicas: Relaciones@Entity@Table(name="USUARIOS")public class Usuario {

    @Idprivate String nick; @Column(name="PASSWORD", nullable=false )private String pass;@OneToOne

    @Entity@Table(name="PERFILES")public class Perfil {@Id@Column(name="PERFIL_ID")private int id;...

    }

    OneToOne

    CascadeType.PERSIST : Cuando persistamos la entidad todas las entidades que contenga esta variable sern persistidas tambin.CascadeType.REMOVE : Cuando borremos la entidad todas las entidades que contenga esta variable se borrarn del mismo modo.@OneToOne

    @JoinColumn(name="PERFIL_USUARIO_ID",referencedColumnName="PERFIL_ID", updatable=false )private Perfil perfil;private Set noticias = new HashSet(0);@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY,mappedBy = "usuario")public Set getNoticias() {

    return this .noticias; }public void setNoticias(Set noticias) {

    this .noticias = noticias; }...

    }

    @Entity@Table(name = "NOTICIA")public class Noticia implements java.io.Serializable {...private Usuario usuario;@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "USUARIO", nullable = false )@NotNullpublic Usuario getUsuario() { return this .usuario; }public void setUsuario(Usuario usuario) { this .usuario = usuario; }...

    } ManyToOne

    ManyToMany : Muy similar a ManyToOne pero simtrica en ambas clases.

    contenga esta variable se borrarn del mismo modo.CascadeType.REFRESH : Cuando actualicemos la entidad todas las entidades que contenga esta variable se actualizarn.CascadeType.MERGE : Cuando hagamos un "merge" de la entidad todas las entidades que contenga esta variable realizarn la misma operacin.CascadeType.ALL : Todas las operaciones citadas anteriormente.

  • V. Tecnologas Java EE Tecnologas Modelo: JPA

    Anotaciones Avanzadas: Querys Personalizadas

    @NamedNativeQuery (name="nativeResult", query="SELECT USUARIO_ID,NOMBRE,APELLIDOS FROM USUARIOS WHERE USUARIO_ID= 123", resultSetMapping = "usuarioNamedMapping")

    @SqlResultSetMapping (name="usuarioNamedMapping", name="usuarioNamedMapping", entities = { @EntityResult (

    entityClass = mi.clase.Usuario.class, fields = {@FieldResult (

    name="usuarioId", column="USUARIO_ID"),

    @FieldResult (name="nombre",column="NOMBRE"),

    @FieldResult (name="apellidos", column="APELLIDOS")

    } )} )

  • V. Tecnologas Java EE Tecnologas Modelo: JPA

    Anotaciones Avanzadas: Procedimientos Almacenados

    create or replace procedure findUsersLike(res out sys_ref cursor, str in string) asbegin

    open res for select u.* from users u where u.username like con cat(str, %);end findUsersLike;

    @NamedNativeQuery (name = "User.findLike",resultClass = User.class,query = "{call findUsersLike(?,:VAR)}",query = "{call findUsersLike(?,:VAR)}",hints = {

    @QueryHint(name = "org.hibernate.callable", value = "true"),@QueryHint(name = "org.hibernate.readOnly", value = "true")

    })@org.hibernate.annotations.NamedNativeQuery (name=User.findLike,

    resultClass = User.class,query = "{call findUsersLike(?,:VAR)}",callable = true, readOnly = true)

    Query query = em.createNamedQuery("User.findLike");query.setParameter("VAR","lt");List users = query.getResultList();

  • V. Tecnologas Java EE Aplicacin Completa: JSF+EJB3+JPA

    Emplear EJB Session Bean Facade.

  • V. Tecnologas Java EE Prcticas III

    Crea un ejemplo de Bean de Entidad. Incluye atributos de diferentes tipos. Relaciona varias entidades. Relaciona varias entidades. Convierte los objetos del Diario Digital en

    entidades JPA para dotarlas de persistencia.

  • V. Tecnologas Java EE Crea un ejemplo de Bean de Entidad.

  • V. Tecnologas Java EE Crea un ejemplo de Bean de Entidad.

  • V. Tecnologas Java EE Crea un ejemplo de Bean de Entidad.

  • V. Tecnologas Java EE Crea un ejemplo de Bean de Entidad.

    org.eclipse.persistence.jpa.PersistenceProviderDiarioDataSourceDiarioDataSourceDiarioDataSourcedata.Categoriadata.Noticia

  • VI. TecnologasAvanzadasAvanzadas

  • VI. Tecnologas Avanzadas Servicios WEB

    Forma de interactuar.

  • VI. Tecnologas Avanzadas Servicios WEB

    Buscar servicios Web: UDDI. Catlogo de Servicios.

    Invocar Servicios Web: WSDL. Descriptor del Servicio. Descriptor del Servicio.

    Intercambio de Informacin: SOAP. Documentos XML.

    Las herramientas nos simplifican el trabajo. A partir de un mtodo podemos crear un servicio. A partir de un WSDL podemos crear un cliente.

  • VI. Tecnologas Avanzadas Servicios WEB

    Implementaciones Diversas: Tratan de automatizar la creacin de servicios y clientes.

    Axis2 Axis2 JAXWS CXF

    Usaremos JAXWS. En FundeWeb se usar CXF, pero el curso se

    centra en la interaccin y no en las implementaciones.

  • VI. Tecnologas Avanzadas Prcticas I

    Crea un Sencillo Servicio Web. Prubalo con el Web Service Explorer Genera un cliente a partir del WSDL. Genera un cliente a partir del WSDL. Crea el Servicio Web Teletipo. Incluye en el Diario Digital las noticias del

    Teletipo.

  • VI. Tecnologas Avanzadas Crea un Sencillo Servicio Web.

  • VI. Tecnologas Avanzadas Crea un Sencillo Servicio Web.

    @WebServicepublic class Titulares {@EJBprivate NoticiasLocal misNoticias;@WebMethodpublic List listTitulares() {ArrayList lista = new ArrayList();for (Noticia n:misNoticias.getListadoPortada()) {Titular t = new Titular();t.setTitulo(n.getTitulo()); t.setFecha(n.getDia());

    http://localhost:7001/DiarioWS/TitularesService?WSD L

    http://localhost:7001/wls_utc/?wsdlUrl=http://local host:7001/DiarioWS/TitularesService?WSDL

    t.setTitulo(n.getTitulo()); t.setFecha(n.getDia());lista.add(t);

    }return lista;

    }}

    public class Titular implements Serializable {private String titulo;private Date fecha;public String getTitulo() { return titulo; }public void setTitulo(String titulo) { this .titulo = titulo; }public Date getFecha() { return fecha; }public void setFecha(Date fecha) { this .fecha = fecha; }

    }

  • VI. Tecnologas Avanzadas Crea un Sencillo Servicio Web.

    public List getTitulares() {TitularesService ts = new TitularesService();return ts.getTitularesPort().listTitulares();

    }}

  • VI. Tecnologas Avanzadas Autenticacin JAAS

    Java EE permite emplear roles para securizar recursos de una aplicacin.

    administrador

    usuario

    example.comadmin!admin

    administradoruseradmin

    ...

  • VI. Tecnologas Avanzadas Autenticacin JAAS

    Java EE permite emplear roles para securizar recursos de una aplicacin.

    @DeclareRoles({"administrador", "usuario"})public class Ejemplo extends HttpServlet {protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

    if (req.isUserInRole("administrador")) {// El usuario Autenticado tiene el rol administrador

    }}}}

    Permiso Ejemplo/EjemploGETPOST

    administrador

    NONE

    BASIC

  • VI. Tecnologas Avanzadas Prcticas II

    Crea roles en una aplicacin. Aade seguridad a diferentes recursos. Securiza la creacin de noticias en el Diario Securiza la creacin de noticias en el Diario

    Digital.

  • VI. Tecnologas Avanzadas Crea roles en una aplicacin.

    redactor

    usuario

    Redaccion del Diario/editar/*

    redactorAdministrators

    usuarioAppTesters

    /editar/*GETPOST

    redactor

    NONE

    BASIC

  • VI. Tecnologas Avanzadas Portales y Portlets

    Idea similar a la de los servlets. Componentes configurables y reubicables. Pensados para su uso en portales. Especificacin JSR 168.

  • VI. Tecnologas Avanzadas Portales y Portlets

    Ventajas Desarrollo independiente y reutilizable. Personalizacin dinmica. Seguridad ante fallos. El fallo de un portlet no Seguridad ante fallos. El fallo de un portlet no

    afecta al resto del portal. Adoptado por otras tecnologas. PHP Portlet.

    Inconvenientes Tecnologa relativamente nueva. Genera portales con poca personalidad.

  • A. Diario Digital

  • A. Diario Digital Prctica Global

    Muestra las noticias de un diario y un teletipo.

  • Gracias !