Recientemente Jboss ha liberado JBoss Developer Framework o JDF para los amigos. El Framework en realidad es un centro de documentación central para todas las tecnologías relacionadas con JBoss y JBoss AS. Este esfuerzo de consolidación permite a los desarrolladores centrarse en un recurso único de documentos en lugar de tomar varias guías individuales de las diferentes tecnologías de JBoss (por ejemplo, una guía de Hibernate y otra para Seam).
JDF incluye más de 50 quickstartsque son proyectos Maven que se generan con archetypes. Lo interesante es que la mayoría de los quickstarts generan los proyectos con varias capas, Estos pueden servir ya sea como tutoriales o como la base para las aplicaciones más complicadas. Algunas de las tecnologías que incluyen: EJB, JAX-RS, JPA, JSF, CDI, HTML5, JTA, Apache Wicket...
En
un post anterior hicimos un proyecto con maven y JEE
Pero
en ese caso hicimos un lookup pero podríamos haber usado @EJB de la
siguiente manera:
@EJB(mappedName="HolaMundoImpl/remote")
private
HolaMundo holaMundo
= null;
Y
con esto nos ahorrábamos el lookup.
Cuales
son los atributos de @EJB y para que se usan?
@EJB
indica la dependencia de un ejb tanto local como remoto. Esta
anotación tiene diferentes atributos los
cuales analizaremos luego de revisar el concepto de ENC. Todos los
EJB tienen un ENC (Enterprise Naming Context
) es como un registro
interno donde fue deployeada esta aplicación.
Por
ejemplo:
@Stateless(name="MyEJB")
public
class MyEJBBean implements MyEJBRemoteBusiness, MyEJBLocalBusiness
{
...
}
Si
nosotros asumimos que este EJB esta en myejb.jar y dentro de
myapp.ear se puede tener una referencia a este bean de la siguiente
manera:
javax.naming.Context
jndiContext = new InitialContext(); // Assume we have this
//
Define the contracted value
final
String jndiName = "java:global/myapp/myejb/MyEJB!" +
Cada
bean contiene su JNDI ENC. La registración a JNDI ENC puede ser
registrado bajo el contexto java:comp/env comp es porque es un
componente. Cuando hacemos el lookup se resuelve la dependencia de
diferentes contextos.
@EJB
tiene los siguientes atributos:
name:
atributo el cual indica conque nombre acedemos a una referencia EJB
en JNDI ENC.
BeanName:
este es el nombre de una referencia.
MappedName
:
es especifico del vendor; es una key dentro de la registración
global. Es una forma de acceder a la referencia en el JNDI global.
Por medio de mappedName varios vendors introducen características
particulares.
Pongo la dependencia a ExampleEJB como provided dado que no quiero que maven agregue el jar dentro del war después hago deploy del proyecto EJB y del WAR.
Ahora mvn clean install parados en el proyecto parent (ExampleJEE) y mvn eclipse:eclipse (si usan eclipse).
Bueno ahora importamos el proyecto a eclipse: file-> import-> Existing Projects into Workspace … Elegimos el path donde se encuentra el proyecto ExampleJEE y importamos.
Vamos a crear las siguientes clases en ExampleEJB:
JEE y EJB proveen un conjunto de servicios que los desarrolladores pueden integrar de forma declarativa o programática. Estos servicios incluyen autorización y autenticación.
Autenticación e identificación
La autenticación es comprobar que el usuario sea quien dice ser. En un sistema EJB un usuario es asociado con una identidad segurizada, esta esta lista para ser usada por los EJB. Cuando un cliente invoca un método de un EJB, el servidor pasa la identidad del cliente con la invocación del método. Cuando el contenedor de EJB recibe la invocación valida la identidad del usuario y si este puede invocar el método invocado.
La especificación EJB no indica como se autentica. Aunque esta definido como la seguridad se propaga del cliente al servidor, no esta definido como el cliente obtiene la identidad y la credencial con una invocación EJB, tampoco define como el servidor guarda y obtiene las autenticaciones.
Cuando accedemos a un EJB muchas aplicaciones utilizan la JNDI API, por ejemplo podemos autenticar el acceso a un EJB de este modo:
En el ejemplo, el usuario es autenticado con la conexión a el “JNDI InitialContext”
Autorización.
Como sabemos en las aplicaciones no todos somos iguales, cada usuario tiene un rol ante una aplicación por ejemplo “administrador”, “empleado”, etc. y cada rol puede hacer o no determinadas acciones, es decir tiene o no tiene permiso para.
En EJB existen diferentes tipos de granularidad de permisos, puede ser por usuario o por rol. Esto permite que la autenticación sea un proceso separado de la autorización.
Los roles son definidos de forma logica y pueden representar roles, grupos de usuarios, o cualquier otro sistema de identificación. Los roles del los EJB son mapeados a los usuarios y grupos reales cuando el bean es deployado.
La autorización esta bien definida en la especificación EJB. Se declaran los roles de forma programática y luego se indican los permisos a los beans por medio de anotaciones o declararlos en ejb-jar.xml
Vimos de forma teoría la seguridad en EJB, en un próximo post vamos a hace algo más práctico.
Soy un promovedor del uso de Spring pero por X motivo estoy estudiando un poco JEE 5 y la verdad estoy sorprendido por su simpleza, cambio mucho. Lo único que critico es que el tiempo de levantar jboss o glassfish o otro servidor JEE es mayor que usar solo tomcat o jetty (obviamente).
La especificación EJB 3 deja atrás el mal sabor que tenían las anteriores versiones de EJB a la hora de desarrollar. El paso más importante ahora los EJB son pojos, que por medio de anotaciones se infiere el comportamiento. No es necesario heredar de ningún objeto, ni hacer interfaces (gracias a Dios).
Veamos los tipos de beans que existen:
Session EJB: Son los beans que tienen las acciones; son los que tienen la lógica del negocio. Este tipo de bean viene en 2 sabores Stateless (no mantiene el estado en el servidor) o Statefull (mantiene el estado en el servidor). Además se agrego un Sigleton Beans, para cuando necesitamos solo una instancia de nuestro objeto de negocio.
Message-Driven Beans: La mensajería asíncrona es un paradigma en el cual dos o más aplicaciones se se comunican mediante un mensaje que describe un evento de negocio. Estos beans pueden generar mensajes asíncronos y consumirlos.
Entity Beans: Son objetos que modelan nuestros datos (Pojos) y son persistidos por medio del javax.persistence.EntityManager. Usando JPA (descripto en JSR-317) podemos persistir nuestros entity beans como si usáramos un ORM común.
Este es un pequeño resumen de la que nos brinda EJB 3. En próximos post ampliaremos!!