EJB 3.0: Resurrection

0
24338

EJB 3.0: Resurrection


INTRODUCCIÓN

Han
pasado muchos años desde que los EJBs hicieron su
aparición para hacer «decían» nuestra vida más
sencilla.
La verdad es que un framework que nos aportaba transaccionalidad
distribuida, seguridad, persitencia manejada por el contenedor
etc…  (eso por definición) y además, clustering,
tolerancia a fallos y balanceo de carga (eso por implicación de
los servidores de aplicaciones) pues sonaba muy bien.
Pero la realidad es que a la hora de ponernos a trabajar con ellos,
siempre suponía un handicap el terrible engorro que
suponía desarrollar este tipo de componentes. Tener que definir
los descriptores de los ejbs (el de J2EE más el propio del
fabricante), algunos de los cuales eran una auténtica tortura (a
mi especialmente la forma de definir la persistencia de los Entities me
crea pesadillas nocturnas), por no hablar de cuando había que
compilarlos previamente para generar los stubs… (menos mal que
apareció el Proxy Dinámico).

Es cierto que han aparecido herramientas para facilitarnos o para
ahorrarnos errores como XDoclet etc… , pero a mi personalmente
(excluyendo los MDBs) me parecía un horror.

La aparición de frameworks como Spring ha hecho mucho
daño a los EJBs, porque para que me voy a complicar la vida, si
al fin y al cabo, pocas veces se usa realmente transacciones
distribuidas.

En fin, que parecía que los EJBs estaban condenados a
desaparecer enterrados bajos sus descriptores, cuando de repente
aparece EJB 3.0 ….

La pregunta que lanzo a la audiencia es: ¿ Es posible seguir
teniendo la funcionalidad prometida por los EJBs de una manera sencilla
(que hasta yo sea capaz de trabajar con ellos) ?

Pues parece que si, y  por lo que he visto hasta ahora es una
realidad y no ciencia ficción: EJB 3.0 Resurrection.

SOY UN ESCÉPTICO: ¿ POR QUÉ VOLVER A USAR EJBs ?


La primera razón es la que más me gusta, aunque seguro que alguno aqui se me muere de risa:

  1. Porque son fáciles de usar:
  • Los EJBs se convierten en POJOs y los interfaces en POJIs
  • Puedes mandar los descriptores a la basura (si quieres) porque aparecen las anotaciones. 
  • La forma de declarar la persistencia en los Entities es juego de niños (se parece sospechosamente a Hibernate)
  • Porque seguimos teniendo la misma funcionalidad (Transaccionalidad, Seguridad, persistencia … ), y alguna más
  • Porque es un estándar abierto.
  • Porque hay mucha gente implicada en que esto salga bien.
  • Como ejemplo de su facilidad de uso,
    vamos a crearnos un EJB de sesión sin estado (vamos a suponer
    que tenemos ya un servidor de aplicaciones preparado como JBoss)

    Defino un Interfaz (El POJI)

    Defino el Bean que lo define (El POJO)

    Empaquétalo en un jar, y ya está, tu primer EJB 3.0

    ¿ Y LAS COSAS NUEVAS ?


    Alguna ya la vemos en el ejemplo anterior, el uso de anotaciones, pero vamos a ver algunas más:

    1. Inyección de dependencias:
      Podemos ahora acceder a otros EJBs o recursos simplemente
      indicándole al contenedor que inyecte las referencias que
      necesitamos, sin tener que usar JNDI
    2. Se simplifica mucho la forma de persistir los Entities
    • Se define la persistencia mediante anotaciones en los Entities (de una manera similar a Hibernate)
    • No se accede directamente a los Entities, sino que se persisten a través de un interfaz (EntityManager) , usando ORM
    • Los Entities son ahora POJOs, con lo que pueden ser usados como DTOs.
  • Se pueden crear temporizadores usando TimerService.
  • Los EJBs de sesión sin estado pueden usarse como EndPoint de un Webservice de una manera muy sencilla.
  • Aparece el concepto de AOP e interceptores.
  • Seguro que me dejo muchas, pero creo que es suficiente.

    En resumen,  EJB 3.0 se ha convertido en:

    EJB 3.0 =  (Lo bueno de EJB 2.1) – (Lo malo de EJB 2.1) + Spring + Hibernate

    ¿ COMO DEBERÍA MIGRAR DE EJB 2.X A 3.0 ?

    Algunos pasos serían:

    1. Usar Java 5 por el tema de las anotaciones
    2. Los Bean de sesión:
    •  No necesitan implementar SessionBean. Basta con anotarlos con:
      • @Stateless  (sin estado)
      • @Stateful (con estado)
    •  No necesitamos crear los métodos ejbCreate en los Bean ni los métodos del ciclo de vida.
    • Los métodos del ciclo de vida se anotan con:
      • @PostCreate
      • @PostActivate
      • @PreDestroy
      • @PrePassivate
    • No necesitamos definir los interfaces Home ni Local Home
    • Los interfaces se sustituyen por POJIs:
      • @Local
      • @Remote
    • No necesitamos descriptor de despliegue.
  • Los Entities
    1. No necesitan implementar EntityBean, Basta con anotarlos con:
      1. @Entity 
    2. No necesitan el método create, ni los métodos del ciclo de vida.
    3. No necesitan descriptor de despliegue. No necesitan descriptores de persitencia, se define mediante anotaciones.
    4. La persitencia se maneja a través de EntityManager.

    Etc…

    En próximos tutoriales os enseñaré a trabajar con los EJBs 3.0 y veremos muchas de las cosas nuevas.





    Dejar respuesta

    Please enter your comment!
    Please enter your name here