De Tales from TheServerSide.com
This presentation is the property of its rightful owner.
Sponsored Links
1 / 60

de Tales from TheServerSide PowerPoint PPT Presentation


  • 80 Views
  • Uploaded on
  • Presentation posted in: General

de Tales from TheServerSide.com. Agenda. Los componentes en un desarrollo J2EE. J2EE y los EJBs Historia y evolución Problemática La elección pragmática. EJB 3.0 Evolución de los EJBs Tour por EJB 3.0 Ejemplos. ¿Qu é dirección tomar ?. Conclusiones. Agenda.

Download Presentation

de Tales from TheServerSide

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


De tales from theserverside

de Tales from TheServerSide.com


Agenda

Agenda

  • Los componentes en un desarrollo J2EE

  • J2EE y los EJBs

    • Historia y evolución

    • Problemática

    • La elección pragmática

  • EJB 3.0

    • Evolución de los EJBs

    • Tour por EJB 3.0

    • Ejemplos

  • ¿Qué dirección tomar?

  • Conclusiones


Agenda1

Agenda

  • Los componentes en un desarrollo J2EE

  • J2EE y los EJBs

    • Historia y evolución

    • Problemática

    • La elección pragmática

  • EJB 3.0

    • Evolución de los EJBs

    • Tour por EJB 3.0

    • Ejemplos

  • ¿Qué dirección tomar?

  • Conclusiones


C omponentes j2ee

Componentes J2EE

Framework de productividad J2EE

Presentación

JSP, Strut, JSF, Ajax,

Flex, GWT, Swing

  • Build

  • Ant

  • Maven

  • Eclipse / IDE’s

  • APT / XDoclets

  • JUnit

  • OpenSTA

  • Log4J

  • CVS/SVN

  • Infraestructura

  • Apache

  • Tomcat

  • JBoss

  • Weblogic

  • Websphere

  • Oracle AS

  • AspectJ

Middleware

EJBs (CMP, MDB, Session, …) Hibernate, Kodo, Spring, Jakarta Commons

Base de Datos

Oracle, DB2, SAP DB, SQL Server, MySQL, HSQLDB, PostgreSQL


C omponentes j2ee1

Componentes J2EE

Framework de productividad J2EE: Build

  • Sistema de build

    • Ant sigue siendo imbatible

    • Maven

  • IDE

    • Eclipse y plugins

    • Intellij IDEA ($), BEA Workshop, NetBeans, JBuilder ($)

  • Calidad

    • JUnit (Frameworks XUnit), JMeter, OpenSTA, LoadRunner ($)

    • CheckStyle, JDepend, PMD

    • SVN, CVS, ClearCase ($)

    • Quest JProbe ($), Borland OptimizeIt ($)


C omponentes j2ee2

Componentes J2EE

de Tales from TheServerSide.com

  • Cliente pesado

    • Swing

    • Java Web Start

Framework de productividad J2EE: Presentación

  • Framework MVC

    • Struts, Struts Tiles (documentación, experiencia, …)

    • Tapestry, JSF, Flex, GWT, Seam, etc: menor experiencia


C omponentes j2ee3

Componentes J2EE

Framework de productividad J2EE: Middleware

  • Persistencia

    • EJB, JDO, TopLink, Hibernate, Kodo

  • Integración de los componentes

    • Spring, HiveMind,Jakarta Commons

  • Infraestructura

    • Weblogic, Webphere, Oracle 9i AS, JBoss, Tomcat

  • Supervisión de la programación por aspectos (AOP)

    • Seguridad, auditoria, log

    • Spring, AspectJ


Agenda2

Agenda

  • Los componentes en un desarrollo J2EE

  • J2EE y los EJBs

    • Historia y evolución

    • Problemática

    • La elección pragmática

  • EJB 3.0

    • Evolución de los EJBs

    • Tour por EJB 3.0

    • Ejemplos

  • ¿Qué dirección tomar?

  • Conclusiones


J2ee y los ejbs

