JKVA schreef op zaterdag 11 maart 2006 @ 19:31:
[...]
Heeft iemand toevallig een idee hoe je die hot deployment kunt uitschakelen? Dan maar een complete klasse compilen, het is altijd beter dan een complete verse deployment van de webapp.
Ik zou het zelf niet handig vinden om hot deployment uit te schakelen. Je moet dan na elke verandering in 1 van je files met de hand 'delta' deployen. Daar wordt je snel moe van hoor. Maar als dat is wat je wilt, dan kun je dit op meerdere manieren bereiken. De makkelijkste manier is om je project niet meer op auto-build te zetten. Ook kun je als WAR deployen ipv als exploded.
Maar zelfs als je dat doet dan zal je draaiende AS niet opeens magisch wel de veranderingen hot accepteren hoor! Het is niet het feit dat MyEclipse incrementele veranderingen in class files naar de AS stuurt (dat gebeurd namelijk niet), maar het feit dat de VM classes al geladen heeft en dat deze in gebruik zijn. Code kan bijvoorbeeld 'functie pointers' (de Java reflection variant dus) naar classen opgeslagen hebben. Als jij ondertussen hot de method signature veranderd (bv een parameter type veranderd), of nog erger die hele method verwijders, dan zal die andere code hierop vastlopen.
Dus ook al zou je 'den hele class hercompileren' (wat dus al gebeurd!), dan nog moet je de AS herstarten.
MyEclipse heeft sinds 4.0 wel een shortcut hiervoor. Ipv de juiste AS opzoeken in je toolbar, dan stop clicken, vervolgens weer opzoeken en start clicken, hoef je nu alleen nog maar op het bijbehorende icon te clicken. Dit stopt en start (effectief een herstart dus) de laatst gestarte AS.
De echte fix voor dit probleem kan alleen door de JVM gedaan worden. Zoals gezegd, Versie 6 lost een paar kleine dingetjes op maar veel is het niet. Zowieso zul je nog een paar jaar moeten wachten voor je versie 6 mag gebruiken (tenzij je voor prive dingen programmeerd natuurlijk).
It's shocking to find how many people do not believe they can learn, and how many more believe learning to be difficult.