2009-02-11 12 views
5

Używam JBoss 4.0.3.SP1_CP04 i łączę się z nim za pomocą debugera Eclipse 3.4.1, obie używają JDK 1.6.0_11.Jak mogę uzyskać "zastępczą wymianę" kodu Java w JBoss?

Po drobnej zmianie metody (np. Zmianie "+ 1" w logice na "+ 2") i zapisaniu, natychmiast pojawia się okno dialogowe z komunikatem o błędzie "Brak wymienianego kodu gorącego" błąd „metoda usuwania nie realizowany”

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

Czy ktoś może sugerować kroki dla coraz to zadziałało?

Odpowiedz

3

Co chcesz zrobić, to wdrożyć na JBOSS jako exploded WAR. Zazwyczaj, jeśli edytor sam się wdraża, wówczas będzie zarządzał kopiowaniem pojedynczych plików podczas ich zmiany.

W języku IntelliJ, this is easy. Nigdy nie robiłem tego od Eclipse, ale najlepiej jest, jeśli jest to this project.

+0

Ta odpowiedź przypomniała mi, żebym sprawdził, czy moja wojna została rozbita po utworzeniu nowego projektu i stwierdzeniu, że nie mogłem wymieniać się na gorąco - dziękuję! – peteorpeter

2

Używam JRebel i oszczędzam na życie, jeśli chodzi o modyfikowanie kodu i dynamiczne aktualizowanie serwera aplikacji. Zapłaciłem za siebie pierwszego dnia. (mamy 7-minutowy cykl kompilacji/wdrażania/restartu)

0

To, co opisałeś, powinno działać. Jakie są twoje argumenty jvm dla jboss, aby włączyć debugowanie?

Kopalnia są takie: -Xdebug -Xnoagent -Xrunjdwp: Transport = dt_socket, adres = 8000, server = y, zawiesić = n

0

Miałem problem, gdzie wymiana gorąco sam kod nie działa. Wprowadziliśmy kilka zmian, takich jak upewnienie się, że "kompilacja automatycznie" została zaznaczona i odznaczenie - "Przerwij kompilację, gdy wystąpi błąd ścieżki kompilacji". Ale w moim przypadku sam HCR nie działał. Nie dostałem tej wiadomości, o której wspomniałeś. Więcej szczegółów w tym linku. https://sites.google.com/site/javaerrorsandsolutions/home/hot-code-replacement

+0

Link jest uszkodzony. – palacsint

1
  1. Przed uruchomieniem debuggera w Eclipse ubezpieczyć wszystkich projektów w obszarze roboczym są odświeżane (nie jest wymagane, jeżeli kod został zmieniony poza Eclipse, na przykład po uzyskaniu zmiany z systemu kontroli wersji przy użyciu zewnętrznego narzędzia)
  2. W produkcji Java Ścieżka Eclipse zapewnia, że ​​nie włączasz jako części niektórych klas bibliotek, które próbujesz wymieniać na gorąco.
  3. Sprawdź, czy Eclipse JRE = JBoss JRE
  4. Sprawdź klasę, którą próbujesz wymieniać na gorąco. Czy ma wewnętrzne klasy? Występuję z problemem, gdy nie mogę zamienić klasy na wewnętrzną, podczas gdy inne klasy są zamieniane bez problemów.
1

Powód jest taki, że do zespołu można użyć innego kompilatora, który jest wymienny na gorąco. Na przykład, jeśli tworzysz projekt przez maven, użyliśmy javac. Kiedy próbujesz wykonać hot swap etslipse używa wbudowanego kompilatora kompilatora jdt (kompilator nie jest pobierany z zainstalowanego jdk i nie można go zmienić zwykłymi metodami). Uzyskane klasy binarne są różne i jvm nie może ich zastąpić.

+0

Czy można podać cytat, że JVM nie może klasy zbudowane przez wewnętrzny kompilator zaćmienia lub gdy klasy z różnych kompilatorów są mieszane. Nie mogę sobie wyobrazić, dlaczego tak się dzieje, ale nie mogę tego wykluczyć. – dmeister

+2

Doświadczyłem, że normalne klasy zwykle działają dobrze, ale gdy tylko zaangażują się klasy wewnętrzne/anonimowe, wszystko się psuje, myślę, że jdt i javac używają różnych konwencji nazewnictwa dla wygenerowanych klas. –

Powiązane problemy