2.2.
Contenedores ligeros
Los
contenedores ligeros intentan proveer servicios para componentes que
sean lo más sencillos posibles. Spring y Pico son los contenedores
ligeros más populares. Si todavía no los conoce, quizás
esté tentado de saltarse este apartado, pensando que lo último
que necesita es otro contenedor más. No lo haga. Los contenedores
ligeros como Spring se están difundiendo rápidamente,
porque pueden resolver problemas que otros contenedores no pueden.
Aunque estos frameworks no son tan conocidos como Hibernate, al menos
uno de ellos puede serlo pronto. El equipo de Spring comienza a generar
el ruido familiar de las primeras etapas de un proyecto exitoso de
código abierto. Desde mi punto de vista, los aspectos más
interesantes de Spring son la transparencia de los objetos, la existencia
de servicios limpios y desconectables y su huella pequeña.
Todos estos aspectos producen un framework sencillo y efectivo, con
las siguientes características:
-
Transparencia. Cuando
se construye una solución para programadores,
lo más sencillo suele ser lo mejor. Spring
no es invasor. De hecho, los objetos que se colocan
en el contenedor son simples POJOs (“Plain
Old Java Objects”), objetos tradicionales
de Java (o JavaBeans, para ser más precisos).
Los objetos no dependen del contenedor. Pueden
ejecutarse fuera del mismo para facilitar las pruebas
o llamar a otros objetos como POJOs.
-
Posibilidades
de extensión. Spring soporta
algunos servicios sencillos de forma integrada,
incluyendo, por ejemplo, capas JTA y JDBC para
proporcionar soporte a bases de datos y a transacciones.
Además, Spring ofrece una API bien distribuida
en capas y que puede ser extendida fácilmente
por terceras partes. Por ejemplo, ya se pueden
usar objetos Hibernate y JDO dentro de un contenedor
Spring.
-
Una
huella más pequeña. La
sencillez de Sprint le permite una huella más
pequeña. Así, puede usarse de maneras
que no podría usarse un contenedor J2EE
tradicional. Puede utilizarse fácilmente
en la etapa de pruebas, incluso si planifica
ejecutar muchas de ellas en una sola construcción.
Se puede usar Spring en un cliente Web o en un
dispositivo móvil.
Como
los contenedores ligeros trabajan con objetos tradicionales de Java
(POJOs), separan claramente las funciones de los diversos servicios.
Por ello, son adecuados para la próxima generación de
paradigmas de programación, como la programación orientada
a aspectos.
Hemos
visto que Hibernate y Spring reducen la complejidad del desarrollo
de software, para lo cual se basan en abstracciones simplificadas.
Ahora bien, hemos visto también que la sencillez y la potencia
de una herramienta suelen oponerse. ¿Cómo sabemos que
estas abstracciones son suficientemente potentes para un desarrollo
empresarial?
2.3.
Abstracciones con fugas
Está claro
que hay una tendencia a retornar a abstracciones más sencillas
y limpias, pero la sencillez no es suficiente. Todas las abstracciones
tienen fugas, es decir, hay situaciones en que no pueden o no deberían
abstraer la infraestructura subyacente. Por ejemplo, nunca será posible
capturar toda la complejidad de la API nativa de una base de datos
en un framework simplificado y un contenedor ligero nunca será capaz
de hacer todo lo que hace un contenedor pesado. Por esta razón,
es importante exponer la capa inmediatamente inferior a la nueva abstracción.
Por ejemplo, en Hibernate no existe el concepto de procedimientos
almacenados. En vez de esto, se permite el acceso completo a la conexión
JDBC subyacente, para que se pueda llamar a los procedimientos almacenados
desde fuera de Hibernate.
Además,
una arquitectura adaptable y conectable, con bajo acoplamiento en
las áreas apropiadas, permite desconectar los servicios que
son inadecuados y conectar otros más robustos. Por ejemplo,
Spring permite conectar y desconectar la persistencia y las transacciones.
Hasta
ahora, hemos mencionado un par de proyectos de código abierto
que simplifican el desarrollo de aplicaciones Java. A continuación,
veremos lo que los principales vendedores J2EE están haciendo
para soportar un paradigma Java más sencillo.
|