středa 18. června 2008

Je čas na Apache Wicket?

Záznam diskuze:
L: Ahoj Franto, mám menší problém.
F: Jaký Lumíre?
L: Nevím, který webový framework pro javu je nejlepší.
F: No to je jednoduché. Vyzkoušej těch 40 nejznámenjších a pak se rozhodni.
L: Hmm... :(
Konec.

Ať již člověk navštíví jakoukoli homepage webového frameworku, dočte se, že zvolil dobře. Nejlepší možné řešení, vše jednoduché, perfektně rozšířitelné a v porovnání s ostatními je proste "Number ONE".

Sám jsem již dávno rezignoval na hledání zlaté žíly v podobě nejlepšího řešení. Volbu by mělo ovlivňovat to, jakou architekturu dané aplikace plánuji či jakým backendem aplikce disponuji. I když jsou snad všechny možné kombinace možné (Seam + Spring, Seam + EJB, Wicket + Spring, ...., ne vždy je volba zrovna šťasná. Pokud do hry vložím další možnosti jako volání část aplikace jiným způsobem (např. remote EJB), dostávám již užší skupinu možností.

Z této skupiny, která se vyznačuje volnou vazbou na business logiku, snadnou rozšířitelností a možností souběžného běhu s jiným web kontextem mi zatím nejlépe vychází Apache Wicket.

Ano já vím, stále existuje lepší .... nebo ještě lepší .... a vlastně úplně nejlepší ...... Ale já nemám čas ani náladu zkoumat další desítku možností. Stačí mi ta první desítka :)

Proč Apache Wicket?

  • volná vazba na business logiku

  • žádné xml

  • žádné anotace, které z POJOs dělají komponenty použitelné pouze v daném kontextu

  • téměř čisté html

  • vše je psané v jave, takže refactoring je mnohem snažší záležitost

  • dané komponenty si pamatují předchozí stav, takže tlačítko zpět již nemusí být noční můrou

  • menší zátěž pro server oproti JSF či Seamu

  • psaní aplikace je velmi blízké psaní swingových aplikací

  • dostatek komponent + snadné psaní znovupoužitelných komponent

  • při psaní se skutečně využívá objektově orientovaných principů

  • pro běh není třeba žádného speciálního kontextu (běží stejne v Tomcatu jako v AS)

  • daná aplikace je snadno přenositelná na jakýkoli jiný web kontejner


Asi bych mohl pokračovat dalšími body. Nicméně to, co jsem zde vypsal jsou vlastnosti, které mě přesvědčují o správné volbě.

Co se týče záporů, ty si budu muset nechat na pozdější dobu. Zatím jsem jen nezávislým pozorovatelem daného web frameworku. Každopádně jsem pevně rozhodnut toto řešení použít i za cenu složitejší spolupráce s EJB modulem a částí aplikace napsané v Seamu.

Takže mám 2 favority. Seam a Apache Wicket. Každý z nich přistupuje k cíli jiným způsobem a každý z nich se rozhodně hodí pro jiný typ aplikací. Až si Apache Wicket více osahám pokusím se obě řešení více porovnat a přesněji zjistit, pro jaký typ aplikací se dané frameworky hodí.

15 komentářů:

  1. Ja jsem fanda deklarativniho psani nejakym markupem (v posledni dobe jsem narazil napr. na Javeline.com) a zaroven nejsem moc fanda stavovych frameworku... Proto mi Wicket dost nesedel. Sablony jsou sice hezky ciste male HTML soubory, ale toho Java kodu potom... Pripadlo mi to vsechno strasne neohrabane a u slozitejsich UI s komplexnim chovanim (napr. online AJAXovy klon filesystem pruzkumnika) znacne neprehledne.

    Neni to poprve, co se o tom nekde zminuji, ale ja nedam dopustit na Stripes :) Zadny framework me ani vzdalene nechytil za srdce jako tenhle.

    OdpovědětVymazat
  2. Dneska jsem prave na Wicket koukal a chtel jsem napsat do diskuse na jave jestli ma nekdo s tim prakticke zkusenosti ze to vypada jako zajimavy framework. Taky vyzkousim a taky uvidim :-)

    OdpovědětVymazat
  3. Taky mám rád Wicket, z komponentových frameworků se mi líbí zdaleka nejvíc (JSF je pruda po všech stránkách a Tapestry mi přijdou velice rigidní, oproti pragmatickému Wicketu).

    V requestově orientovaných frameworcích zatím nemám úplně jasno, Strutsy nepřipadají v úvahu ani náhodou, Spring Web MVC znám velmi dobře a od verze 2.5 vypadá docela modernizovaně, ale výše zmiňované Stripes taky nevypadají špatně.

    OdpovědětVymazat
  4. Robil som vo Wickete jeden miniprojekt a ma to celkom zaujimavu filozofiu. Uz pol roka sa snazim napisat maly serial, ale nejak na to nie je cas.

    Je pravda, ze Wicket ma trochu zlozitejsiu learning curve, ale mne sa to napriek tomu dost pacilo.

    Ten Java kod - ano, casto sa stava, ze vnorena trieda je vo vnorenej triede, vo vnorenej triede - ale dobrym oddelovanim komponentov do samostatnych tried sa tomu da predist.

    OdpovědětVymazat
  5. Ve Wicketu se daji psat aplikace velice snadno, tim snaze, cim vic ma clovek zkusenost se Swingem. Mne na nem vyhovovala jednoduchost markupu a prave implementace jen v Jave, nehlede na snadne debugovani.
    Vsechny jeho standartni komponenty se daji snadno rozsirit (prevazne anonymnimi tridami), poskytuje prostor pro jednoduche lokalizace, bezpecnost (integrace treba s Acegi), spousta AJAX komponent...
    Byl jsem spokojeny.

    OdpovědětVymazat
  6. Ten začátek článku úplně sedí - je toho až moc :). Zkoušel jsem toho celkem dost - WingS, Echo2, JSP, malinkato JSF, koukám teď také na wicket.

    Když mám udělat něco sám, tak není problém se naučit cokoliv nového, vyzkoušet si to. Problém ovšem je pak, když na projektu dělá více interních nebo externích lidí, když se vytváří produkt, který se bude muset pár let udržovat. A zde mi přijde, že jednoznačně vede JSF. Proč? Je to standard, je o dost větší pravděpodobnost sehnat člověka na JSF než na wicket a takto bych mohl pokračovat. Já nejsem fanda JSF, ale toto je prostě fakt :(.
    Takže teď zrovna (bohužel) zase dělám v JSF...

    OdpovědětVymazat
  7. to Robert Novotny: Co se tyce pochopeni funkcnosti a samotne uceni, tak me zatim prislo, ze to neni tak hrozne. Navic kdyz clovek trochu zna Swing, usnadni mu to praci.

    Jinak, serial by se hodil. Informaci o Wicketu tolik neni. Dost mi zde schazi referencni prirucka, jako ma napr. Seam. Zde jsou informace tak rozstristene, ze hledani reseni je docela opruz :(

    OdpovědětVymazat
  8. Existuji kniha Pro Wicket od APressu, z te se da dost pochopit. Jinak kazdym dnem vyjde Wicket in Action od Manningu.

    OdpovědětVymazat
  9. Ano, je to mozne, ze ked clovek robi so Swingom, tak uz ovlada modely, co je dost zakladna cast. Osobne som mal dlho problem s takymi vecami, ako kedy ktory model pouzit, aby to nielen fungovalo, ale bolo to aj "efektivne" (LoadableDetachableModely a podobne).

    Referencnou priruckou by mal byt myticky Wicket in Action, ktory hadam uz bude tento rok vydany. Problem s nim bol ten, ze Eelco Hillenius ju musel asi dvakrat prepisovat - kedze cela verzia 2.0 bola zahodena, potom sa debatilo o podpore Javy 1.5, potom prisla 1.3ka... Ale hadam sa dockame.

    Chvalabohu je aspon mailing list vyborny.

    OdpovědětVymazat
  10. Napsali jsme v tom stredne velky projekt, na jehoz zacatku jsme se take rozhodovali, ktery FW zvolit. Myslim, ze ted rozhodne nelitujeme, ze jsme vybrali Wicket, z duvodu uvedenych v clanku. Ve spojeni s hibernate velmi pouzitelne. Doporucuju.

    OdpovědětVymazat
  11. To by me docela zajimalo. Zda je Wicket vhodny pro vetsi aplikace. Tedy zadne jednorazove akce. Pocitam, ze dalsich X let budu delat na tom samem :)

    OdpovědětVymazat
  12. Mam pocit, ze sa treba skor pytat konkretnejsie. Odpoved na otazku, ci je Wicket vhodny pre vacsie aplikacie je rovnaka ako odpoved na otazku, ci je vhodny - ja neviem - Spring MVC alebo JSF.

    Vyhoda Wicketu je skutocne v pripade, ze sa pouzivaju komplexne pouzivatelske rozhrania.

    Viem, ze vacsina protestov smerovala proti stavovosti a proti tomu, ze stav komponentov sa udrziaval v HTTP session. Vysvetlenie bola taka, ze v pripade komplexnych pouzivatelskych rozhrani si uzivatelia zavadzali vlastne sposoby udrziavania stavu v HTTP session, ktore nemuseli byt efektivne.

    Okrem toho od verzie 1.3 su uz k dispozicii alternativne uloziska pre ukladanie stavu - popri HTTP sessne napr. v externom subore na serverovskej strane (aby sa usetrila pamat)

    OdpovědětVymazat
  13. Vynikající jsou Stripes. Dají se naučit velice rychle (vyzkoušeno na více lidech) a je to opravdu od počátku navržené a vedené s hlavním cílem, aby se to příjemně a efektivně používalo, a také samozřejmě testovalo a integrovalo de facto s čímkoli. Navíc si autoři dali práci s přehlednou dokumentací a dobrými examples a opravdu se drželi principu KISS. Struts2 je pravý opak, moc nedoporučuji... Spring MVC je mj. "malinko" složitější na naučení pro běžného vývojáře - pravda, dobrá znalost základního Springu a nějakého jiného MVC frameworku pomůže. JSF je sice "standard", ale má několik lišících se implementací (není JSF jako JSF) a spoustu chytáků a raději během pár dní naučím (de facto jakéhokoli) Java web developera na Stripes, než hledat *dobrého* JSFkaře s podle mě trochu nejistým výsledkem. Wicket je pro spoustu lidí hůře pochopitelný a i ti bystří se ho učí rozhodně nezanedbatelně dlouho. Takže aby se vyplatil Wicket, musí být potenciál pro velký reuse komponent - je to komponentový framework, na rozdíl od velké trojky Struts2+Spring MVC+Stripes - a musím mít v plánu napsat buď větší nebo složitější aplikaci, kde se bude často vyskytovat konstrukce typu UI komponenta vnořená v UI komponentě vnořená v UI komponentě - prostě nějaká hierarchie UI objektů, které by byl opruz řešit v klasickém MVC frameworku. Objektová orientace a tedy i zapouzdření a to, že se objekt stará sám o sebe (za pomoci Wicketu) se podle mě u takových aplikací vyplatí - přestože to vyžaduje počáteční investici.

    OdpovědětVymazat
  14. Právě dokončuji jeden spíše menší projekt ve Wicketu. Naproprosto fantastický byl deployment na Tomcat a vzápětí na Glassfish bez jakýchkoliv problémů s funkcionalitou aplikace. To byl pro mě prostě šokující zážitek.
    Stručný popis: JDK 6.0 + NetBeans 6.1 + Wicket plug-in 1.3.3 + Tomcat 6.0 & Glassfish + PostgreSQL 8.3

    Aplikace dělá v podstatě datamining statistických údajů z tabulek o několika milionech záznamů na základě měnících se vstupních parametrů.

    Je to můj první projekt ve Wicket. Je pravda, že na začátku je třeba se více učit, ale existuje už spousta praktických příkladů a tutoriálů.

    Z čeho jsem čerpal nejvíc:
    http://www.netbeans.org/kb/60/web/quickstart-webapps-wicket.html
    http://wicketstuff.org/wicket13/
    http://www.nabble.com/ - diskusní fóra o Wicket

    OdpovědětVymazat
  15. Ja som sice zatial v Wickete neprogramoval ale co som si ho pozeral vypadal velmi pekne. Jeho filozofia je podobna ako pri ASP.NETe a preto sa mi zda lepsi nez je JSF, ktory nepovazujem za dokonceny produkt a v ktorom vyvijat je niekedy utrpenie.

    OdpovědětVymazat

Když programátor založí a řídí firmu

Jako malý jsem chtěl být popelářem. Ani ne tak proto, že bych měl nějaký zvláštní vztah k odpadkům, ale hrozně se mi líbilo, jak...