Comparativa
entre EJB 3 y Spring Framework
Sobre
el presente documento:
Fuente:
Referencias
del documento original:
Comparativa entre EJB 3 y Spring Framework
Sobre el presente documento:
Hace
algún tiempo que encontré una comparativa de EJB3
versus Spring Framework, realizada por Janis Graudins y Larissa
Zaitseva, la misma que me he permitido traducir pues la considero muy
ilustrativa y una buena ayuda a la hora de determinar cual de las
alternativas emplear. He omitido la sección de «abstract»
del documento original y en general en la traducción he
procurado ser fiel al espíritu del documento en inglés
pero en algunos puntos de la tabla de comparación final he
agregado algunas apreciaciones propias cuando he considerado que lo
que dice no es del todo correcto.
Introducción
Las
aplicaciones basadas en el lenguaje de programación JAVA
comprenden una parte significativa del universo de desarrollo de
software. Java fue inicialmente creado por SUN Corporation y ha
logrado dentro la comunidad Open-Source la aceptación y el
soporte de verdaderos gigantes de las TI como BEA Systems, IBM
Corporation y JBOSS (Red Hat). JAVA es especialmente popular en el
desarrollo de grandes aplicaciones empresariales. Las comparativas
muestran que el 25,3% de las grandes compañías usan
JAVA en sus aplicaciones más importantes (octubre 2005) [7].
La plataforma Java 2 Enterprise Edition (J2EE) provee grandes
oportunidades para el desarrollo de sistemas distribuidos, se
utililiza en la mayoría de las aplicaciones empresariales y la
tecnología Enterprise JavaBeans (EJB) es una parte muy
importante de la misma. Usualmente la arquitectura de una aplicación
J2EE contiene varias capas separadas como se puede apreciar en la
figura. La capa de servidor típicamente contiene componentes
de servidor con lógica de negocio, estos son manejados por un
contenedor EJB (de acuerdo con la implementación de la
especificación EJB). El contenedor EJB es parte del servidor
de aplicaciones (usualmente el contenedor EJB y el servidor de
aplicaciones no pueden ser separados y son proporcionados por el
mismo proveedor). El servidor de aplicaciones provee el ciclo de vida
de los componentes, así como servicios de seguridad y manejo
de transacciones.
Desafortunadamente,
las versiones anteriores de EJB fueron demasiado complejas y nuevos
componentes de manejo tecnológico aparecieron. Spring
Framework, en su versión 1.0 liberada en Marzo de 2004, es un
producto gratuito de carácter Open-Source, el mismo que es un
contenedor liviano de componentes de negocio que pueden ser
utilizados como una alternativa frente a EJB. En general, Spring
Framework provee algunos servicios adicionales tales como Spring Web
Model View Controller (MVC), pero estos están fuera del
alcance de este documento.
A
continuación se describe brevemente algunas de las
características básicas de EJB y de Spring Framework.
Enterprise JavaBeans
Una
de las metas de la arquitectura EJB es la de poder escribir de manera
fácil aplicaciones de negocio orientadas a objetos y
distribuidas, basadas en el lenguaje de programación JAVA [1].
Desafortunadamente, las versiones 1.0 a 2.1 de EJB fueron demasiado
complejas y no alcanzaron esta meta. El propósito de EJB 3 es
el de proveer el soporte de la arquitectura de EJB y al mismo tiempo
reducir la complejidad para el desarrollo de aplicaciones
empresariales. Para simplificar la arquitectura EJB se realizaron los
siguientes cambios [3]:
-
Se
introduce las anotaciones de metadatos (metadata annotations) [10]
las mismas que pueden ser usadas en combinación con el
descriptor de despliegue (deployment descriptor) ó separadas
del mismo, para anotar aplicaciones EJB (especificar tipos de
componentes, comportamiento, etc.), como una manera de encapsular
dependencias del ambiente de trabajo y recursos. -
Se
elimina el requerimiento de especificar una interfaz «home» -
En
los entreprise beans se elimina la necesidad de implementar una
interfaz específica (javax.ejb.EnterpriseBean) -
Se
simplifican los tipos de entreprise beans (Los entity beans fueron
removidos) -
La
existencia de interceptores reemplaza la necesidad de implementar
interfaces tipo callback1. -
Los
valores por defecto se emplean lo menos posible (se usa la
aproximación de configuración por excepción). -
Se
reducen los requerimientos para el manejo de excepciones
Como
contrapunto se introducen en EJB 3 las anotaciones de metadatos y de
interceptores como las siguientes:
-
La
persistencia de entidades (Entity Persistence) fue simplificada y
soportada para modelar dominios de negocio medianos a grandes,
además ahora es posible proveer contenedores EJB 3 livianos
que pueden ser usados en una capa cliente fuera de la caja del
servidor de aplicaciones. -
Se
mejora en EJB QL el soporte para consultas y sentencias SQL nativas -
Se
provee de un servicio de temporizador (Timer Service) manejado por
el contenedor EJB el mismo que permite ejecutar Enterprise Beans en
eventos de tiempo específicos. -
En
EJB3 se puede usar AOP a través de interceptores.
Spring Framework
El
principal objetivo de Spring Framework es el constituirse en una
alternativa sencilla y fácil ante EJB. La simplificación
del desarrollo de aplicaciones y de sus respectivas pruebas (testing)
es una de las claves del éxito de Spring. Este Framework se
sustenta en dos características básicas en su núcleo:
Inversion de Control (Inversion of Control IoC) y la Programación
Orientada a Aspectos (Aspect-orient programming) [11].
Usualmente,
los objetos obtienen las referencias de otros objetos requeridos por
si mismos (tal como en EJB 2.0 los beans obtienen los recursos
necesarios usando JNDI). La inversión de control permite
inyectar las dependencias en un bean al momento de su creación
usando un manejador externo. El bean sólo necesita definir la
propiedad requerida en su código así como el método
de establecimiento (set() method). La fuente primaria de la inyección
de dependencias es un archivo de configuración en formato XML.
Por ejemplo productService
necesita
realizar alguna operación sobre customerService, la referencia
de customerService
debe ser inyectada en la propiedad customer
de com.article.ProductService
en
la siguiente figura se muestra un ejemplo de cómo se mapearía
esta configuración en el respectivo archivo XML:
La
Programación Orientada a Aspectos (Aspect-Orient Programming
AOP) permite implementar la mayoría de los servicios comunes
(como manejo de transacciones, seguridad, logging, etc.) que pueden
ser aplicados en múltiples componentes. En el caso del uso de
AOP no se requiere ningún conocimiento acerca de cómo
han sido enmascarados (wrapped2)
los servicios. AOP es usada en Spring [8] para:
-
Proveer
servicios de aplicación (enterprise services) declarativos.
Ejemplo declarar el manejo de transacciones -
Permitir
a los usuarios la facilidad de implementar sus propios aspectos
personalizados
Spring
provee un número de servicios adicionales que son basados en
IoC y AOP. Estos servicios deben ser comparados con sus equivalentes
en EJB para poder tener un buen criterio de evaluación.
Criterio de Comparación
El
propósito de la comparación es mostrar diferencias
entre EJB y Spring. Para llegar a esta meta se han seleccionado los
siguientes criterios
-
Manejo
de transacciones (Transaction Manager), la comparación debe
permitir comparar las diferentes clases de implementación de
transacciones que están soportadas -
Oportunidades
de criterios de transacción incluidos (Transaction
Opportunities), atributos soportados, niveles de isolation3),
soporte de transacciones anidadas. -
Manejo
de entidades de persistencia (Entity Persistente) que permitan
evaluar funcionalidad para persistencia de objetos Object-Relational
Mappings (ORM) -
AOP
(Interceptors) muestran como se provee funcionalidad para
programación orientada a aspectos -
Configuración
de aplicaciones (Application Configuration), la posibilidad de
instalar la configuración de la aplicación y servicios
declarativos -
Seguridad
(Security) la comparación muestra como se ofrecen diferentes
niveles de seguridad. -
Flexibilidad
de servicios (Service Flexibility), evaluar la posibilidad de
reemplazar servicios por otros -
Servicios
de integración (Service Integration), detecta las facilidades
de integración en especial con los servidores de
aplicaciones. -
Funcionalidad
adicional (Additional Functionality), describe funcionalidad
adicional provista por el framework, -
Criterios
para testing (Testability Criterion), en este criterio se analiza la
facilidad para realizar test en forma conjunta y de todos los
componentes por separado. -
Madurez
de la tecnología y soporte (Technology Maturity and support).
Este criterio analiza la madurez del producto y si la compañía
ofrece soporte para el mismo. -
Precio
(Price), posible precio y costos asociados del producto. -
Documentación
(Documentation), investiga si se provee de documentación,
ejemplos y de soporte para los mismos.
Cada
criterio fue evaluado en un rango desde 0.0 (no soportado) a 1.0
(completamente soportado)
El
resultado de la comparación se muestra en la siguiente tabla:
Nota |
EJB 3. |
Spring Framework |
Nota |
0.7 |
Manejo |
0.9 |
|
Sólo |
JTA |
||
0.6 |
Oportunidad |
0.8 |
|
Sólo |
Soporta |
||
0.9 |
Persistencia |
0.7 |
|
Define |
Usa
La |
||
1.0 |
Programación |
0.9 |
|
Interceptores |
Provee |
||
1.0 |
Configuración |
0.8 |
|
Usa |
En |
||
0.9 |
Seguridad |
0.6 |
|
Soporta |
Provee |
||
0.7 |
Flexibilidad |
1.0 |
|
Depende |
Cualquier |
||
0.9 |
Integración |
0.7 |
|
El |
Spring
En |
||
N/A |
Funcionalidad |
N/A |
|
Depende
En |
Provee |
||
0.8 |
Testeo |
1.0 |
|
La |
Todos |
||
0.7 |
Madurez |
0.6 |
|
EJB |
La
Tampoco |
||
0.3 |
Precio |
0.9 |
|
Primariamente |
Productos
El |
||
0.8 |
Documentación |
0.5 |
|
Los
La |
La |
Los
resultados de la comparación muestran que Spring Framework es
especialmente preferible para usarse en compañías
pequeñas, en conjunto con otros productos Open-Source. Es un
framework muy simple, conveniente y flexible, pero la mismo tiempo
muy poderoso. Se recomienda el uso de Spring en los casos donde un
contenedor de aplicaciones pesado no es necesario.
En
el otro extremo EJB 3 puede ser utilizado por compañías
cuyo plan de mantenimiento de aplicaciones basadas en EJB es un
compromiso a largo tiempo y buscan que las nuevas versiones de una
aplicación sean por completo compatibles con las versiones
anteriores. La integración de EJB con el servidor de
aplicaciones provee grandes oportunidades en escalamiento, y
optimización del programa de desarrollo.
Fuente:
-
«Comparative
Analysis of EJB3 and Spring Framework», Janis Graudins, Larissa
Zaitseva, Documento original publicado en la siguiente dirección
http://ecet.ecs.ru.acad.bg/cst06/Docs/cp/SIII/IIIA.18.pdf
Referencias del documento original:
-
[1]
L. DeMichiel, «Enterprise JavaBeans Specification, Version 2.1»,
[Online
document], Sun Microsystems, November 12, 2003, 646 pages, Available
at HTTP: http://java.sun.com/products/ejb/docs.html
-
[2]
L. DeMichiel, M. Keith «JSR 220: Enterprise JavaBeans, Version
3.0. EJB 3.0 Simplified API», [Online document], Sun Microsystems,
December 18, 2005, 59 pages, Available at HTTP:
http://jcp.org/aboutJava/communityprocess/pfd/jsr220/index.html
-
[3]
L. DeMichiel, M. Keith «JSR 220: Enterprise JavaBeans, Version
3.0. EJB Core Contracts and Requirements», [Online document], Sun
Microsystems, December 18, 2005, 526 pages, Available at HTTP:
http://jcp.org/aboutJava/communityprocess/pfd/jsr220/index.html
-
[4]
J. Graudins «Comparing analysis of Java application servers»,
Scientific proceedings of Riga Technical University, 2004, p. 118 »
125. -
[5]
J. Graudins, L. Zaitseva «Application Server Evaluation Method»,
Proceedings of the International Conference on Computer Systems and
Technologies and Workshop for PhD Students in Computing»
(CompSysTechâ™05), 2005, p.IIIB.6-1 » IIIB.6-6. -
[6]
J. Graudins, L. Zaitseva «Application Server Selection for
definite systems™ class», Proceedings of 19th International
conference «Systems» for Automation of Engineering and Research»
(SAER-2005), 2005, p.230 » 235. -
[7]
S. Hamm, «Java? It’s So Nineties», [Online document],
BusinessWeek Online, December 13, 2005, Available at HTTP:
http://www.businessweek.com/technology/content/dec2005/tc20051213_042973.htm
-
[8]
R. Johnson, J. Hoeller, A. Arendsen «Spring. Java/J2EE Application
Framework», [Online document], 2004-2005, 290 pages, Available at
HTTP: http://www.springframework.org/documentation
-
[9]
R. Lambert, «An Introduction to the Spring Framework», [Online
document], Chicago Java Users Group, June 21, 2005, Available at
HTTP:
http://cjug.org/presentations/2005/June21/Spring-Framework-Intro-Rob-Lambert.ppt
-
[10]
R. Mordani «Common Annotations for the Java Platform», [Online
document], Sun Microsystems, October 12, 2005, 32 pages, Available
at HTTP:
http://jcp.org/aboutJava/communityprocess/pfd/jsr250/index.html
-
[11]
C. Walls, R. Breidenbach «Spring in Action», Manning
Publications, 2005, 472 pages
1
Mecanismo de programación para devolver el control del flujo
del programa a un punto en particular del mismo, luego de realizada
una acción determinada.
2
Wrapped: Término en inglés que significa envoltura y
que en el contexto del texto denota la acción de enmascarar u
ocultar una implementación.
3
ISOLATION: En manejo de persistencia el término hace
referencia a garantizar que las transacciones que son dependientes
unas de otras se graben todas o ninguna.