isis2503-pojos

Upload: paulina-juarez

Post on 09-Feb-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/22/2019 isis2503-pojos

    1/33

    DEPARTAMENTO DE SISTEMAS

    POJOs / Anotaciones

  • 7/22/2019 isis2503-pojos

    2/33

    DEPARTAMENTO DE SISTEMAS

    Agenda

    Anotaciones POJOS Inyeccin de Dependencias

  • 7/22/2019 isis2503-pojos

    3/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    Las anotaciones son marcas (tags) que seinsertan en el cdigo fuente

    Son interpretadas por herramientas deprocesamiento

    o A nivel de cdigo fuenteo A nivel de los archivos .class

    Las anotaciones no cambian la forma en queun programa es compilado

    Inicialmente definidas en el JDK 5.0

  • 7/22/2019 isis2503-pojos

    4/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    En general su utilizacin requiereo Disear las anotacioneso Utilizarlas en el cdigo fuenteo Utilizar una herramienta de procesamiento para

    analizarlas

    o Reaccionar ante cada anotacin encontrada Usos frecuentes

    o Generacin automtica de archivos! Descriptores! Clases Java

    o Generacin automtica de cdigo! Testing, Logging,etc.

  • 7/22/2019 isis2503-pojos

    5/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    En java una anotacin es usada como unmodificador (public, static, )

    o Se inserta antes del elemento anotado, sin ; El nombre de cada anotacin es precedido del

    smbolo @

    No genera documentacin ni es parte deJavadoc

    Las anotaciones son parte del cdigo Las anotaciones pueden tener elementos

    o Ej: @TestCase(id=12244)

  • 7/22/2019 isis2503-pojos

    6/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    Las anotaciones pueden ser utilizadas eno Interfaceso Claseso Mtodoso Atributoso Variables

    Una anotacin puede ir en donde sea posibleutilizarpublic,static ofinal

  • 7/22/2019 isis2503-pojos

    7/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    Cada anotacin debe ser definida por unainterfaz de anotacin

    Los mtodos de la interfaz corresponden a loselementos de la anotacin

    Las anotaciones se definen en el cdigo fuente El compilador las conserva en el .class La mquina virtual las carga Se debe utilizar un mecanismo para

    analizarlas

  • 7/22/2019 isis2503-pojos

    8/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    Una anotacin es definida por una interfazmodifiers@interface AnnotationName

    {

    element declaration1

    element declaration2

    ...

    }

    Cada elemento declaration tiene la forma

    type elementName(); type elementName() defaultvalue;

    public @interface BugReport {

    String assignedTo() default "[none]";

    int severity() = 0;

    }

    Ejemplo:

  • 7/22/2019 isis2503-pojos

    9/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    Cada anotacin tiene la forma:

    @AnnotationName(elementName1=value1, elementName2=value2, ...)

    Algunos aspectos importantes:

    El orden de los elementos no es relevante Si se utilizan todos los valores por defecto o no hay argumentos no

    es necesario usar parntesis (marker)

    /**

    * Indicates that the specification of the annotated API element

    * is preliminary and subject to change*/

    public @interface Preliminary { }

    @Preliminarypublic class TimeTravel { ... }

  • 7/22/2019 isis2503-pojos

    10/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    Algunos aspectos importantes:

    /**

    * Associates a copyright notice with the annotated API element

    */

    public @interface Copyright

    {

    String value();

    }

    @Copyright(2008 European Organization for Nuclear Research")

    public class LargeHadronCollider { ... }

    Si un elemento tiene el nombre reservado value se puede omitirel nombre del elemento y el operador de asignacin =

  • 7/22/2019 isis2503-pojos

    11/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    Todas las interfaces de anotacin extiendeno java.lang.annotation.Annotation

    Las interfaces de anotacin no pueden serextendidas

    Nunca se proveen clases que implementenlas interfaces de anotacin

    La mquina virtual genera clasesproxy yobjetos cuando se requieran

  • 7/22/2019 isis2503-pojos

    12/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    El tipo de un elemento de anotacin puedeser:

    o Tipo primitivo (int, short, long,byte, char,double, float,boolean)

    o Stringo Classo Enumo Annotationo Arreglos de los tipos anteriores

  • 7/22/2019 isis2503-pojos

    13/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    Ejemplopublic @interface BugReport {

    enum Status { UNCONFIRMED, CONFIRMED, FIXED, NOTABUG };boolean showStopper() default false;

    String assignedTo() default "[none]";

    Class

  • 7/22/2019 isis2503-pojos

    14/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    Se pueden agregar anotaciones a:o Paqueteso Claseso Enumeracioneso Mtodoso Constructoreso Variables localeso Parmetros

  • 7/22/2019 isis2503-pojos

    15/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    Las anotaciones a variables locales solopueden ser procesadas a nivel del cdigofuente

    Estas anotaciones son descartadas cuandola clase es compilada

    Un item puede tener mltiples anotaciones No se puede utilizar ms de una misma

    anotacin por item

  • 7/22/2019 isis2503-pojos

    16/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    Meta-Anotacioneso @Target

    ! Aplica a una anotacin! Especifica a qu elementos puede aplicar la

    anotacin

    o @Retention! Especifica por cuanto tiempo es retenida una

    anotacin

  • 7/22/2019 isis2503-pojos

    17/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    @Target Valores para ElementType

    @Target({ElementType.METHOD, ElementType.CONSTRUCTOR})

    public @interface TestCase

  • 7/22/2019 isis2503-pojos

    18/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    @Retention

    @Retention(RetentionPolicy.RUNTIME)

    public @interface ActionListenerFor

  • 7/22/2019 isis2503-pojos

    19/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    Ejemplo/**

    * Indicates that the annotated method is a test method.

    */

    @Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)

    public @interface Test { }

    Definicin de la anotacin

    Programa ejemplopublic class MyClass {

    @Testpublic static voidm1() { }

    public static voidm2() { }

    @Testpublic static voidm3() {

    throw new Exception("Boom");

    }

    }

  • 7/22/2019 isis2503-pojos

    20/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    Ejemplopublic class RunTests {

    public static voidmain(String[] args) throws Exception {

    intpassed = 0, failed = 0;for (Method m : Class.forName(args[0]).getMethods()) {

    if (m.isAnnotationPresent(Test.class)) {

    try {

    m.invoke(null);

    passed++;} catch (Throwable ex) {

    System.out.printf("Test failed: %s %n", m, ex.getCause());

    failed++;

    }}

    }

    System.out.printf("Passed: %d, Failed %d%n", passed, failed);

    }

    }

    Herramienta de prueba

  • 7/22/2019 isis2503-pojos

    21/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    La herramienta APT (Annotation ProcessingTool)

    o Herramienta de procesamiento de anotacioneso Se basa en las anotaciones presentes en los

    archivos fuente a ser examinados

    o El parser localiza anotaciones analizando losarchivos .java

    o Utiliza un conjunto de APIs de reflexin

  • 7/22/2019 isis2503-pojos

    22/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    Algoritmo de procesamientopublic voidprocess()

    {

    for (TypeDeclaration t : env.getSpecifiedTypeDeclarations())

    {

    if (t.getModifiers().contains(Modifier.PUBLIC))

    {

    for (MethodDeclaration m : t.getMethods())

    {

    Property p = m.getAnnotation(Property.class);

    if (p != null)

    {

    // process property

    }}

    }

    // write bean info source file

    }

    }

  • 7/22/2019 isis2503-pojos

    23/33

    DEPARTAMENTO DE SISTEMAS

    Anotaciones

    Procesamiento de ByteCodeo Normalmente requiere librerias de apoyo como

    ! BCEL (ByteCode Engineering Library)

    Procesamiento de clases cargadaso Procesamiento con agenteso Se implementa una clase con un mtodo

    llamadopremain

    o El programa a analizar se empaqueta y seejecuta junto con el agente

  • 7/22/2019 isis2503-pojos

    24/33

    DEPARTAMENTO DE SISTEMAS

    Agenda

    Anotaciones POJOs Inyeccin de Dependencias

  • 7/22/2019 isis2503-pojos

    25/33

    DEPARTAMENTO DE SISTEMAS

    POJOs

    Plain Old Java ObjectsObjetos instanciados de una clase java que se

    caracteriza por

    o Tener atributoso Los atributos son leidos y modificados via

    getters y setters

    o Puenden tener otros mtodos de negocio

  • 7/22/2019 isis2503-pojos

    26/33

    DEPARTAMENTO DE SISTEMAS

    POJOs

    Ventajas de una programacin basada enPOJOs

    o Simplicidad! Normalmente no hay herencia ni implementacin de

    interfaces de frameworks

    o Mantenimiento! KISS (Keep It Short and Simple)

    o Testing! JUnit

    o Reusabilidad

  • 7/22/2019 isis2503-pojos

    27/33

    DEPARTAMENTO DE SISTEMAS

    POJOs

    Normalmente las aplicaciones empresarialesrequieren

    o Transaccionalidado Seguridado Persistencia

    Alternativaso lightweight frameworks

    ! Hibernate, JDO, iBATIS, Springo Servidores JEE

    ! Glassfish, JBOSS, WebSphere, OAS

  • 7/22/2019 isis2503-pojos

    28/33

    DEPARTAMENTO DE SISTEMAS

    Agenda

    Anotaciones POJOS Inyeccin de Dependencias

  • 7/22/2019 isis2503-pojos

    29/33

    DEPARTAMENTO DE SISTEMAS

    Inyeccin de Dependencias

    Inversin de Control (IoC)o Patrn de diseo de softwareo El flujo de un sistema es invertido con respecto a

    la secuencia tradicional de llamados a

    procedimientos

    o El flujo es delegado en una tercera entidad externao Esta entidad realiza la secuencia de llamados

    basada en un conjunto de instrucciones

    predefinidas

    (Definicin dada por Martin Fowler)

  • 7/22/2019 isis2503-pojos

    30/33

    DEPARTAMENTO DE SISTEMAS

    Inyeccin de Dependencias

    Un caso particular de IoC es la Inyeccin deDependencias (DI)

    o Tradicionalmente cada objeto es responsable deobtener sus propias referencias de los objetos

    con los que colabora

    o Esto produce normalmente cdigo altamenteacoplado y difcil de probar

    o Con la DI, los objetos obtienen susdependencias al momento de su creacin poruna entidad externa

    o Es decir, las dependencias son inyectadas

  • 7/22/2019 isis2503-pojos

    31/33

    DEPARTAMENTO DE SISTEMAS

    Inyeccin de Dependencias

    Con la Inyeccin de Dependenciaso Se obtiene cdigo bajamente acopladoo Facl de probaro Los objetos slo conocen sus dependencias por

    sus interfaces (no sus implementaciones)

    o En trminos generales no existe lookupo Inicialmente, esta inyeccin se definia mediante

    descriptores externos (Archivos XML)

    o Ahora es mas comn utilizar Anotaciones !!!

  • 7/22/2019 isis2503-pojos

    32/33

    DEPARTAMENTO DE SISTEMAS

    Inyeccin de Dependencias

    Tomado de: EJB3 in Action

  • 7/22/2019 isis2503-pojos

    33/33

    DEPARTAMENTO DE SISTEMAS

    Bibliografa

    Core Java 2 Volume II Advanced Features, 7thEdition,Cay S. Horstmann and Gary Cornell, Prentice Hall

    The Java EE 5 Tutorial, Third Edition, Eric Jendrock etal.

    POJOs in Action, Developing Enterprise Applicationswith Lightweight Frameworks, Chris Richardson

    EJB3 in Action. Debu Panda, Reza Rahman, DerekLane. Mannaging Publications. 2006