Contenedores ligeros con Spring

En desarrollos J2EE generalmente se usa un contenedor como Tomcat, JBoss, Websphere, Weblogic, Glassfish, etc. La ventaja de estos contenedores es que ofrecen ya varios servicios que puede utilizar la aplicación que desarrollemos, por ejemplo datasources con manejadores de transacciones, servicio para envio de mail, autentificación de usuarios, logger, etc.

Pero qué pasa si necesitamos desarrollar una aplicación compacta, que no va a usar casi ninguno de estos servicios, que no tenga interfaz web por ejemplo, pero sí va a usar base de datos, mail, usuarios, etc? Qué pasa si el tiempo de arranque de la aplicación es importante?

Una opción muy viable es Spring. Este framework, que ha crecido bastante con el tiempo, permite "alambrar" una serie de objetos y componentes de manera que al final tenemos una arquitectura similar a la de un contenedor J2EE pero solamente con los servicios que necesitamos y todo dentro de una aplicación J2SE. Esto nos permite programar de manera más limpia, porque podemos poner toda nuestra lógica dentro de objetos comunes y corrientes (POJO's - Plain Old Java Objects), que implementen las interfaces que definimos primero y posteriormente los podemos envolver con proxies que nos faciliten el uso de ciertos recursos (como por ejemplo la transaccionalidad). Imagínense hacer algo similar a un EJB pero sin tener que heredar de ciertas clases y definir muchisimas cosas en varios archivos XML y tener que probar dentro de un ambiente muy complejo.

Adicionalmente, siempre tenemos código que generalmente tenemos que teclear o generar de alguna forma para conectar los componentes de una aplicación, ya sea desde un simple   hasta el uso de un Locator de JNDI para obtener un componente remoto. Spring nos permite eliminar todo este código porque las conexiones entre todos los objetos se definen en archivos XML, lo cual nos permite bastante flexibilidad. Se pueden definir reglas para propiedades que forzosamente deben ser configuradas, o asignarles valores default, etc.

Uno de los puntos fuertes de Spring es que implementa el design pattern de IoC (Inversion of Control), que visto de manera muy simple, es justamente esto de conectar los objetos siguiendo la definición de una configuración en XML en vez de tener todo eso por código. Y el framework ofrece interfaces para muchos frameworks externos, como pueden ser JSF, Struts, Tapestry, Hibernate, iBatis, etc; interfaces para facilitar el uso de arquitecturas como JTA, JCA, JNDI, etc.

Por ejemplo, podemos publicar un objeto en JNDI sin necesidad de teclear una sola línea de código para esos efectos, al igual que podemos utilizar un componente publicado en JNDI sin necesidad de teclear nada de código para ello. Simplemente definimos el componente que necesitamos en la configuración de Spring y podemos hacer referencia a dicha definición en otros componentes.

En resumen, es una manera mucho más sencilla de programar, porque nos quita mucha de la talacha de estar publicando componentes, acomodándolos, conectándolos, etc y simplemente podemos concentrarnos en hacer código específico para nuestra aplicación. Una vez que lo comiencen a utilizar y vean todos los beneficios que les trae, no lo van a querer dejar.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de benek

Me llama mucho la atención

Me llama mucho la atención Spring, no lo conozco y no sé como se maneja, se ve que es bastante extenso y
lo malo de todo es que hace poco que quise conocerlo no supe muy bien por donde comenzar.

Por lo que se escucha y se lee parece que es de lo mejor que hay hoy día para desarrollar Java EE.

Sería mucha molestia ezamudio si comentaras una ligera ruta a seguir para comenzar el aprendizaje de este framework?

Saludos!!

--
Javier Benek

Imagen de davo

Buen tema

Si Spring, facilita el desarrollo de aplicaciones empresariales, ahorrando mucho codigo, ayuda a estructurar la arquitectura y a implementar AOP . Solo dejame corregirte la base de Spring es Inversion of Control, probablemente te confundiste con la Dependency Inyeccion.

Saludos

Imagen de ezamudio

Corregido

Tienes razón, se me fue el patín, escribí esto muy rápido y puse mal ese término. Corregido.

Given the choice of dancing pigs and security, users will choose dancing pigs, every single time. - Steve Riley

Imagen de ezamudio

Ruta

Yo lo que hice fue bajarlo y leer la referencia que viene en PDF, no de manera lineal, pero primero lei todo acerca de los FactoryBeans y ApplicationContext.
Creo que la mejor manera de aprender Spring o cualquier otro framework es jugando con él un rato. Así que lo mejor que puedes hacer es crear un pequeño programa de linea de comando, o interfaz en Swing o algo asi, es decir algo standalone para que no tengas que meterte a J2EE con Spring todavía porque ya sabes que cualquier cosa en J2EE es más complicada.
Puedes adaptar algún programa que tengas con dos o tres componentes, para configurarlos en Spring en vez de crearlos por código y cambiar el código para solamente crear el ApplicationContext y obtener el bean principal e invocar su funcionalidad. Eso te da una buena idea de cómo funciona todo. Por ejemplo si tienes algún programa que consiste en leer algo de una base de datos y ponerlo en un archivo de texto, puedes definir la interfaz para hacer eso, luego implementarla en un objeto en Java usando JDBC clásico, y configurar Spring para crear ese objeto y el DataSource que usa; en tu main vas a crear el ApplicationContext y luego le pides el bean en cuestión, haciendo cast a la interfaz que definiste al principio. Y lo ejecutas y listo.
Luego puedes hacer otra implementación distinta que use los objetos de Spring para JDBC (SimpleJdbcTemplate con un ParameterizedRowMapper por ejemplo). Comparas el código que tuviste que hacer en el primer caso contra el segundo caso, tanto los .java como el XML de Spring para configurar los beans.
Luego puedes hacer una tercera implementación usando Hibernate o iBatis, etc y así vas probando esas tecnologías (o usas la que ya conozcas) y lees acerca de cómo usar el framework que vas a usar, junto con Spring.

No tienes que conocer toooooodo lo que trae Spring, simplemente vas conociendo algunos aspectos y poco a poco te vas adentrando más en cómo usar algunos frameworks que ya conoces, de manera más sencilla, con la capa que Spring te ofrece sobre del framework en cuestión. Por ejemplo poder crear algo similar a EJB's con JTA en una aplicación de Java Standard Edition es una maravilla.

Given the choice of dancing pigs and security, users will choose dancing pigs, every single time. - Steve Riley