java-ee netbeans jrebel hotdeploy

Redesplegar aplicaciones Java EE de inmediato



java-ee netbeans (4)

Soy bastante nuevo en Java EE y he estado luchando con la lentitud del proceso de implementación, y me pregunto si estoy haciendo algo mal. Tengo experiencia con Django donde ocurren inmediatamente los cambios al código, y parece que las aplicaciones Java EE de implementación en caliente son un poco confusas: hay varias cosas que afirman implementar en caliente (Glassfish, Eclipse manic hotdeploy, Jetty hotdeploy, JRebel, etc. )

Mi proyecto es un proyecto de Maven y estoy usando Netbeans para implementar. El sitio usa los marcos Spring, JSF e Hibernate.

En Netbeans, Implementar al guardar, de acuerdo con la siguiente captura de pantalla parece estar habilitado, pero no es posible hacer clic / desmarcar, ya que dice obtener la información de mi pom.xml (aunque no existe tal campo en mi pom.xml (solo dependencias)).

Ahora, los cambios en algunos archivos parecen ser efectivos de inmediato. Estos incluyen: - Archivos JSF - Archivos estáticos

Los cambios en los siguientes requieren implementación: - Cualquier archivo XML - Cualquier archivo de propiedades, incluso archivos de propiedades de localización - Cualquier archivo java

Los cambios en esos requieren que implemente manualmente y la reasignación lleva medio minuto, aunque actualmente solo tengo 2-3 clases, básicamente una única clase de usuario y una clase de autorización. El proyecto solo permite inicios de sesión en este momento, y a pesar de esto, la compilación tarda unos segundos; y el contenedor (Glassfish) parece consumir alrededor de 600 MB de RAM e incluso da errores de PermGen después de unas pocas implementaciones y necesito matar el proceso de Java usando el Administrador de tareas. (He leído que esto está relacionado con la filtración del recolector de basura después de cada redistribución, e incluso he usado jhat para generar un perfil, pero se me presentó una lista de miles de clases, mis clases, clases de Spring, Hibernate, etc.)

También he oído hablar de jrebel e intenté ejecutarlo, pero parece que no es compatible con mi versión de Netbeans (7.0) y, aunque parece que se ejecuta, cualquier modificación de un archivo java aún requiere una nueva implementación.

¿Hay algo que pueda hacer para solucionar estos problemas, o es normal en Java EE esperar alrededor de 1 minuto después de cada cambio en cualquier archivo Java? Este problema mata la productividad de manera significativa.

Esta es mi salida de Glassfish al implementar la aplicación: http://pastebin.com/7FhZ6AVh


"Compilar al guardar" ralentizó mucho las cosas para mí, pero otra cosa que descubrí después es el botón "Aplicar cambios de código" en Netbeans, que solo está visible en el modo de depuración. (El botón verde a la derecha en la imagen)

Esto es útil para aplicar cambios al código de Java; no funciona cada vez, pero creo que funciona la mayor parte del tiempo si el cambio no es una adición de método y el bean tiene un alcance de solicitud. Creo que esto hace lo que Compile al guardar de forma manual, pero es mejor que volver a implementar.


Este es un gran video de Geertjan Wielenga del equipo de NetBeans que se encarga de configurar JRebel en NetBeans 7.2.1 y GlassFish 3.1.2:

Cómo comenzar con JRebel en NetBeans IDE: http://www.youtube.com/watch?v=kveXKv2q4Ec


JRebel es compatible con NetBeans 7.0 (http://plugins.netbeans.org/plugin/22254/jrebel-netbeans-plugin) y, de hecho, es compatible con cualquier IDE que exista.


No he encontrado fuentes creíbles ni oficiales, pero como no tienes respuestas, me gustaría señalar dos cosas que descubrí.

La primera es esta pregunta frecuente en el sitio de NetBeans que describe cómo activar la compilación en guardar para un proyecto de Maven. Parece que esta configuración está desactivada de manera predeterminada y solo está activada por defecto para las pruebas. Por conveniencia:

Vaya al cuadro de diálogo de propiedades del proyecto, panel Compilar , para activarlo también para la ejecución de la fuente principal.

El segundo es, y debo enfatizar que no entiendo completamente esto, parece que hay dos formas diferentes en que NetBeans implementa una Aplicación Web. La primera es una implementación in situ que parece ser la misma que la implementación manual de un archivo .war en el servidor. La segunda es una implementación incremental, que si se asemeja a la compilación incremental significa que cuando la aplicación se implementa en caliente, solo está implementando los archivos modificados.

La implementación in situ parece ser el método predeterminado de implementación cuando hace clic en Run o Deploy desde el menú contextual de los proyectos. La implementación incremental ocurre cuando su proyecto ya está implementado y hace clic nuevamente en Run (o usa el botón Run barra de herramientas).

Me gustaría señalar que las preguntas frecuentes de NetBeans, aunque en el sitio web netbeans.org no es una publicación oficial. Cualquiera puede crear una pregunta frecuente y la información puede quedar obsoleta sin revisión.

Editar : Después de reflexionar un poco, he decidido que la llamada implementación incremental no es una forma diferente de implementación, sino que la segunda vez que Run su aplicación, realiza una implementación incremental.

Editar : tenga en cuenta que la instrucción anterior lo señala al panel Compile en lugar del panel Run que ha seleccionado en su captura de pantalla. Aquí está mi captura de pantalla que muestra que debe elegir for both application and test execution de la for both application and test execution en el menú desplegable del panel Compile y que el valor predeterminado es solo for test execution only