2008/01/24
Interesting series for Eclipse plugin developers
If you're interested into Eclipse plugin development you shouldn't miss the series of articles written by my JetMinds colleague Ludek. Go and check it out @ www.dolejsky.com/tag/eclipse.
Å tÃtky: eclipse, english, IDE, java
2007/11/10
JGear LiveSource - Namodelujte si své Java EE aplikace!
Na portálu java.cz jsem publikoval recenzi na JGear LiveSource, Eclipse plugin, který je pokraÄ?ovatelem populárnÃho TogetherJ a je základnÃm kamenem nového JBuilderu 2007:JGear LiveSource je nový modelovacà nástroj firmy CodeGear. LiveSource umožňuje modelovánà a vizuálnà návrh Java /Java EE aplikacà pomocà modelovacÃho jazyka UML. Tento produkt je distribuován jako plugin pro vývojové prostÅ™edà Eclipse. V tomto pÅ™ÃspÄ›vku bych chtÄ›l popsat svoje dojmy a zkuÅ¡enosti z tohoto produktu.
Celou recenzi naleznete zde:
JGear LiveSource – Namodelujte si své Java EE aplikace! (java.cz)
Zde se můžete podÃvat na screenshoty.
Å tÃtky: eclipse, IDE, JBuilder, JGear, programovani, recenze, software
2007/07/02
Eclipse - nefunkÄ?nà "hot code replace"
Alternativnà nadpis tohoto pÅ™ÃspÄ›vku by mohl znÃt "Jak použÃt Eclipse (java) compiler" mimo IDE. TÃmto jsem asi dost napovÄ›dÄ›l, o Ä?em budou následujÃcà řádky pojednávat.
Remote Debugging
Vzdálené debugovánà (remote debugging) je užiteÄ?ný nástroj pro ladÄ›nà "vzdálených" aplikacà - "vzdálených" v tom smyslu, že se pomocà svého debuggeru pÅ™ipojujete do jiné běžÃcà Java Virtual Machine nejspÃÅ¡e s úmyslem ladÄ›nà dané aplikace ;) Nebudu nosit dÅ™Ãvà do lesa: VÃce si o tomto tématu pÅ™eÄ?tete napÅ™Ãklad v Ä?lánku Debugging v praxi - opravdu samozÅ™ejmost?! od otce Fura Ä?i Eclipse a drobné maliÄ?kosti - vzdálené debugovánà od Dagiho.
Hot Swap
S remote debuggingem souvisà dalšà funkcionalita, která z mé vlastnà zkuÅ¡enosti dokáže uÅ¡etÅ™it obrovské množstvà Ä?asu. Tato funkcionalita se jmenuje hot swap. Hot swap umožňuje "vpaÅ¡ovat" do běžÃcà aplikace novou verzi pÅ™eloženého kódu a nahradit jà tak kód původnÃ.
Pro lepšà pÅ™edstavu, proÄ? považuji hot swap za maximálnÄ› efektivnà pomůcku, uvedu jeden pÅ™Ãklad z mé praxe. Pracoval jsem na Ariba projektu, kde restart modulu Ariba aplikace (to jest jedné instance Weblogicu) na které jsem pracoval, trval na laptopu pÅ™ibližnÄ› 9-10 minut (dÃky tomu, že se inicializovaly různé adaptéry, Tibco repositories, kontrolovala se XML metadata,...).
SouÄ?ástà typického úkolu na tomto projektu byl vývoj nÄ›jakého vysoce sofistikovaného ;) java kódu, který použÃvá pokud možno public API aplikace a na konci dosáhne kýženého výsledku, za aplausu business consultantů :) V uvedené konfiguraci, kdy jednÃm restartem ztratÃte tolik Ä?asu, si musÃte dávat sakra dobrý pozor na jakékoliv triviálnà chyby (na netriviálnà chyby si Ä?asto pozor dát ani nemůžete, napÅ™Ãklad z toho důvodu, že API nenà zrovna dobÅ™e zdokumentované a až stacktrace pÅ™i testovánà vás upozornà na možný problém) ;)
Zde se pomalu dostávám k jádru vÄ›ci. Hot swap vám v tÄ›chto pÅ™Ãpadech velice dobÅ™e posloužÃ: triviálnà problém - zapomnÄ›li jste test na
Ti rozumnÄ›jšà (pÅ™ÃpadnÄ› ti pracujÃcà v módu fixed fee a ne time&material :D ) využijà hot swap: kód v IDE jednoduÅ¡e opravÃte, upravÃte, pÅ™eložÃte, a pokud jste debuggerem pÅ™ipojeni do JVM v které běžà aplikace, hot swap nahraje novou verzi byte-kódu do JVM a nahradà jà kód původnÃ. V tÄ›chto jednoduchých pÅ™Ãpadech vám hot swap nezanedbatelnÄ› Å¡etřà Ä?as. (SamozÅ™ejmÄ› zde existuje mnoho omezenÃ, která když poruÅ¡Ãte, debugger zobrazà varovánÃ, že daná zmÄ›na nenà podporována (zmÄ›ny v hierarchii tÅ™Ãd ale i napÅ™Ãklad pÅ™idánà public metody atd.) a restartu se stejnÄ› nevyhnete).
Hot Swap v Eclipse
ZatÃmco v Intellij Idee hot swap fungoval bez problémů a intuitivnÄ›, po pÅ™echodu na Eclipse mi hot code replace (jak se tato feature v eclipsu nazývá) v mnoha pÅ™Ãpadech nefungoval. Po rekompilaci tÅ™Ãdy se mi mÃsto oÄ?ekávaného nahránà nového byte-kódu na server zobrazovalo Ä?asto následujÃcà varovánÃ:

