2011-08-04 33 views
6

Soy un novato con JavaEE pero tengo alguna experiencia con ASP.NET MVC. Con ASP.NET MVC, sé que podemos hacer una arquitectura de complementos con la aplicación web ASP.NET MVC para que pueda crear un dll con estructura MVC y ponerlo en la aplicación web ASP.NET MVC existente para que funcione sin compilar la web aplicación http://www.wynia.org/wordpress/2008/12/05/aspnet-mvc-plugins/Spring MVC Plugin Architecture

Me pregunto si este tipo de arquitectura es posible con Spring MVC. Por ejemplo, cuando hago un archivo jar (o war) con estructura MVC y lo coloco en la aplicación web Spring MVC existente, debería funcionar sin recompilar la aplicación web. Si esto es posible, ¿cómo puedo lograr eso? Cualquier referencia sería apreciada.

Respuesta

2

Es posible sin recompilar, pero probablemente no sin reiniciar. Podría crear un .jar que colocará en el directorio WEB-INF/lib. Al usar classpath scanning, podrá desplegar sus nuevos controladores al momento de la puesta en marcha. Puede omitir la vista por completo y enviar datos directamente a ServletResponse. Hacer una vista desde un contenedor puede o no ser posible, no lo sé.

+0

Eso suena bien. Reiniciar parte está bien. Creo que es el mismo caso en ASP.NET MVC. Gracias amigo. – Jon

1

Parece que desea buscar "hotdeploy".

Lo que está solicitando no es una característica de Spring, sino una característica de JVM y del servidor de aplicaciones. El servidor de aplicaciones puede ver que, de hecho, sus clases han cambiado y, utilizando algunos ingeniosos trucos de ClassLoader, puede cargar nuevas versiones a la JVM en ejecución a medida que estén disponibles. Java no fue diseñado para funcionar así, por lo que hay algunos problemas (ClassLoader, leak de memoria, hotdeploy son buenas palabras clave para obtener más información sobre los problemas potenciales y las posibles soluciones). No recomendaría esto para uso de producción, pero puede ser útil durante el desarrollo.

Como esta es una característica de los servidores de aplicaciones, los detalles reales dependen del servidor de aplicaciones en particular y se explican en su documentación.

Si simplemente quieres un plugin-magic, no un hotdeploy real, hay otras cosas que podrías hacer. Un ClassLoader personalizado puede cargar clases desde cualquier fuente (archivo, red, base de datos ...) que desee y luego puede crear instancias y usarlas con la reflexión. (Esto es lo que sucede cuando despliegas la guerra en Tomcat/JBoss o lo que sea). Acceder y recargar dinámicamente recursos que no sean de clase dentro de los archivos jar/war es mucho más fácil.