Introduccion JEE5
Upcoming SlideShare
Loading in...5
×
 

Introduccion JEE5

on

  • 2,059 views

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

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

Statistics

Views

Total Views
2,059
Views on SlideShare
2,059
Embed Views
0

Actions

Likes
0
Downloads
65
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • 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 Introduccion JEE5 Presentation Transcript

  • 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 del estándar JEE5• Caracteristicas del estándar JEE511/24/09 Meta-Framework Core5 Slide 2
  • 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
  • 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 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
  • • 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)
  • 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
  • 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)
  • 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é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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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)
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • EntityManager Unidad de persistencia En el components.xml se registra la fabrica como componente SEAM.02/06/2010 Fábrica de SW
  • 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
  • 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
  • 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)
  • 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
  • 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
  • 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.
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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 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
  • 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
  • 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