remote - ¿Cómo puedo hacer que Java "reemplazo de código caliente" funcione en JBoss?
standalone bat debug (6)
Lo que desea hacer es implementar a JBOSS como una GUERRA estallada . Normalmente, si un editor realiza la implementación inicial, administrará la copia de archivos individuales a medida que cambien.
En IntelliJ, esto es fácil . Nunca lo hice de Eclipse, pero este es tu mejor proyecto .
Estoy ejecutando JBoss 4.0.3.SP1_CP04 y conectándome a él con el depurador de Eclipse 3.4.1, ambos usando JDK 1.6.0_11.
Cuando hago un pequeño cambio en un método (por ejemplo, cambiando un "+1" en la lógica a un "+2") y lo guardo, recibo de inmediato un diálogo de mensaje de error titulado "Reemplazo de código caliente fallado" con el error "Eliminar Método no Aplicado"
¿Alguien puede sugerir pasos para hacer que esto funcione?
Lo que describiste debería funcionar. ¿Cuáles son tus jvm args to jboss para habilitar la depuración?
Los míos son estos: -Xdebug -Xnoagent -Xrunjdwp: transport = dt_socket, address = 8000, server = y, suspend = n
Tuve un problema en el que el reemplazo del código de seguridad no funcionaba. Hicimos algunos cambios, como asegurarnos de que la "compilación automática" fue marcada y desmarcar la opción "abortar compilación cuando se produce un error de compilación". Pero en mi caso, HCR en sí no estaba funcionando. No recibí el mensaje como mencionaste. Más detalles están en este enlace. https://sites.google.com/site/javaerrorsandsolutions/home/hot-code-replacement
- Antes de ejecutar el depurador en Eclipse, asegúrese de que todos los proyectos en su área de trabajo se actualicen (es necesario si el código fue cambiado fuera de Eclipse, por ejemplo, después de obtener cambios del sistema de control de versiones con la herramienta externa)
- En Java Build Path de Eclipse asegúrese de no incluir como parte de algunas clases de biblioteca que está tratando de intercambiar en caliente
- Compruebe que Eclipse JRE = JBoss JRE
- Verifique la clase que está tratando de intercambiar en caliente. ¿Tiene clases internas? Acabo de encontrarme en problemas cuando no puedo intercambiar clases con clase interna, mientras que otras clases se intercambian sin problemas.
He estado usando JRebel y es un salvavidas en cuanto a la modificación de código y la actualización dinámica del servidor de la aplicación. Pagado por sí mismo el primer día. (tenemos un ciclo de compilación / implementación / reinicio de 7 minutos)
La razón es que el ensamblado se puede usar con otro compilador que se intercambia en caliente. Por ejemplo, si construyes un proyecto por maven, usamos javac. Cuando intenta realizar un intercambio en caliente, etslipse usa el compilador jdt del compilador incorporado (el compilador no se toma del jdk instalado y no se puede cambiar por medios regulares). Las clases binarias obtenidas son diferentes y jvm no puede reemplazarlas.