2009-02-11 26 views
5

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.¿Cómo puedo obtener el "reemplazo de código caliente" de Java en JBoss?

Cuando hago un pequeño cambio en un método (por ejemplo, cambiando un "+ 1" en la lógica a "+ 2") y lo guardo, recibo inmediatamente un diálogo de mensaje de error titulado "Hot Code Replace Failed" con el error "método Delete no implementado"

Hot code replace failed dialog http://img6.imageshack.us/img6/531/hotcodereplacefailedkp6.png

¿Puede alguien sugerir pasos para conseguir que esto funcione?

Respuesta

3

Lo que desea hacer es implementar en JBOSS como exploded WAR. Normalmente, si un editor realiza la implementación inicial, administrará la copia de archivos individuales a medida que cambien.

En IntelliJ, this is easy. Nunca lo he hecho desde Eclipse, pero this project es su mejor opción.

+0

Esta respuesta me recordó que debía verificar si mi WAR explotó después de crear un nuevo proyecto y descubrí que no podía intercambiar en caliente, ¡gracias! – peteorpeter

2

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)

0

Lo que describió debería funcionar. ¿Cuáles son tus jvm args to jboss para habilitar la depuración?

Mina son los siguientes: -Xdebug -Xnoagent -Xrunjdwp: transport = dt_socket, dirección = 8000, servidor = y, suspender = n

0

que tenía un problema en el propio código de sustitución en caliente no estaba funcionando. 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

+0

El enlace está roto. – palacsint

1
  1. Antes de ejecutar depurador en Eclipse asegurar que todos los proyectos en su área de trabajo que se renuevan (se requiere si el código se ha cambiado fuera de Eclipse, por ejemplo, después de conseguir cambios de sistema de control de versiones utilizando la herramienta exterior)
  2. En Java Build La ruta de acceso de Eclipse asegura que no incluya como parte de algunas clases de biblioteca que está tratando de intercambiar en caliente
  3. Compruebe que Eclipse JRE = JBoss JRE
  4. Compruebe la clase que está tratando de intercambio 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.
1

La razón es que el ensamblado se puede utilizar con otro compilador que se puede intercambiar 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.

+0

¿Puede proporcionar una cita que la JVM no puede crear clases mediante el compilador de eclipse interno o cuando se mezclan clases de compiladores diferentes? No puedo imaginar por qué este debería ser el caso, pero tampoco puedo descartarlo. – dmeister

+2

He hecho la experiencia de que las clases normales generalmente funcionan bien, pero tan pronto como las clases internas/anónimas están involucradas, las cosas se rompen, creo que jdt y javac usan diferentes convenciones de nombres para las clases generadas. –

Cuestiones relacionadas