Trochu jsem pátral co je pÅ™ÃÄ?inou a dopátral jsem se. Na obranu debuggingu v Eclipsu můžu uvést, že je v tom (Ä?ásteÄ?nÄ› nevinnÄ›).
Scheme change not implemented
Zásadnà problém je ten, že Eclipse pro kompilaci nepoužÃvá sunovský
(Nutno podotknout, že důvod proÄ? se mi na serveru objevuje kód kompilovaný jiným kompilátorem (
ŘeÅ¡enÃ
ŘeÅ¡enà problému spoÄ?Ãvá v použità stejného kompilátoru v obou pÅ™Ãpadech.
Prvnà možnost je donutit Eclipse kompilovat pomocÃ
Druhá varianta je donutit existujÃcà produkt, který obsahuje vlastnà "Ant" build systém, kompilovat pomocà Eclipse kompilátoru.
To jde celkem jednoduše:
TÃmto donutÃme Ant kompilovat pomocà Eclipse kompilátoru a hot swap neboli hot code replace funguje tak jak má.
Malá poznámka na konec. RozhodnÄ› bych nedoporuÄ?oval mÄ›nit použitý compiler na produkÄ?nÃm server, o Ä?em tu pojednávám, je prostÅ™edà vývojáře!
VÃce kompilovánà v Eclipse o možnostech použità vnÄ› Eclipse IDE se lze doÄ?Ãst v online nápovÄ›dÄ›: JDT Plug-in Developer Guide > Compiling Java code.
Remote Debugging
Vzdálené debugovánà (remote debugging) je užiteÄ?ný nástroj pro ladÄ›nà "vzdálených" aplikacà - "vzdálených" v tom smyslu, že se pomocà svého debuggeru pÅ™ipojujete do jiné běžÃcà Java Virtual Machine nejspÃÅ¡e s úmyslem ladÄ›nà dané aplikace ;) Nebudu nosit dÅ™Ãvà do lesa: VÃce si o tomto tématu pÅ™eÄ?tete napÅ™Ãklad v Ä?lánku Debugging v praxi - opravdu samozÅ™ejmost?! od otce Fura Ä?i Eclipse a drobné maliÄ?kosti - vzdálené debugovánà od Dagiho.
Hot Swap
S remote debuggingem souvisà dalšà funkcionalita, která z mé vlastnà zkuÅ¡enosti dokáže uÅ¡etÅ™it obrovské množstvà Ä?asu. Tato funkcionalita se jmenuje hot swap. Hot swap umožňuje "vpaÅ¡ovat" do běžÃcà aplikace novou verzi pÅ™eloženého kódu a nahradit jà tak kód původnÃ.
Pro lepšà pÅ™edstavu, proÄ? považuji hot swap za maximálnÄ› efektivnà pomůcku, uvedu jeden pÅ™Ãklad z mé praxe. Pracoval jsem na Ariba projektu, kde restart modulu Ariba aplikace (to jest jedné instance Weblogicu) na které jsem pracoval, trval na laptopu pÅ™ibližnÄ› 9-10 minut (dÃky tomu, že se inicializovaly různé adaptéry, Tibco repositories, kontrolovala se XML metadata,...).
SouÄ?ástà typického úkolu na tomto projektu byl vývoj nÄ›jakého vysoce sofistikovaného ;) java kódu, který použÃvá pokud možno public API aplikace a na konci dosáhne kýženého výsledku, za aplausu business consultantů :) V uvedené konfiguraci, kdy jednÃm restartem ztratÃte tolik Ä?asu, si musÃte dávat sakra dobrý pozor na jakékoliv triviálnà chyby (na netriviálnà chyby si Ä?asto pozor dát ani nemůžete, napÅ™Ãklad z toho důvodu, že API nenà zrovna dobÅ™e zdokumentované a až stacktrace pÅ™i testovánà vás upozornà na možný problém) ;)
Zde se pomalu dostávám k jádru vÄ›ci. Hot swap vám v tÄ›chto pÅ™Ãpadech velice dobÅ™e posloužÃ: triviálnà problém - zapomnÄ›li jste test na
null? Chcete pÅ™idat debugovacà řádku...? S hrůzou zjistÃte že nerovnost v podmÃnce je pÅ™esnÄ› obrácenÄ›? Bez remote debuggingu (aneb tak jak jsem to vidÄ›l kupodivu u velkého množstvà kolegů konzultantů) musÃte shodit server, opravit, pÅ™ekompilovat, zrestartovat a dvacet minut je pryÄ?. NáslednovnÄ› zjistÃte, že o pár řádků dále je problém podobný a tak pořád dokola. Ti rozumnÄ›jšà (pÅ™ÃpadnÄ› ti pracujÃcà v módu fixed fee a ne time&material :D ) využijà hot swap: kód v IDE jednoduÅ¡e opravÃte, upravÃte, pÅ™eložÃte, a pokud jste debuggerem pÅ™ipojeni do JVM v které běžà aplikace, hot swap nahraje novou verzi byte-kódu do JVM a nahradà jà kód původnÃ. V tÄ›chto jednoduchých pÅ™Ãpadech vám hot swap nezanedbatelnÄ› Å¡etřà Ä?as. (SamozÅ™ejmÄ› zde existuje mnoho omezenÃ, která když poruÅ¡Ãte, debugger zobrazà varovánÃ, že daná zmÄ›na nenà podporována (zmÄ›ny v hierarchii tÅ™Ãd ale i napÅ™Ãklad pÅ™idánà public metody atd.) a restartu se stejnÄ› nevyhnete).
Hot Swap v Eclipse
ZatÃmco v Intellij Idee hot swap fungoval bez problémů a intuitivnÄ›, po pÅ™echodu na Eclipse mi hot code replace (jak se tato feature v eclipsu nazývá) v mnoha pÅ™Ãpadech nefungoval. Po rekompilaci tÅ™Ãdy se mi mÃsto oÄ?ekávaného nahránà nového byte-kódu na server zobrazovalo Ä?asto následujÃcà varovánÃ:
Trochu jsem pátral co je pÅ™ÃÄ?inou a dopátral jsem se. Na obranu debuggingu v Eclipsu můžu uvést, že je v tom (Ä?ásteÄ?nÄ› nevinnÄ›).
Scheme change not implemented
Zásadnà problém je ten, že Eclipse pro kompilaci nepoužÃvá sunovský
javac, nýbrž svůj kompilátor (souÄ?ást JDT Core component). Vyprodukovaný byte kód se lišà (nezkoumal jsem do detailů jak...) od byte kódu class pÅ™eložených javac kompilátorem. Tyto rozdÃly jsou pro debugger ale podstatné tak, že neumožnà zámÄ›nu byte kódu za bÄ›hu. Podobný problém viz napÅ™. na news.eclipse.tools.jdt: Scheme change not implemented.(Nutno podotknout, že důvod proÄ? se mi na serveru objevuje kód kompilovaný jiným kompilátorem (
javac než z IDE (eclipse compiler), je fakt, že instalace a deployment této aplikaci je pomÄ›rnÄ› komplikovaný proces a je pro nÄ›j pÅ™epdÅ™ipravena sada nástrojů (Ant skriptů), které je nutné ve správném poÅ™adà použÃt v závislosti na provádÄ›né zmÄ›nÄ›).ŘeÅ¡enÃ
ŘeÅ¡enà problému spoÄ?Ãvá v použità stejného kompilátoru v obou pÅ™Ãpadech.
Prvnà možnost je donutit Eclipse kompilovat pomocÃ
javac. To jde podle mÄ› jednoduÅ¡e pouze pomocà nového ANT builderu a custom Ant scriptu. Což nenà zrovna elegantnÃ.Druhá varianta je donutit existujÃcà produkt, který obsahuje vlastnà "Ant" build systém, kompilovat pomocà Eclipse kompilátoru.
To jde celkem jednoduše:
- stáhnout
ecj.jar(JDT Core Batch Compiler)z eclipse.org
- donutit Ant použÃt tento compiler: tzn. nastavit hodnotu Ant property
build.compilernaorg.eclipse.jdt.core.JDTCompilerAdapter
- a nakonec samozřejmě přidat
ecj.jardo classpath (tip pro lenochy: nahrát tento jar do adresáře ant/lib)
TÃmto donutÃme Ant kompilovat pomocà Eclipse kompilátoru a hot swap neboli hot code replace funguje tak jak má.
Malá poznámka na konec. RozhodnÄ› bych nedoporuÄ?oval mÄ›nit použitý compiler na produkÄ?nÃm server, o Ä?em tu pojednávám, je prostÅ™edà vývojáře!
VÃce kompilovánà v Eclipse o možnostech použità vnÄ› Eclipse IDE se lze doÄ?Ãst v online nápovÄ›dÄ›: JDT Plug-in Developer Guide > Compiling Java code.
Å tÃtky: eclipse, programovani