Download EJB 3.0 - New Technologies

Document related concepts
no text concepts found
Transcript
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
• 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
Componentes J2EE
Framework de productividad J2EE
Presentación
Infraestructura
• Apache
JSP, Strut, JSF, Ajax,
Build
Flex, GWT, Swing
• Ant
• Maven
• Tomcat
• JBoss
• Weblogic
• Websphere
Middleware
EJBs (CMP, MDB, Session, …)
Hibernate, Kodo, Spring,
Jakarta Commons
• Oracle AS
• AspectJ
•…
• Eclipse / IDE’s
• APT / XDoclets
• JUnit
• OpenSTA
• Log4J
Base de Datos
Oracle, DB2, SAP DB,
SQL Server, MySQL,
HSQLDB, PostgreSQL
• CVS/SVN
•…
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 ($)
Componentes J2EE
Framework de productividad J2EE: Presentación
• Framework MVC
 Struts, Struts Tiles (documentación, experiencia, …)
 Tapestry, JSF, Flex, GWT, Seam, etc: menor experiencia
de Tales from TheServerSide.com
• Cliente pesado
 Swing
 Java Web Start
…
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
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
WEB
Browser
JSP
Servlet
EIS
Business
Componentes
JavaBeans
(Opcional)
Entity Beans
Session Beans
MD Beans
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 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 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 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 EJBs
EJBs : Los problemas
EJB
public class CustomerBean extends
EntityBean
EJBLocalObject
{
public interface Customer
implements EJBLocalObject
public abstract long getId();
…
…
}
}
public
interface CustomerHome
long
getId();
implements EJBLocalHome
setId(longEJBObject
id(;
{
public
interface CustomerRemote
…
…
implements EJBObject
Desing Patterns
• Productividad ??
• WORA ??
• Fácil de Testear ??
• Diseño restringido ??
ServiceLocator
DTO
Bussines Delegate
etc …
Mantenimiento
EJBLocalHome
{
public abstrac setId(…
Sincronización
}
EJBHome
{
}
public interface
long getId();
CustomerRemoteHome implements
ejb-jar.xml
EJBHome
setId(long
id(;
<ejb-jar>
{
…
weblogic-rdbms-ejb-jar.xml
<enterprise-beans>
…
<weblogic-rdbms-jar>
<entity>
}
<weblogic-rdbms-bean>
<ejb-name>Customer</ejb-name>
<ejb-name>Customer</ejb-name>
<local-home>CustomerHome</localweblogic-ejb-jar.xml
home>
<data-sourcename>java:/dataSource</data<weblogic-enterprise-bean>
<local>Customer</local>
source-name>
<ejb-name>Customer</ejb-name>
<ejb-class>CustomerBean</ejb<table-name>CUSTOMER</table-name>
class>
<jndi-name>Customer</jndi<field-map>
name>
….
<cmp-field>id</cmp-field>
</weblogic-enterprise-bean>
<dbms-column>ID</dbms-column>….
/ Generadores
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 EJBs
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
• Dejan al descubierto los
problemas de desarrollar
con EJB, y son las premisas
de un ‘otro’ modo de
desarrollar aplicaciones
J2EE
de Tales from TheServerSide.com
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)
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
Horizonte
• JSR-175 (Java 1.5), anotaciones pueden reemplazar
deployment descriptors
• Compatibilidad ascendente
 EJB 2.x no está ‘deprecado’
 Hay un asentimiento de las
falencias 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.
de Tales from TheServerSide.com
• El objetivo: "evolucionar rápidamente para soportar un
gran rango de desarrolladores, incluyendo aquellos menos
sofisticados”
EJB 3.0
/**
/**
* @hibernate.class table="CATS"
* @hibernate.property column="BIRTH_DATE"
*/
*/
public class Cat {
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.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.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.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.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.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.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.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.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.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.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.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.0
EntityManager API
new
merge()
merge()
SQL INSERT
SQL UPDATE
New
Managed
persist()
remove()
SQL INSERT
SQL DELETE
Detached
Contexto
Finalizado
EJB 3.0
Ejemplo de utilización de EntityManager
@Session
public class FacturasImpl implements Facturas {
@PersistenceContext(unitName=“myUnit”)
private EntityManager 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.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.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.0
Deployment Descriptor
• Siguen existiendo.
• Se pueden reemplazar o combinar con las anotaciones.
• Sobreescriben lo indicado en las anotaciones
miAplicacion.ear
miAplicacion.war
application.xml
web.xml
miModuloEJB.jar
miModulo.jar
ejb-jar.xml
persistence.xml
persistence.xml
EJB 3.0
Query API
• Son expresadas en EJBQL
 Embebidos en el código
 Definidos por anotaciones
• Provee
 Agregación
• Query interface
 Binding de parámetros
 Control de paginación
SELECT c.status, avg(c.filledOrderCount), count(c)FROM Customer c
GROUP BY c.status HAVING 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.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.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.0
En resumen
EJB
EJB
EJBLocalObject
public class CustomerBean extends
EntityBean
public interface Customer
implements EJBLocalObject
{
EJBObject
…
@Entity
…
…
@Table (name=“CUSTOMER”)
}
{
…
public interface CustomerRemote
implements EJBObject
}
{
EJBHome
public class CustomerBean
{
Desing Patterns
@Id @Column(name=“CUSTOMER_ID”)
ServiceLocator
public long getId() { return id; }
DTO
public setId(long i) {Bussines
id = i;
}
Delegate
…
…
Mantenimiento
longpublic
getId();
interface CustomerHome
implements
setId(long id(;EJBLocalHome
public abstrac setId(…
}
EJBLocalHome
{
public abstract long getId();
Sincronización
etc …
}
public interface
long CustomerRemoteHome
getId();
implements
ejb-jar.xml
EJBHome
setId(long id(;
<ejb-jar>
{
…
weblogic-rdbms-ejb-jar.xml
<enterprise-beans>
…
<weblogic-rdbms-jar>
<entity>
}
<weblogic-rdbms-bean>
<ejb-name>Customer</ejb-name>
<ejb-name>Customer</ejb-name>
<local-home>CustomerHome</localweblogic-ejb-jar.xml
home>
<data-sourcename>java:/dataSource</data<weblogic-enterprise-bean>
<local>Customer</local>
source-name>
<ejb-name>Customer</ejb-name>
<ejb-class>CustomerBean</ejb<table-name>CUSTOMER</table-name>
class>
<jndi-name>Customer</jndi<field-map>
name>
….
<cmp-field>id</cmp-field>
</weblogic-enterprise-bean>
<dbms-column>ID</dbms-column>….
}
/ Generadores custom
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?
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 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 tomar?
Implementaciones EJB 3.0 / J2EE 5
WebLogic Server v10.0
Oracle Application Server 11
Productivo – (J2EE 5)
Productivo – (J2EE 5)
SAP NetWeaver 7.1
Trial Version - (J2EE 5)
GlassFish Application Server
Reference Implementation - (J2EE 5)
Sun Java System Application
Server Platform Edition 9
Productivo – (J2EE 5)
Apache Geronimo-2.0-M6-rc1
TmaxSoft JEUS 6
Productivo – (J2EE 5)
Productivo – (J2EE 5)
Apusic Application
Server (v5.0)
(J2EE 5)
Application Server 4.2.0 GA
Productivo - (EJB 3.0)
¿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 tomar?
EJB 2.0 + JPA
EJB 3.0
Client
Client
POJO
POJO
Bussines Delegate
Bussines Delegate
POJO
EJB 3.0 annotations
Session Bean EJB 2.0
POJO
EJB 3.0 annotations
javax.persistence.Query
javax.persistence.EntityManager
POJO
EJB 3.0 annotations
javax.persistence.Query
javax.persistence.EntityManager
¿Qué dirección tomar?
EJB 2.0 + JPA
Session Bean EJB 2.0
EJB 3.0
POJO
EJB 3.0 annotations
• 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 tomar?
EJB 2.0 + JPA
EJB 3.0
Session Bean EJB 2.0
POJO
POJO
EJB 3.0 annotations
• 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 tomar?
Implementaciones JPA
Hibernate 3.2.2 GA
Oracle TopLink 11g
OpenJPA 0.9.7
Kodo™
Bea Kodo 4.1
¿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 tomar?
Servicios + JPA
EJB 3.0
Client
Client
POJO
POJO
Bussines Delegate
Bussines Delegate
Inyección del Servicio
XML
POJO
EJB 3.0 annotations
POJO
POJO
Inyección del Servicio
EJB 3.0 annotations
javax.persistence.Query
javax.persistence.EntityManager
POJO
EJB 3.0 annotations
javax.persistence.Query
javax.persistence.EntityManager
¿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 tomar?
Containers livianos
PicoContainer / NanoContainer
¿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
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
Session Beans / MDB, ¿pare de sufrir?
Intrusivo
Complejidad
EJB 2.x
EJB 3.0
@MessageDriven
@Stateless(name="ReviewService")
@Stateless
(mappedName = "weblogic.examples.ejb30.ExampleQueue",
@Remote(ReviewService.class)
Interfaces
@anotaciones y/o
@Remote(ReviewListener.class)
name =ReviewManagerBean
"WatchProcessMDB",
callBacks
<descriptores.xml>
public
class
implements ReviewService {
public class ReviewListenerBean implements ReviewListener{
activationConfig = {
@PersistenceContext(unitName
= "reviewSession")
@Resource(name = "jms/mdbQCF", mappedName =
@ActivationConfigProperty(
@anotaciones y/o
private
EntityManager
em;
"weblogic.examples.ejb30.QueueConnectionFactory")
ejb-jar.xml
<descriptores.xml>
propertyName
= "destinationType",
@EJB
private
QueueConnectionFactory
mdbQCF;
xxx-ejb-jar.xml
Interfaz de servicio
Remote, Local,
Home
propertyValue =mappedName
"javax.jms.Queue")
ReviewListener
@Resource(name
=listener;
"jms/mdbQueue",
=
"weblogic.examples.ejb30.ExampleQueue")
}
@PostConstruct
Dependencias
Testing
private
Queueinit()
mdbQueue;
) void
public
{
@anotaciones y/o
JNDI
lookups
...
public
class
WatchProcessMDB
implements MessageListener {
...
<descriptores.xml>
...
} @PersistenceContext(unitName = "reviewSession")
ComplejoEntityManager Necesita
un container para
em;
} ... private
inyeccion de dependencias.
... ...
...
Conclusiones
Entity Beans, ¿pare de sufrir?
@Entity
EJB 2.x
@Table(name = "PERSON")
Serializables
EJB 3.0
@Inheritance(strategy
=SiInheritanceType.TABLE_PER_CLASS)
No
public class Person implements Serializable {
Herencia
Polimorfismo
@Id
No
Si
@Column(name = "NAME")
private String name;
EJB-QL
Limitante
...
Mas poderoso
@ManyToOne(cascade = CascadeType.MERGE)
Complejidad
@anotaciones
@JoinColumn(name
= "REVIEWED")
ejb-jar.xml
persistence.xml
xxx-ejb-jar.xml
private
Item reviewed;
db-xxx-ejb.jar.xml
...
Local, Home
...
Testing
...
Complejo
...
Simple
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.
Conclusiones
EJB 3.0 Expert Group
?
Gracias por su atención