J2EE y los EJBs

EIS

WEB

Business

Browser

JSP

Servlet

Entity Beans

Session Beans

MD Beans

Componentes JavaBeans (Opcional)

Base de Datos

Client

Servidor J2EE

  • Session Beans : conversación, lógica de negocio

  • Entity Beans : persistencia

  • Message Driven Beans : Session Bean + JMS


J2ee y los ejbs1

J2EE y los EJBs

J2EE != EJB

  • Los EJB fueron vendidos como la solución a todos los problemas.

  • Basado más sobre

    • especificaciones que sobre experiencia (EJB 2.1, 646 páginas)

    • implementar una arquitectura distribuida que sobre su utilización

  • Gartner Group afirmó que desde el 2003, se han gastado 2 billones de dólares innecesariamente en application servers

  • Después de muchos años, fuerte reacción anti-EJB


J2ee y los ejbs2

J2EE y los EJBs

Servicios

  • El application server provee:

    • Connection pooling

    • Soporte Transaccional

    • Thread pooling

    • Clustering, load balance, high availability

  • El container EJB provee:

    • Transacciones declarativas (CMT)

    • Seguridad declarativa

    • Business Object pooling!


J2ee y los ejbs3

J2EE y los EJBs

EJBs : Los problemas

  • Es muy ‘engorroso’

    • Intrusivo: javax.ejb, interfaces, callback methods

    • Combinación de checked / unchecked exceptions

    • JNDI lookups

    • Chequeo semántico al momento de deploy

  • Infierno de METADATA XML

    • Complejo de sincronizar

    • Faltan defaults útiles

  • Entity Beans

    • La implementación local no puede ser devuelta al cliente

    • No tiene estrategias de mapeo para herencia

    • No son polimórficos

    • EJB-QL/finders en la práctica, muy limitante


J2ee y los ejbs4

J2EE y los EJBs

EJBLocalObject

public interface Customer implements EJBLocalObject

