2011-10-14 32 views
10

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 los cambios en el código ocurren inmediatamente, 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.)Redesplegar aplicaciones Java EE inmediatamente

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

En Netbeans, Desplegar 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)). enter image description here

Ahora, los cambios en algunos archivos parecen ser efectivos inmediatamente. Estos incluyen: - archivos JSF - Los archivos estáticos

Cambios a continuación requieren el despliegue: - Cualquier archivo XML - archivadas las propiedades, incluso propiedades de localización archivos de - Cualquier archivo java

Cambios a los que me requieren implementar manualmente y volver a implementar 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 el colector de basura que se escapa 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, Spring, Hibernate, etc.)

También he oído hablar de jrebel y traté de 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.

Aquí está mi salida de Glassfish al desplegar la aplicación: http://pastebin.com/7FhZ6AVh

Respuesta

5

He fuentes creíbles ni oficiales que se encuentran, pero ya que no tienen respuestas me gustaría señalar dos cosas que he descubierto.

El primero es this FAQ 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. Para mayor comodidad:

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

El segundo es, y debo recalcar que no lo entiendo del todo por completo, 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 de un archivo .war en el servidor de forma manual. 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 en el lugar parece ser el método predeterminado de implementación cuando hace clic en Run o Deploy en 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 de barra de herramientas Run).

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 un poco de reflexión he decidido que la llamada implementación incremental no es una forma diferente de despliegue es sólo que la segunda vez que Run su aplicación lo hace una implementación incremental.

Editar: Observe que la instrucción anterior que apunta al panel Compile en oposición al panel Run que ha seleccionado en su pantalla. Aquí está mi captura de pantalla mostrando que tiene que elegir for both application and test execution en la gota Compile panel hacia abajo y que el valor predeterminado es for test execution only

0

"compilar en Guardar" disminuido mucho las cosas para mí, pero otra cosa que he encontrado luego aparece 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 los cambios del 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.

Apply Code Changes

+0

"Aplicar cambios de código" es hotswap. No funcionará si está cambiando una firma de clase. – Daniel

2

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 hay.

1

Este es un gran video por Geertjan Wielenga del equipo de NetBeans que camina a través de la creación de JRebel en NetBeans 7.2.1 y 3.1.2 GlassFish:

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