JEE5www.heinsohn.com.co                      Slide 1
Agenda• Justificación de la adopción del estándar  JEE5• Arquitectura simple de JEE5     – JEE5     – JBOSS SEAM• Soporte ...
Justificación de la adopción                           del estándar Java EE 5• Estandar publicado hace más de 4 años (Mayo...
Arquitectura simple de Java EE 5
ArquitecturaJEE 5
ArquitecturaJBOSS SEAM
ArquitecturaJBOSS SEAM
Soporte del estándar Java EE 5 por losproveedores
Empresas y proyectos que desarrollan                          en Java EE 5• Empresas colombianas:   –   DAS - Departamento...
• Servidores y bases de datos soportados   – Servidores soportados por Seam: JBoss, Oracle OC4J, Oracle-BEA WebLogic,     ...
Pruebas de concepto        Item Medido             J2EE 1.4 Platform          Java EE 5 Platform                Mejora (%)...
Pruebas de                                               concepto                                           versión en    ...
EJB 3.0   Stateful   Stateless   Interceptores   Inyección de dependencias @EJB11/27/09                   Core5     Slide 13
EJB 3.0 Stateful Las instancias de beans de sesion contienen un estado conversacional que debe sobrevivir a traves de méto...
EJB 3.0 StatelessEl ciclo de vida de un bean de sesion STATELESS no requiere que el usuario declare un metodo Remove , la ...
EJB 3.0 Interceptores   public class ProcessTimeInterceptor {       public ProcessTimeInterceptor() {       }       @Aroun...
EJB 3.0 Inyeccion de dependencias @EJBEl concepto de inyección de dependencias se refiere a la separación entre la constru...
JPA (Java Persistence API)   Caracteristicas de las Entidades Java Persistence   Generación de llaves primarias   Relacion...
Entidades       Este mapeo puede realizarse a través de un producto objeto relacional,       llamado proveedor de persiten...
Anotaciones Las anotaciones de JPA se clasifican en dos categorías:   Anotaciones de mapeo lógico que permiten describir m...
Caracteristicas de las Entidades Java                                                                   Persistence/* Indi...
Generación Automatica de                                                                  claves primariasEn EmpleadoEB se...
Otros tipos de datos  Atributo correspondiente a una columna voluminosa (BLOB):    @Lob    private byte [ ] foto;  Atribut...
Relaciones de asociación      Generalidades:       @OneToMany : atributo que es lista de detalles: indica que la entidad m...
Relaciones bidireccionales                                         OneToOne:@Entity                                       ...
Relaciones bidireccionales                                ManyToOne / OneToMany@Entity                                    ...
Relaciones bidireccionales                                       ManyToMany@Entity                                        ...
Archivos XML Los datos de persistencia estan especificados con el uso de anotaciones, de archivos xml ó una mezcla de ambo...
Entity Manager    Es la interfaz que permite acceder a las entidades en el    contexto de persistencia y realizar operacio...
EntityManager         Unidad de persistencia       En el persistence.xml se establece el nombre de la unidad de persistenc...
EntityManager         Unidad de persistencia       En el components.xml se registra la fabrica como componente SEAM.02/06/...
EntityManager         Unidad de persistencia       * En las clases en las que se vaya a utilizar se inyecta el contexto de...
Servicios de Persistencia    •persist (entity)          Inserta en la BD el registro de la entidad     •find(entity.class,...
JPQL Java Persistence Query Language •Consultas sobre entidades. •Sentencias de consultas en una forma portable (independi...
TaylorEl framework Taylor permite modelar gráficamente entidades sencillas o complejas ysus relaciones incluyendo herencia...
SEAM     Introducción     Contextos seam     Conversación     Sistema de bijeccion     Características de componentes seam...
IntroducciónSeam es un framework que facilita el desarrollo de aplicaciones Java EE 5 a nivelempresarial, que se rige, ent...
SEAM Contextos                                    Tipos de contextos en Seam                                    •Stateless...
SEAM- Conversación Una conversación es un una unidad de trabajo creada por Seam en el cual el usuario puede establecer su ...
SEAM ComponenteLos componentes Seam son en particular JavaBeans ó EJB 3.0 enterprise beans. Para quesu componente pueda ha...
SEAM Sistema de bijecciónBijección es una caracteristica que nos permite adicionar y tomar variables de un contexto pormed...
SEAM Seguridad       Seguridad por Roles.       por anotaciones se puede proteger todo un EJB o un servicio particular de ...
SEAM pages.xml       Seam provee un lenguaje de navegacion que incorpora manejo de conversación,       seguridad, manejo d...
Capa de presentación   Controles JSF de SEAM   Anotaciones SEAM para usar con JSF   Validaciones Hibernate   JBOSS EL Func...
Controles JSF de SEAM I• Controles de navegación<s:button>                     permite controlar la                       ...
Controles JSF de SEAM II            – Formatos    <s:decorate>      Permite ‘decorar’ un elemento input JSF, para adiciona...
Validadores Hibernate11/27/09   Core5                                     Slide 47
JBoss EL   Seam hace uso de JBoss EL el cual provee unas mejoras al estandar Unified   Expression Language (EL). Algunas d...
RichFaces II      rich:extendedDataTable adiciona las siguientes funcionalidades al componente rich:dataTable:           *...
Referecias http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=AnotacionesEJB3 http://java.sun.com/javaee/5/d...
Upcoming SlideShare
Loading in...5
×

Introduccion JEE5

2,490

Published on

En esta presentacion veran todo lo relacionado con el manejo de JEE5 en entorno java como framework para desarrollar paginas web Dimanicas.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,490
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
78
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/24/09
  • 11/24/09
  • 11/24/09
  • 11/24/09
  • 11/24/09
  • 11/24/09
  • 11/24/09
  • 11/24/09
  • 11/24/09
  • 11/24/09
  • 11/24/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09
  • 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09
  • 11/27/09
  • 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09
  • 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • 11/27/09 11/27/09 11/27/09 11/27/09
  • Introduccion JEE5

    1. 1. JEE5www.heinsohn.com.co Slide 1
    2. 2. Agenda• Justificación de la adopción del estándar JEE5• Arquitectura simple de JEE5 – JEE5 – JBOSS SEAM• Soporte del estándar JEE5• Caracteristicas del estándar JEE511/24/09 Meta-Framework Core5 Slide 2
    3. 3. Justificación de la adopción del estándar Java EE 5• Estandar publicado hace más de 4 años (Mayo 2006) – J2EE es obsoleto• Simplifica el mantenimiento: – elimina patrones y clases intermediarias de J2EE => arquitectura más simple y código reducido• Código independiente de las bases de datos: – código conciso y robusto en términos de entidades y no tablas• Modelo unificado de datos – simplifica el desarrollo• Páginas web JSF con facilidades AJAX y de validación – se elimina el javascript y las clases intermediarias backing bean
    4. 4. Arquitectura simple de Java EE 5
    5. 5. ArquitecturaJEE 5
    6. 6. ArquitecturaJBOSS SEAM
    7. 7. ArquitecturaJBOSS SEAM
    8. 8. Soporte del estándar Java EE 5 por losproveedores
    9. 9. Empresas y proyectos que desarrollan en Java EE 5• Empresas colombianas: – DAS - Departamento Administrativo de Seguridad – Banco de la República – Publicar S.A. – Insurance Information Technologies Inc (Guillermo Turk): aplicación de Seguros para la China.• Empresas a nivel mundial : – Infosys empresa muy grande de software de la India – New energy (subsidiaria de Siemens) desarrolla en Java EE – Teléfonica de España – Ministerio de Trabajo y Seguridad Social de Uruguay – FiSer (aplicación de manejo de tarjetas de crédito)• +50 Proyectos a nivel mundial desarrollados con el framework Seam para Java EE 5 – ver http://www.seamframework.org/Documentation/SeamInProduction
    10. 10. • Servidores y bases de datos soportados – Servidores soportados por Seam: JBoss, Oracle OC4J, Oracle-BEA WebLogic, IBM Websphere. – Todas las bases de datos (es transparente para la aplicación con JPA)
    11. 11. Pruebas de concepto Item Medido J2EE 1.4 Platform Java EE 5 Platform Mejora (%)Número de Clases 98 14 86% menos clasesLineas de código 25918 1610 94% menos lineas de codigoLineas de descriptores XML 5221 3493 33% menos lineas de descriptores XMLLineas de páginas xhtml 596 294 51% menos lineas de páginas xhtmlPromedio horas desarrollo(implantación CRUDs) 30,5 17,2 44% menos horas desarrollo versión en versión en Java Operación CRUD Observaciones J2EE (CORE) EE 5 (SEAM) modificar 1 registro 1,4 sg 0,03 sg (aprox. 47 veces más rápido) eliminar 1 registro 3,22 sg 0,12 sg (aprox. 27 veces más rápido) insertar 1 registro 1,32 sg 0,04 sg (aprox. 33 veces más rápido) consultar un primer 3,95 sg 3,55 sg (aprox. 1,11 veces más rápido) lote de 500 registros consultar un siguiente 3,67 sg. 1,63 sg (aprox. 2,25 veces más rápido) lote de 500 registros
    12. 12. Pruebas de concepto versión en versión en Operación voluminosa J2EE Java EE 5 Observaciones (CORE) (SEAM)consulta voluminosa que procesa 500.000 (aprox. 2,13 veces más 88 minutos 41 minutosregistros mediante join de 2 tablas rápido)consulta voluminosa que procesa 823.000 (aprox. 1,97 veces más 239 minutos 121 minutosregistros mediante join de 2 tablas rápido)consulta voluminosa que procesa 770.000 (aprox. 1,7 veces más 100 minutos 59 minutosregistros sobre una sola tabla rápido)actualización voluminosa sobre 770.000 (aprox. 1,45 veces más 0,46 minutos 0,67 minutosregistros de una tabla rápido)
    13. 13. EJB 3.0 Stateful Stateless Interceptores Inyección de dependencias @EJB11/27/09 Core5 Slide 13
    14. 14. EJB 3.0 Stateful Las instancias de beans de sesion contienen un estado conversacional que debe sobrevivir a traves de métodos y transacciones. @Local @Local: Indica que public interface Login { la interfaz es local. Stateful //declaracion de metodos @Scope(ScopeType.SESSION) } @Name("login") public class LoginAction implements Login { @Remote: Indica que @Remote la interfaz es remota @Remove public interface Login { //declaracion de metodos public void destroy() { } } } @Stateful: Indica que el Bean de Sesión es con @Remove: Indica que el estado. contenedor debe llamar al método cuando quiera destruir la instancia name - por defecto el nombre de la clase pero se puede especificar otra diferente. del Bean mappedName - si se quiere que el contenedor maneje el objeto de manera específica. Si incluimos esta opción nuestra aplicación puede que no sea portable y no funcione en otro servidor de aplicaciones. description - descripción de la anotaciónMétodos CallBack que interceptan el ciclo de vida del EJB: @PostConstruct, @PreDestroy,@PrePassivate, and @PostActivate 11/27/09 Core5 Slide 14
    15. 15. EJB 3.0 StatelessEl ciclo de vida de un bean de sesion STATELESS no requiere que el usuario declare un metodo Remove , la eliminacionde un bean de sesion STATELESS es ejecutada por el contenedor y es transparente al cliente. Si se declaran metodoscallback PrePassivate or PostActivate estos seran Ignorados. @Local @Local: Indica que la public interface Cache { interfaz es local. //declaracion de metodos @Stateless } @Name("cache") public class CacheBean implements Cache { @Remote @Remote: Indica que la public interface Cache { interfaz es remota ... //declaracion de metodos } } @Stateless: Indica que el Bean de Sesión es sin estado. *mismos atributos que @Stateful11/27/09 Core5 15Slide
    16. 16. EJB 3.0 Interceptores public class ProcessTimeInterceptor { public ProcessTimeInterceptor() { } @AroundInvoke public Object registerProcessTime(InvocationContext invocation) throws Exception { long tiempoInicial = System.currentTimeMillis(); Object result = invocation.proceed(); long tiempoFinal = System.currentTimeMillis(); long tiempoTotal = tiempoFinal - tiempoInicial; } @AroundInvoke: Designado a un método de un Interceptor. Se llamará; a este método siempre que se llame a un método anotado con @Interceptors ({NombreInterceptor.class}) donde NombreInterceptor es la clase donde se declara el método anotado con @AroundInvoke import javax.interceptor.Interceptors; @Interceptors({ProcessTimeInterceptor.class, ExceptionInterceptor.class}) public boolean authenticate() throws CoreException, Exception { .... } @Interceptors: Interceptores asociados con el Bean. Entre paréntesis y llaves se indican las clases donde se declaran.11/27/09 Core5 Slide 16
    17. 17. EJB 3.0 Inyeccion de dependencias @EJBEl concepto de inyección de dependencias se refiere a la separación entre la construcción deun objeto a la de su utilización. El contenedor es el encargado de la creación y destrucción delobjeto que es devuelto a quien lo solicita.@EJB: Mediante esta anotación el contenedor asignará; la referencia del EJBindicado. * name – nombre del recurso. * BeanIntefface – tipo de la interfaz de referencia * BeanName - nombre del Bean especificado con el atributo name en caso de que varios Beans implementen la misma interfaz . * description - descripción de la anotación para la inyección de dependencia. @EJB Donde Login hace referencia a private Login login; la interfaz del EJB@Resource: Referencia de un recurso específico. name – nombre del recurso. type - tipo del objeto (Object.class por defecto) authenticationType - especifica dónde se debe realizar el proceso de autenticación, por defecto AuthSenticationType.CONTAINER shareable - indica si el objeto se comparte, por defecto true. mappedName - si se quiere que el contenedor maneje el objeto indicado de manera específica. description - descripción de la anotación para la inyección de dependencia. 11/27/09 Core5 Slide 17
    18. 18. JPA (Java Persistence API) Caracteristicas de las Entidades Java Persistence Generación de llaves primarias Relaciones de asociación, bidireccional y unidireccional. @OneToMany, -@ManyToMany - @OneToOne- @ManyToOne (Paralelo Entidad - Tabla) Servicios de persistencia11/27/09 Core5 Slide 18
    19. 19. Entidades Este mapeo puede realizarse a través de un producto objeto relacional, llamado proveedor de persitencia, como hibernate, que automatiza el proceso de asignación de entidades a tablas.11/27/09 Colocar aqui la Línea de Negocio a la que pertenece esta presentación
    20. 20. Anotaciones Las anotaciones de JPA se clasifican en dos categorías: Anotaciones de mapeo lógico que permiten describir modelo de objeto, asociaciones de clase, etc. Anotaciones de mapeo físico que describen esquemas físicos de base de datos, tablas, columnas, índices, etc.11/27/09 Colocar aqui la Línea de Negocio a la que pertenece esta presentación
    21. 21. Caracteristicas de las Entidades Java Persistence/* Indica que el Bean es de Entidad */@Entity/* Tabla a mapear el bean EmpleadoEB, en este caso se mapeará a la tabla empleado */@Table(name = "empleado")/* Los Beans de Entidad deben implementar la interfaz Serializable */public class EmpleadoEB implements Serializable { private static final long serialVersionUID = -4746762732969376696L; private int idEmpleado; private String nombre; private String apellidos; /* algunos de los tipos de arreglo permitidos */ private Collection<Order> orders = new HashSet(); private Set<PhoneNumber> phones = new HashSet(); /* Deben tener un constructor sin argumentos */ public EmpleadoEB() { …. } /* Clave primaria de la tabla empleado’ */ @Id /* Indica que la generación de la clave será automática (la aporta la base de datos) */ @GeneratedValue(strategy = GenerationType.AUTO) public int getIdEmpleado() { return idEmpleado;} }11/27/09 Core5 Slide 21
    22. 22. Generación Automatica de claves primariasEn EmpleadoEB se han usado anotaciones especiales en la propiedad de la clave primaria para que: Los valores se generen mediante una secuencia (si la BD proporciona secuencias) Se mapee a una columna contador (si la BD ofrece columnas contador) @GeneratedValue strategy •Especifica la estrategia de generación de identificadores numéricos •Es de tipo GenerationType(enumerado). Entre otros, es posible especificar los siguientes valores SEQUENCE: usar una secuencia IDENTITY: mapear la clave a una columna contador AUTO: Hibernate decide la estrategia en función de la BD usada Generator •Especifica el nombre del generador que se usará en el caso de la estrategia SEQUENCE
    23. 23. Otros tipos de datos Atributo correspondiente a una columna voluminosa (BLOB): @Lob private byte [ ] foto; Atributo que toma valores de una enumeración:puede guardar los valores como enteros o como cadenas:public enum Status {PENDING,CANCELLED,ACTIVE}private Status status = Status.PENDING;@Enumerated (EnumType.STRING)private Status status = Status.PENDING; valor por omisión: @Enumerated (EnumType.ORDINAL)
    24. 24. Relaciones de asociación Generalidades: @OneToMany : atributo que es lista de detalles: indica que la entidad mantiene con este atributo una relación maestro-detalles @ManyToOne : en un atributo de una entidad detalle, indica que el atributo representa a la entidad maestra @OneToOne: atributo que representa entidad con la cual se mantiene relación 1-1 @ManyToMany: atributo lista de entidades con las cuales se mantiene relación N-N Opcionalmente (mappedBy="atribMaestro",cascade=CascadeType.ALL) : indica atributo maestro en la entidad detalle y si hay efecto cascada @OrderBy("description asc") : para un atributo lista de detalles indica el orden en que deben ser obtenidos sus miembros Evaluación temprana (EAGER) o perezosa (LAZY) de entidades relacionadas –@OneToOne y @ManyToOne implican por omisión evaluación temprana; se puede cambiar a perezosa, –@OneToMany y @ManyToMany implican por omisión evaluación perezosa; se puede cambiar a temprana .11/27/09 Core5 Slide 24
    25. 25. Relaciones bidireccionales OneToOne:@Entity @Entitypublic class Employee { public class Cubicle {// La entidad Employee hace una referencia simple // La entidad Cubicle hace una referencia simple a la entidad a la entidad Cubicle employeeprivate Cubicle assignedCubicle; private Employee residentEmployee;@OneToOne // se hace el mapeo a la entidad Employee lo que indica quepublic Cubicle getAssignedCubicle() { la entidad Employee es la entidad maestra ó dueñareturn assignedCubicle; @OneToOne(mappedBy="assignedCubicle")} public Employee getResidentEmployee() {public void setAssignedCubicle(Cubicle cubicle) { return residentEmployee;this.assignedCubicle = cubicle; }} ... public void setResidentEmployee(Employee employee) {} this.residentEmployee = employee; } ... } 11/27/09 Core5 Slide 25
    26. 26. Relaciones bidireccionales ManyToOne / OneToMany@Entity @Entitypublic class Employee { public class Department {//Entity Employee references a single instance of Entity //Entity Department references a collection of Entity Employee.Department. private Collection<Employee> employees = new HashSet();private Department department; //Entity Employee is the owner of the relationship.@ManyToOne @OneToMany(mappedBy="department")public Department getDepartment() { public Collection<Employee> getEmployees() {return department; return employees;} }public void setDepartment(Department department) { public void setEmployees(Collection<Employee> employees) {this.department = department; this.employees = employees;} }... ...} } 11/27/09 Core5 Slide 26
    27. 27. Relaciones bidireccionales ManyToMany@Entity @Entitypublic class Project { public class Employee {//Entity Project references a collection of Entity Employee. //Entity Employee references a collection of Entity Project.private Collection<Employee> employees; private Collection<Project> projects;@ManyToMany //Entity Project is the owner of the relationship.public Collection<Employee> getEmployees() { @ManyToMany(mappedBy="employees")return employees; public Collection<Project> getProjects() {} return projects;public void setEmployees(Collection<Employee> employees) { }this.employees = employees; public void setProjects(Collection<Project> projects) {} this.projects = projects;... }} ... }11/27/09 Core5 Slide 27
    28. 28. Archivos XML Los datos de persistencia estan especificados con el uso de anotaciones, de archivos xml ó una mezcla de ambos, en el último caso las declaraciones que esten en el archivo xml tienen prioridad sobre las anotaciones en caso de conflictos. Si esta usando el archivo XML este debe estar disponible en tiempo de ejecucion, y se debe encontrar en alguno de estos lados: 1. En un recurso con el nombre orm.xml en el directorio META-INF. 2. Declarado en el archivo de configuracion persistence.xml . <entity-mappings> <entity class="Subscription"> <attributes> <id name="id"/> <basic name="payment"/> <basic name="startDate"/> <version name="version"/> ... </attributes> </entity> <entity class="LifetimeSubscription" name="Lifetime"> <attributes> <basic name="eliteClub" fetch="LAZY"/> ... </attributes> </entity> </entity-mappings> </entity-mappings>11/27/09 Core5 Slide 28
    29. 29. Entity Manager Es la interfaz que permite acceder a las entidades en el contexto de persistencia y realizar operaciones CRUD sobre ellas. •Pueden definirse varias unidades de persistencia y hacer uso de cada uno de ellas en la aplicación •En datasource (<proyecto>-ds.xml) se registra el nombre JNDI de la conexión11/27/09 Core5 Slide 29
    30. 30. EntityManager Unidad de persistencia En el persistence.xml se establece el nombre de la unidad de persistencia y se asocia a la conexión del datasource.02/06/2010 Core 5
    31. 31. EntityManager Unidad de persistencia En el components.xml se registra la fabrica como componente SEAM.02/06/2010 Fábrica de SW
    32. 32. EntityManager Unidad de persistencia * En las clases en las que se vaya a utilizar se inyecta el contexto de persistencia (componente SEAM) * Uso en clase plana02/06/2010 Fábrica de SW
    33. 33. Servicios de Persistencia •persist (entity) Inserta en la BD el registro de la entidad •find(entity.class, Id) Select de una entidad existente, dada la PK •merge(entity) Update – la entidad se vuelve manejada – se refleja en la BD su versión en memoria. Servicios sobre una entidad manejada •refresh(entity) Select BD de una entidad existente – cancelando posibles cambios en memoria •remove(entity) Delete BD •flush() Aplicar cambios que se tienen acumulados en memoria a la BD.11/27/09 Core5 Slide 33
    34. 34. JPQL Java Persistence Query Language •Consultas sobre entidades. •Sentencias de consultas en una forma portable (independiente del motor de Base de Datos).@PersistenceContextEntityManager em;Object obj = em.createQuery("SELECT c FROM Cliente c WHERE c.nombre = :param1").setParameter(“param1”,”Ana”) .getSingleResult();“SELECT f FROM File f WHERE f.line.name =:?”NamedQuery@NamedQuery(name = "findCostumerByName", query = "SELECT c FROM Cliente c WHEREc.nombre =: param1") List clientes <Cliente> = em.createNamedQuery("findCustomerByName") .setParameter("param1", "diana”).getResultList();();em.createNativeQuery(queryString)
    35. 35. TaylorEl framework Taylor permite modelar gráficamente entidades sencillas o complejas ysus relaciones incluyendo herencia. Igualmente Taylor permite generar las clasesJava correspondientes al modelo de entidades. http://taylor.sourceforge.net/index.php/Tutorial
    36. 36. SEAM Introducción Contextos seam Conversación Sistema de bijeccion Características de componentes seam Seguridad Page navigation (pages.xml)11/27/09 Colocar aqui la Línea de Negocio a la que pertenece esta presentación Slide 36
    37. 37. IntroducciónSeam es un framework que facilita el desarrollo de aplicaciones Java EE 5 a nivelempresarial, que se rige, entre otros, por los siguientes principios:Se basa en un modelo de componentes uniforme para toda la lógica deaplicación.Unifica los modelos de componentes de JSF y EJB3, eliminando códigointermedio y permitiendo al desarrollador concentrarse en la lógica de negocio.Permite el manejo declarativo de estado (conversation management).Facilita el control de valores de variables de contexto (bijection). Las anotaciones son preferibles a XML.Facilita la ejecución de pruebas: ya que los componentes Seam son clasessimples de Java.
    38. 38. SEAM Contextos Tipos de contextos en Seam •StatelessContext: variables sinestado (ej: ejbs sin estado); en realidad no es un contexto •EventContext: equivale al request context, asociado a un pedido JSF •PageContext: estado asociado a una pantalla mostrada •ConversationContext: unidad de trabajo para el usuario, puede durar varios pedidos •SessionContext: asociada a toda la sesión de un usuario •BusinessContext: asociado a un proceso de negocio que puede involucrar múltiples interaccionees con múltiples usuarios •ApplicationContext: asociado alEl orden de búsqueda de una estado global del servidorvariable en los contextos va @Scope(CONVERSATION)desde event hasta application11/27/09 Core5 Slide 38
    39. 39. SEAM- Conversación Una conversación es un una unidad de trabajo creada por Seam en el cual el usuario puede establecer su alcance. (donde inicia y donde termina) todas sus variables se encuentran en contexto de conversacion. Una conversación se puede iniciar por medio de un control de Una conversación se puede finalizar por navegación SEAM (s:button, medio de un control de navegación s:link.. ) ó utilizando la anotación SEAM (s:button, s:link.. ) ó utilizando la @Begin en un método. anotación @End en un método. @Begin @End public void selectHotel(Hotel public void confirm() selectedHotel) { { em.persist(booking); .. . hotel = em.merge(selectedHotel); } <s:link view-id=”/main.xhtml” value=”Return to main” propagation=”begin” />11/27/09 Core5 Slide 39
    40. 40. SEAM ComponenteLos componentes Seam son en particular JavaBeans ó EJB 3.0 enterprise beans. Para quesu componente pueda hacer uso de anotaciones Seam es necesario realizar el registro dedicho componente.Todos los componentes Seam necesitan tener un nombre unico, esto se hace por mediode la anotacion @Name @Name("loginAction") @Stateless public class LoginAction implements Login { ...Es posible modificar el contexto por defecto de un componente usando la anotacion@Scope la cual nos permite definir el contexto en el cual se ubicara el componente Seacuando sea instaciado. @Name("user") @Entity @Scope(SESSION) public class User { ... } 11/27/09 Core5 Slide 40
    41. 41. SEAM Sistema de bijecciónBijección es una caracteristica que nos permite adicionar y tomar variables de un contexto pormedio de anotaciones. contexto. @In anotacion a nivel de @Out anotacion a nivel de campo. Toma campo con su campo ó metodo. Pone el valor del contexto. campo con su valor en el contexto. @In(required = false) @Out(required = false, scope = ScopeType.SESSION) private User user; 11/27/09 Core5 Slide 41
    42. 42. SEAM Seguridad Seguridad por Roles. por anotaciones se puede proteger todo un EJB o un servicio particular de un EJB para que solo pueda ser invocado por un rol particular. Cada botón de una pantalla se puede habilitar o mostrar solo para un rol particular @In private Identity identity; identity.addRole(role); @Restrict ("#{s:hasRole(bookingList)}") a nivel de clase ó de metodo •habilitando / deshabilitando el elemento según el rol del usuario, ej: <h:inputText id="searchString" value="#{hotelSearching.searchString}" disabled="#{!s:hasRole(hotelSearching)}"> •mostrando / ocultando el elemento según el rol del usuario, por ej: <s:button id="viewHotel" value="Ver hotel" action="#{hotelBooking.selectHotel(hot)}" styleClass="buttonSmall" rendered="#{s:hasRole(hotelBooking_selectHotel)}"/>11/27/09 Core5 Slide 42
    43. 43. SEAM pages.xml Seam provee un lenguaje de navegacion que incorpora manejo de conversación, seguridad, manejo de excepciones, entre otros.11/27/09 Core5 Slide 43
    44. 44. Capa de presentación Controles JSF de SEAM Anotaciones SEAM para usar con JSF Validaciones Hibernate JBOSS EL Functions. RichFaces (algunos componentes)11/27/09 Core5 Slide 44
    45. 45. Controles JSF de SEAM I• Controles de navegación<s:button> permite controlar la propagación de una conversación<s:link> permite controlar la propagación de una conversación<s:conversationPropagation> permite controlar la propagación de una conversación en botones y links jsf<s:defaultAction> Permite que un botón sea la acción por defecto al presionar la tecla enter• Convertidores y Validadores <h:inputText id="nameVerification" > <s:validateEquality for="name" /> </h:inputText><s:convertEntity> Convierte a entidad manejada un item seleccionado.<<s:convertEnum> Convierte a enum un item seleccionado.<s:validateEquality> Valida la equivalencia de 2 valores. Se pueden usar operadores (<,>.=<)<s:validate> <s:validateAll> Se valida el valor contra las anotaciones Hibernate en la entidad. Crea una lista de tipo SelectItem.<s:selectItems> 11/27/09 Core5 Slide 45
    46. 46. Controles JSF de SEAM II – Formatos <s:decorate> Permite ‘decorar’ un elemento input JSF, para adicionar el campo de error, s:validate ó required = true. <s:fragment> permite renderizar un area con componentes que no lo permitirian <s:label> Se ubica el Label al componente inputText jsf mas cercano. – Otros <s:enumItem> Crea un selectItem de un enum <s:enumItem enumValue="ONCE" label="Only Once" /> Control para cargar un archivo <s:fileUpload id="picture" data="#{register.picture}" <s:fileUpload> accept="image/png" contentType="#{register.pictureContentType}" /> <s:graphicImage> permite crear la imagen en un componente seam para futuras modificaciones11/27/09 Core5 Slide 46
    47. 47. Validadores Hibernate11/27/09 Core5 Slide 47
    48. 48. JBoss EL Seam hace uso de JBoss EL el cual provee unas mejoras al estandar Unified Expression Language (EL). Algunas de estas mejoras son: El estandar EL no permite el uso de métodos con parametros definidos por el usuario. JBoss EL si lo permite. •Si se usa más de un parametro , estos deben ir separados por comas: action="#{hotelBooking.bookHotel(hotel, user)}" <h:commandButton action="#{hotelBooking.bookHotel(hotel)}" value="Book Hotel"/> •Los valores deben ser expresados en parametros: @Name("hotelBooking") public class HotelBooking { action="#{hotelBooking.bookHotel(hotel.id, user.username)}" public String bookHotel(Hotel hotel) { // Book the hotel •Si desea expresar un String literalmente solo se debe usar : } } action="#{printer.println(Hello world!)}" JBoss EL permite acceder a propiedades/métodos sin que tengan la convecion set ó get. • <h:outputText value="#{person.name}" rendered="#{ person.name.length() > 5}" /> • Collection #{searchResults.size()} • Una expresión como #{obj.property} es quivalente a {obj.getProperty()}.11/27/09 Core5 Slide 48
    49. 49. RichFaces II rich:extendedDataTable adiciona las siguientes funcionalidades al componente rich:dataTable: * Scroll * Seleccion de filas. * Administracion de modos de seleccion (sin seleccion, 1 linea ó multiples lineas) * Reordenar columnas haciendo drag and drop de los headers. * Mostrar/Esconder columnas * Agrupar filas por Columnas11/27/09 Core5 Slide 49
    50. 50. Referecias http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=AnotacionesEJB3 http://java.sun.com/javaee/5/docs/tutorial/doc/bnbrm.html http://www.seamframework.org/11/27/09 Core5 Slide 50
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×