{

long getId();

setId(long id(;

}

Sincronización

Mantenimiento

EJBLocalHome

public interface CustomerHome implements EJBLocalHome

{

}

EJBObject

public interface CustomerRemote implements EJBObject

{

long getId();

setId(long id(;

}

EJBHome

public interface CustomerRemoteHome implements EJBHome

{

}

ejb-jar.xml

<ejb-jar>

<enterprise-beans>

<entity>

<ejb-name>Customer</ejb-name>

<local-home>CustomerHome</local-home>

<local>Customer</local>

<ejb-class>CustomerBean</ejb-class>

….

Desing Patterns

weblogic-rdbms-ejb-jar.xml

<weblogic-rdbms-jar>

<weblogic-rdbms-bean>

<ejb-name>Customer</ejb-name>

<data-source-name>java:/dataSource</data-source-name>

<table-name>CUSTOMER</table-name>

<field-map>

<cmp-field>id</cmp-field>

<dbms-column>ID</dbms-column>….

ServiceLocator

DTO

weblogic-ejb-jar.xml

<weblogic-enterprise-bean>

<ejb-name>Customer</ejb-name>

<jndi-name>Customer</jndi-name>

</weblogic-enterprise-bean>

Bussines Delegate

etc …

/ Generadores

EJBs : Los problemas

EJB

public class CustomerBean extends EntityBean

{

public abstract long getId();

public abstrac setId(…

}

  • Productividad ??

  • WORA ??

  • Fácil de Testear ??

  • Diseño restringido ??


J2ee y los ejbs5

J2EE y los EJBs

EJBs desde un punto de vista pragmático:

  • Stateless Session Beans

  • Container Managed Transactions(JTA)

  • Message Driven Beans (MDBs)

  • Utilización de POJOs (JavaBeans)

  • Persistencia con framework no EJB (ORM)


J2ee y los ejbs6

J2EE y los EJBs

de Tales from TheServerSide.com

  • Dejan al descubierto los problemas de desarrollar con EJB, y son las premisas de un ‘otro’ modo de desarrollar aplicaciones J2EE

Evolución de la plataforma J2EE

  • Experiencia acumulada en el desarrollo de aplicaciones J2EE

  • Un conjunto de tecnologías y frameworks, modificados considerablemente resultaron en:

    • AOP

    • Hibernate, JDO, …

    • Framework IoC: Spring, HiveMind, …

    • TDD


J2ee y los ejbs7

J2EE y los EJBs

EJB : Pequeña historia

  • Marzo 1998: EJB 1.0

  • Noviembre 1999: EJB 1.1

    • deployment descriptors, seguridad, entity beans,…

  • Agosto 2001: EJB 2.0

    • Local interfaces, relationships, EJB-QL, MDBs…

  • Noviembre 2003 : EJB 2.1 (JSR-153)

    • EJB-QL (order by, avg, max, min, sum, count),

    • EJB Timer service…

  • Junio 2004: EJB 3.0 Early Draft (JSR-220)

  • Mayo 2006: EJB 3.0 Final Release (JSR-220)


Agenda3

Agenda

  • Los componentes en un desarrollo J2EE

  • J2EE y los EJBs

    • Historia y evolución

    • Problemática

    • La elección pragmática

  • EJB 3.0

    • Evolución de los EJBs

    • Tour por EJB 3.0

    • Ejemplos

  • ¿Qué dirección tomar?

  • Conclusiones


Ejb 3 0

EJB 3.0

de Tales from TheServerSide.com

  • El objetivo: "evolucionar rápidamente para soportar un gran rango de desarrolladores, incluyendo aquellos menos sofisticados”

Horizonte

  • JSR-175(Java 1.5), anotacionespueden reemplazar deployment descriptors

  • Compatibilidad ascendente

    • EJB 2.x no está ‘deprecado’

    • Hay un asentimiento de lasfalencias no reconocidas.

  • Persistencia tipo ORM

    • Especificacion separada (JPA)

    • Ventaja para los que ya tengan un producto (JBoss, Weblogic, Oracle)

    • Sumar al EJB Expert Group gente de JDO.


Ejb 3 01

EJB 3.0

/**

[email protected] table="CATS"

*/

public class Cat {

/**

* @hibernate.propertycolumn="BIRTH_DATE"

*/

public Date getBirthdate() {

JSR-175

@Session public class IdGeneratorImpl implements IdGenerator

@TransactionAttribute(REQUIRES_NEW)

public int nextId()

@Table(name=“ITEMS”) public class Item {

  • Se definen en .java (sintaxis similar a una interfaz).

  • Se acceden por introspección o procesador de anotaciones (apt).

  • Hay que importarlos para utilizarlos:

  • import javax.persistence.Session;


Ejb 3 02

EJB 3.0

Session Beans

  • POJO

  • Sin interfaz Home, otras interfaces POJI.

  • Métodos Callbacks opcionales

    • (@PostConstruct, @PreDestroy, @PostActivate, @PrePassivate)

  • Interceptors (@Interceptor, @AroundInvoke)

  • Metadata como anotaciones

    • Bean type, @Session, @Stateful, @MessageDriven

    • Transaction attributes, @Transaction

    • Dependency injection @EJB, @Resource, @PersistenceContext,

    • Remoteness @Remote, @Local, @WebService (JSR-181)

    • Remove method para stateful beans @Remove

    • Rollback @ApplicationException(rollback=true)

  • Inyección de dependencias


Ejb 3 03

EJB 3.0

Inyección de dependencias

  • IoC Framework

    • Inversión del control

    • Principio de Hollywood – "Don't call me I will call you"

    • Dependency Injection

  • Los componentes no poseen más el conocimiento de las dependencias, sino que éstas son ‘inyectadas’.

  • Tipos de ‘injection’ :

    • Anotación de variable pública de instancia

    • Setter Injection


Ejb 3 04

EJB 3.0

Ejemplo de EJB Session + Injection

  • @Remote

  • interface IdGenerator { int nextId(); }

  • @Session

  • public class IdGeneratorImpl implements IdGenerator {

  • @Resource(name=“jdbc/PROD_OLTP”)

  • public Datasource idDatasource;

  • @TransactionAttribute(REQUIRES_NEW)

  • public int nextId() {

  • Connection c = idDatasource.getConnection();

  • try {

  • Statement s = c.createStatement(“select sequence.nextval from dual”);

  • ResultSet rs = s.executeQuery();

  • rs.next();

  • return rs.getInt(1);

  • }

  • catch (SQLException sqle) {

  • throw new RuntimeException(sqle);

  • }

  • finally { c.close(); }

  • }

  • }


Ejb 3 05

EJB 3.0

Ejemplo de EJB Session + Injection

@Session

@Remote(IdClient.class)

public class IdClientImpl implements IdClient {

@EJB public IdGenerator idGeneratorBean;

private SessionContext ctx;

@Resource

public void setSessionContext(SessionContext ctx) {

this.ctx = ctx;

}

public void useId() {

int id = idGeneratorBean.nextId();

...

}

}


Ejb 3 06

EJB 3.0

Entity Beans

  • POJO

    • No requieren interfaces / herencias especiales

    • Se pueden serializar, pueden ser devueltos al cliente

  • No requieren interface Home

  • Propiedades Id / Version

  • Soportan herencia y polimorfismo !!!

  • O/R Mapping Metadata como anotaciones

    • Table mappings, @Table, @SecondaryTable

    • Column mappings, @Column, @JoinColumn

    • Associations, @ManyToOne, @OneToOne, @OneToMany, @ManyToMany

    • Inheritance, @Inheritance, @DiscriminatorColumn

    • Identifier + Version properties, @Id, @Version

    • etc…


Ejb 3 07

EJB 3.0

Entity Beans

  • Métodos Callbacks opcionales.

  • @PrePersist, @PostPersist, @PreRemove, @PostRemove, @PreUpdate, @PostUpdate, @PostLoad

  • EntityListener (@EntityListener)

  • @PrePersist, @PostPersist, @PreRemove, @PostRemove, @PreUpdate, @PostUpdate, @PostLoad


Ejb 3 08

EJB 3.0

Ejemplo de Entity Bean

@Entity

@Table(name=“FACTURAS”)

public class Factura {

private Long id;

private int version;

private Date fecha;

private Set<ItemFactura>items = new HashSet<ItemFactura>();

@Column(name=“FECHA”, nullable=false)

public Date getFecha() {

return fecha;

}

public void setFecha(Date fecha) {

this. fecha = fecha;

}


Ejb 3 09

EJB 3.0

Ejemplo de Entity Bean

...

@Id @Column(name=“ITEM_ID”)

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

@Version

public int getVersion() {

return version;

}

protected void setVersion(int version) {

this.version = version;

}

...


Ejb 3 010

EJB 3.0

Ejemplo de Entity Bean

@ManyToOne(fetch=FetchType.LAZY)

@JoinColumn(name=“PRODUCTO_ID”,nullable=false, updatable=false)

public Producto getProducto() {

return producto;

}

protected void setProducto(Producto producto) {

this.producto = producto;

}

...


Ejb 3 011

EJB 3.0

Ejemplo de Entity Bean

@OneToMany(cascade=CascadeType.ALL)

@Column(name=“FACTURA_ID”, nullable=false, updatable=false)

protected Set<ItemFactura> getItems() {

return this.items;

}

protected void setItems(Set<ItemFactura> items) {

this.items = items;

}

...


Ejb 3 012

EJB 3.0

EntityManager API

  • Una interfaz “home” genérica (no tipificada)

  • Tiene asociado un contexto de persistencia

  • Es utilizado para crear, modificar y borrar entidades

  • Se pueden asociar entidades obtenidas en otros contextos a un contexto determinado


Ejb 3 013

EJB 3.0

EntityManager API

merge()

SQL UPDATE

merge()

SQL INSERT

new

New

Managed

Detached

persist()

SQL INSERT

remove()

SQL DELETE

Contexto Finalizado


Ejb 3 014

EJB 3.0

Ejemplo de utilización de EntityManager

@Session

public class FacturasImpl implements Facturas {

@PersistenceContext(unitName=“myUnit”)

privateEntityManager em;

public Factura findById(Long id) {

return em.find(Factura.class, id);

}

public Long create(Factura factura) {

em.persist(factura); // factura es ahora ‘managed’

return factura.getId();

}

}


Ejb 3 015

EJB 3.0

EntityManagerFactory

  • Interfaz utilizada para obtener EntityManager’s

  • Se puede obtener mediante:

    • JNDI lookup

    • IoC (@PersistenceUnit)

    • Con la clase javax.persistence.Persistence

    • EntityManagerFactory emf;

    • EntityManager em;

    • emf = Persistence.createEntityManagerFactory(“myUnit”);

    • em = emf. createEntityManager();


Ejb 3 016

EJB 3.0

Persistencia ‘plugueable’

  • Se separó el API de persistencia (javax.persistence)

  • Se indica la implementación en el persistence.xml

  • Se podrá utilizar cualquier AS con cualquier implementación de persistencia.

<?xml version="1.0" encoding="UTF-8"?>

<persistence>

<persistence-unit name=“myUnit” transaction-type="JTA">

<provider>org.hibernate.ejb.HibernatePersistence</provider>

<jta-data-source>jdbc/MyDB</jta-data-source>

<class>com.acme.MyClass</class>

<properties>

<property name="hibernate.max_fetch_depth" value="4"/>

</properties>

</persistence-unit>

</persistence>


Ejb 3 017

EJB 3.0

miAplicacion.ear

miAplicacion.war

application.xml

web.xml

miModuloEJB.jar

miModulo.jar

ejb-jar.xml

persistence.xml

persistence.xml

Deployment Descriptor

  • Siguen existiendo.

  • Se pueden reemplazar o combinar con las anotaciones.

  • Sobreescriben lo indicado en las anotaciones


Ejb 3 018

EJB 3.0

Query API

  • Son expresadas en EJBQL

    • Embebidos en el código

    • Definidos por anotaciones

  • Query interface

    • Binding de parámetros

    • Control de paginación

  • Provee

    • Agregación

      SELECT c.status, avg(c.filledOrderCount), count(c)FROM Customer c

      GROUP BY c.statusHAVING s.status IN (1, 2)

    • Proyecciones

      SELECT new CustomerDetails(c.id, c.status, o.count)FROM Customer

    • SubSelects

      SELECT goodCustomer FROM Customer goodCustomer

      WHERE goodCustomer.balance < (SELECT avg(c.balance) FROM Customer c)

    • Querys Polimórficas !!!

    • Native Queries


Ejb 3 019

EJB 3.0

Ejemplo de utilización de Query

@Session public class ItemManagerImpl implements ItemManager {

public List findByDescription(String description, int page) {

return em.createQuery(

“select i from Item i where i.description like :d”)

.setParameter(“d”, description)

.setMaxResults(50)

.setFirstResult(page*50)

.listResults();

}


Ejb 3 020

EJB 3.0

En resumen

  • Una simplificación en comparación con EJB 2.x

    • El mapeo relacional pasa a ser parte de la especificación

  • Realmente orientado a objetos

  • Inserción de las "Best Practices" existentes

  • Utilización intensiva de anotaciones (JSR175 / JDK5)

  • Su especificación ya es ‘Final Release’

    • Aprobado el 11 de Mayo de 2006.

    • Ya hay implementaciones productivas.

  • Separación de la persistencia (JPA)


Ejb 3 021

EJB 3.0

En resumen

EJB

public class CustomerBean extends EntityBean

{

public abstract long getId();

public abstrac setId(…

}

EJB

@Entity

@Table (name=“CUSTOMER”)

public class CustomerBean

{

@Id @Column(name=“CUSTOMER_ID”)

public long getId() { return id; }

public setId(long i) { id = i; }

}

EJBLocalObject

public interface Customer implements EJBLocalObject

{

long getId();

setId(long id(;

}

Sincronización

Mantenimiento

EJBLocalHome

public interface CustomerHome implements EJBLocalHome

{

}

EJBObject

public interface CustomerRemote implements EJBObject

{

long getId();

setId(long id(;

}

EJBHome

public interface CustomerRemoteHome implements EJBHome

{

}

ejb-jar.xml

<ejb-jar>

<enterprise-beans>

<entity>

<ejb-name>Customer</ejb-name>

<local-home>CustomerHome</local-home>

<local>Customer</local>

<ejb-class>CustomerBean</ejb-class>

….

Desing Patterns

weblogic-rdbms-ejb-jar.xml

<weblogic-rdbms-jar>

<weblogic-rdbms-bean>

<ejb-name>Customer</ejb-name>

<data-source-name>java:/dataSource</data-source-name>

<table-name>CUSTOMER</table-name>

<field-map>

<cmp-field>id</cmp-field>

<dbms-column>ID</dbms-column>….

ServiceLocator

DTO

weblogic-ejb-jar.xml

<weblogic-enterprise-bean>

<ejb-name>Customer</ejb-name>

<jndi-name>Customer</jndi-name>

</weblogic-enterprise-bean>

Bussines Delegate

etc …

/ Generadores custom


Agenda4

Agenda

  • Los componentes en un desarrollo J2EE

  • J2EE y los EJBs

    • Historia y evolución

    • Problemática

    • La elección pragmática

  • EJB 3.0

    • Evolución de los EJBs

    • Tour por EJB 3.0

    • Ejemplos

  • ¿Qué dirección tomar?

  • Conclusiones


Qu direcci n tomar

¿Qué dirección tomar?

Opciones

  • Utilizar un contenedor EJB 3.0 / J2EE 5

  • Utilizar un contenedor EJB 2.0 + JPA

  • No utilizar un contenedor EJB (Servicios + JPA)


Qu direcci n tomar1

¿Qué dirección tomar?

EJB 3.0 / J2EE 5

  • Web Services Technologies

  • Implementing Enterprise Web Services (JSR 109)

  • Java API for XML-Based Web Services (JAX-WS) 2.0 (JSR 224)

  • Java API for XML-Based RPC (JAX-RPC) 1.1 (JSR 101)

  • Java Architecture for XML Binding (JAXB) 2.0 (JSR 222)

  • SOAP with Attachments API for Java (SAAJ) (JSR 67)

  • Streaming API for XML (JSR 173)

  • Web Service Metadata for the Java Platform (JSR 181)

  • Web Application Technologies

  • JavaServer Faces 1.2 (JSR 252)

  • JavaServer Pages 2.1 (JSR 245)

  • JavaServer Pages Standard Tag Library (JSR 52)

  • Java Servlet 2.5 (JSR 154)

  • Enterprise Application Technologies

  • Common Annotations for the Java Platform (JSR 250)

  • Enterprise JavaBeans 3.0 (JSR 220)

  • J2EE Connector Architecture 1.5 (JSR 112)

  • JavaBeans Activation Framework (JAF) 1.1 (JSR 925)

  • JavaMail (JSR 919)

  • Java Data Objects (JDO) (JSR 243)

  • Java Message Service API (JMS) (JSR 914)

  • Java Persistence API (JPA) (JSR 220)

  • Java Transaction API (JTA) (JSR 907)

  • Management and Security Technologies

  • J2EE Application Deployment (JSR 88)

  • J2EE Management (JSR 77)

  • Java Authorization Contract for Containers (JSR 115)


Qu direcci n tomar2

¿Qué dirección tomar?

Sun Java System Application Server Platform Edition 9

Productivo – (J2EE 5)

WebLogic Server v10.0

Productivo – (J2EE 5)

Oracle Application Server 11

Productivo – (J2EE 5)

TmaxSoft JEUS 6

Productivo – (J2EE 5)

SAP NetWeaver 7.1

Trial Version - (J2EE 5)

Apache Geronimo-2.0-M6-rc1

Productivo – (J2EE 5)

GlassFish Application Server

Reference Implementation - (J2EE 5)

Apusic ApplicationServer (v5.0)

(J2EE 5)

Application Server 4.2.0 GA

Productivo - (EJB 3.0)

Implementaciones EJB 3.0 / J2EE 5


Qu direcci n tomar3

¿Qué dirección tomar?

EJB 2.0 + JPA

  • Simplifico la persistencia

  • Los patterns VO, DTO dejan de ser obligatorios

  • Modelo de dominio 100% orientado a objetos

  • Simplificamos el testeo de los objetos de dominio

  • Sigo utilizando servicios del contenedor (Pooling, JMS, CMT, JTA, Seguridad, Clustering, Availability, Load Balance)

  • Migración ordenada a EJB 3.0


Qu direcci n tomar4

¿Qué dirección tomar?

EJB 3.0

Client

Client

POJO

POJO

Bussines Delegate

Bussines Delegate

POJO

Session Bean EJB 2.0

EJB 3.0 annotations

POJO

EJB 3.0 annotations

POJO

EJB 3.0 annotations

javax.persistence.Query

javax.persistence.Query

javax.persistence.EntityManager

javax.persistence.EntityManager

EJB 2.0 + JPA


Qu direcci n tomar5

¿Qué dirección tomar?

POJO

Session Bean EJB 2.0

EJB 3.0 annotations

EJB 2.0 + JPA

EJB 3.0

  • Cambiar implementación interfaz Session por anotación

  • Cambiar métodos callback por anotación

  • Revisar inyección de dependencias

    • Utilizar algún pattern de tipo ServiceLocator

    • Utilizar un método de libreria para obtener EntityManager


Qu direcci n tomar6

¿Qué dirección tomar?

Session Bean EJB 2.0

POJO

EJB 3.0 annotations

POJO

EJB 2.0 + JPA

EJB 3.0

  • El session solo es un ‘proxy’ de acceso al servicio

  • El session es el encargado de inyectar dependencias al POJO

  • Solo hay que agregar anotaciones al migrar

  • Puedo testear mi servicio fuera del contenedor


Qu direcci n tomar7

¿Qué dirección tomar?

Hibernate 3.2.2 GA

OpenJPA 0.9.7

Kodo™

Oracle TopLink 11g

Bea Kodo 4.1

Implementaciones JPA


Qu direcci n tomar8

¿Qué dirección tomar?

Servicios + JPA

  • Simplifico la persistencia

  • Los patterns VO, DTO dejan de ser obligatorios

  • Modelo de dominio 100% orientado a objetos

  • Simplificamos el testeo del servicio y los objetos de dominio

  • Puedo utilizar algun framework liviano de middleware

  • (Spring, HiveMind, Pico Container, etc)

  • Migración ordenada a EJB 3.0 cuando fuera necesario


Qu direcci n tomar9

¿Qué dirección tomar?

EJB 3.0

Client

Client

POJO

POJO

Bussines Delegate

Inyección del Servicio

Bussines Delegate

Inyección del Servicio

XML

POJO

POJO

EJB 3.0 annotations

POJO

EJB 3.0 annotations

POJO

EJB 3.0 annotations

javax.persistence.Query

javax.persistence.Query

javax.persistence.EntityManager

javax.persistence.EntityManager

Servicios + JPA


Qu direcci n tomar10

¿Qué dirección tomar?

Servicios + JPA

EJB 3.0

POJO

POJO

EJB 3.0 annotations

  • Agregar anotaciones de Session

  • Revisar manejo transaccional

    • Utilizar algun manejo declarativo en el contenedor liviano

  • Revisar inyección de dependencias

    • Agregar anotaciones de injection del contenedor EJB 3


Qu direcci n tomar11

¿Qué dirección tomar?

Containers livianos

PicoContainer / NanoContainer


Qu direcci n tomar12

¿Qué dirección tomar?

  • Framework open source de ORM con servicio de soporte

  • Se puede configurar con xml /xDoclets/anotaciones

  • Soporta JTA, JNDI, JPA (con Java 1.5)

  • Puede correr en un contenedor EJB 2.x

  • Motor de persistencia de JBoss

  • Puede ser utilizado como motor de cualquier container EJB 3.0


Agenda5

Agenda

  • Los componentes en un desarrollo J2EE

  • J2EE y los EJBs

    • Historia y evolución

    • Problemática

    • La elección pragmática

  • EJB 3.0

    • Evolución de los EJBs

    • Tour por EJB 3.0

    • Ejemplos

  • ¿Qué dirección tomar?

  • Conclusiones


Conclusiones

Conclusiones

Session Beans / MDB, ¿pare de sufrir?

@Stateless(name="ReviewService")

@Remote(ReviewService.class)

public class ReviewManagerBean implements ReviewService {

@PersistenceContext(unitName = "reviewSession")

private EntityManager em;

@EJB

ReviewListener listener;

@PostConstruct

public void init(){

...

}

}

@Stateless

@Remote(ReviewListener.class)

public class ReviewListenerBean implements ReviewListener{

@Resource(name = "jms/mdbQCF", mappedName = "weblogic.examples.ejb30.QueueConnectionFactory")

private QueueConnectionFactory mdbQCF;

@Resource(name = "jms/mdbQueue", mappedName = "weblogic.examples.ejb30.ExampleQueue")

private Queue mdbQueue;

...

...

...

...

EJB 2.x

EJB 3.0

@MessageDriven

(mappedName = "weblogic.examples.ejb30.ExampleQueue",

name = "WatchProcessMDB",

activationConfig = {

@ActivationConfigProperty(

propertyName = "destinationType",

propertyValue = "javax.jms.Queue")

}

)

public class WatchProcessMDB implements MessageListener {

@PersistenceContext(unitName = "reviewSession")

private EntityManager em;

...

...

Intrusivo

Interfaces

callBacks

@anotaciones y/o

<descriptores.xml>

@anotaciones y/o

<descriptores.xml>

Interfaz de servicio

Complejidad

ejb-jar.xml

xxx-ejb-jar.xml

Remote, Local, Home

@anotaciones y/o

<descriptores.xml>

JNDI lookups

Dependencias

Complejo

Necesita un container para inyeccion de dependencias.

Testing


Conclusiones1

Conclusiones

Entity Beans, ¿pare de sufrir?

@Entity

@Table(name = "PERSON")

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)

public class Person implements Serializable {

@Id

@Column(name = "NAME")

private String name;

...

@ManyToOne(cascade = CascadeType.MERGE)

@JoinColumn(name = "REVIEWED")

private Item reviewed;

...

...

...

...

EJB 2.x

EJB 3.0

Serializables

No

Si

Herencia

Polimorfismo

No

Si

EJB-QL

Limitante

Mas poderoso

@anotaciones

persistence.xml

Complejidad

ejb-jar.xml

xxx-ejb-jar.xml

db-xxx-ejb.jar.xml

Local, Home

Testing

Complejo

Simple


Conclusiones2

Conclusiones

EJB 3.0

  • Un paso adelante hacia la simplicidad en J2EE

  • Permitirá un diseño realmente orientado a objetos

  • La especificación ya es un Final Release

  • Ya existen implementaciones productivas

  • (muchas basadas en productos con larga historia en el mercado)

  • Los ORM y middleware livianos proveen herramientas para trabajar de una manera simple y posibilitar una migración ordenada en caso de necesidad.


Conclusiones3

Conclusiones

EJB 3.0 Expert Group


De tales from theserverside

?


De tales from theserverside

Gracias por su atención


  • Login