Existuje několik možností, jak se vyhnout co nejčastějšímu nahrávání. Jednou z možností je důsledné psaní JUnit testů, které by mě měly upozorňovat na vzniklé problémy již při vývoji. Další možností je spuštění aplikačního serveru v debug módu. Ten částečně umožňuje provést tzv. hot deploy, kde se na server aktualizuje pouze část, kterou jsem právě změnil. Záměrně používám slovo částečně, protože i tento způsob je dost omezen (tvorba nových tříd, nových metod, EJBs, atd).
Projekt postavený nad Apache Wicket je možné spouštět také v debug řežimu. Tento mód umožňuje využít komplexnější analýzu (logování, ajax výstupy, atd) při vývoji. Pokud je tedy tento projekt spuštěn v debug řežimu a celý aplikační server také v debug módu, je možné za běhu měnit implementaci metod. Problém ovšem nastane s html soubory u wicket komponent. Ty se jen těžko budu snažit dostat do hot deploy řežimu.
Po menším pátrání jsem ovšem objevil možnost jak provést "autodeploy" těchto html souborů. Celý trik spočívá v tom, že si definuji vlastní tzv. "resource folder", který nastavím do místa, kde se vyskytuje můj projekt. Tato funkcionalita se zapisuje do init metody uvnitř vlastní Application Class, která je definována v web.xml jako "applicationClassName".
@Override
protected void init() {
super.init();
// 1
if (Application.DEVELOPMENT.equalsIgnoreCase(getConfigurationType())) {
// 2
getResourceSettings().setResourcePollFrequency(Duration.ONE_SECOND);
// 3
getResourceSettings().addResourceFolder("/home/ales/projekt/src/java");
}
}
1. funkcionalita se spustí jen v případě, že je celý projekt spuštěn v debug modu.
2. pokud ve svém projektu měním html soubor, je tato změna promítnuta v běžícím projektu ihned (1 vteřina)
3. nastavím celou cestu k mému projektu a k jeho balíčkům
Tento "resource folder" umožňuje změnu jak html souborů, tak i dalších vlastností jako je např. lokalizace v properties souborech, css, atd. Tedy vše kromě javovských tříd.
Co se týče samotného hot deploy, doufám, že se situace o dost zlepší s příchodem Glassfish V3, který by měl obsahovat OSGI kontejner.
*Malé rýpnutí:*
Nedávno jsem poslouchal poslední podcast 29 z java.cz, kde Roman Štrobl mluvil o nové funkcionalitě "Compile on Save" v NetBeans. Přiznám se, že se mi zatím nepodařilo tuto funkcionalitu využít při vývoji J2EE aplikace. Mám pocit, že je hot deploy na glassfishi omezen tak, že je to téměř nepoužitelné. Pokud se nemýlím, tak samotná EJB3 komponenta moc dobře takto "aktualizovat" nejde.
Metodu addResourceFolder() taky používám, protože nemám při vývoji HTML soubory na classpath, ale setResourcePollFrequency() nutné není. V development režimu je 1 sekunda default, viz org.apache.wicket.Application#configure(). Obecně bych řekl, že vývoj ve Wicketu je docela radost, autoři zjevně potřeby vývojářů znají velmi dobře (aby taky ne).
OdpovědětVymazatVzhledem k tomu co jste mi odpovedel v me otazce v blogu "Apache Wicket - Znovupoužitelné komponenty" si udelat vlastni „path resolver“ a ten by to mel zvladnout taky, ne? Pak je mozne mit HTML design uplne nekde jinde (ani nemusite mit stejne kosatou strukturu "cz/firma/projekt/subprojekt/esteneco/Trida.html" ale melo by nastavenim vlastniho path resolveru byt mozne osekat treba na strukturu /wicket/subprojekt/Trida.html v adresari /src/webapps/WEB-INF/jsp/... (pokud jste tak zvykli)
OdpovědětVymazatNebo to chapu spatne?
to Lukas Benda: "Resource Folder", který je zde použit nespecifikuje jakým způsobem se budou html soubory a další zdroje načítat. Pouze specifikuje cestu, která se ve finále překládá jako: "/cesta/k/balicku/JmenoTridy.html"
OdpovědětVymazatNicméně tuto funkcionalitu lze propojit s napsáním vlastního "path resolveru". Způsob jak toto udělat je popsáno ve wiki na stránkách Apache Wicketu.
Ahoj, wicket pouzivame jiz dlouho a i toto dynamicke nacitani html souboru. K tomu jeste dynamicke nacitani properties souboru a pouziti JavaRebel (http://www.zeroturnaround.com/javarebel/) pro reload trid. Co doporucuji je pouzivat pro vyvoj plugin filesync (http://andrei.gmxhome.de/filesync/) diky cemuz neni nutne psat do kodu nic navic ... protoze do cilove slozky jsou zmenene html/img/flash/properties/classes kopirovany ze zdrojovych automaticky po zmene a aplikace je tak plne ziva:-)
OdpovědětVymazatTyhle wickety jsou hodně fajn a já je používám třeba na to, že tady stáhnu automobilový benzinový bezpečnostní list, upravím a pak pošlu dál podle toho, kam to potřebuji umístit. Jako dá se s tím fakt hrát a když máte doma šikovného programátora, myslím in house ve firmě, tak máte fakt velký náskok proti konkurenci. :)
OdpovědětVymazat