středa 14. října 2009

Apache Wicket - verze 1.4

Apache Wicket zdárně dospěl do verze 1.4, která sebou přináší změny zejména na úrovni podpory generických typů. Tato verze je tedy určena pro javu 1.5 či vyšší.

Po zdravé úvaze jsem se rozhodl přejít na tuto verzi a provést úpravy na stávajícím projektu, který byl psán pro verzi 1.3.x.

Hlavní rozdíly oproti starší verzi

Jak jsem již zmínil, hlavní změnou je podpora generických typů. Bohužel došlo i na změnu v API. Metoda "getModel()" či "getModelObject()" byla nahrazena "getDefaultModel...". Směle jsem se tedy pustil do přeměny pomocí hromadného přepisu (cca 50 výskytů). Naštěstí byla tato změna dostatečná a aplikace je plně kompatibilní s verzí 1.4.

Využitelnost generik

Na jedné straně jsem jásal, že je konečne wicket více typově kontrolovatelný a nemusí docházet k ruzným přetypováním. Na druhou stranu je ovšem dobré poznamenat, že jsou pasáže (viz např. DropDownChoice), které jsou dost neštastně navrženy pro využití generických typů. Problém spočívá zejména v tom, že musím napsat tunu kódu navíc, která nepřináší až tak závratné změny.

Po zhruba měsíční migraci jsem omezil použití generických typů jen na místa, kde to skutečně má smysl (viz např. IModel).

Komponenty třetích stran

To, že je ve Wicketu tvorba znovupoužitelných komponent, hračka, je nepopíratelný fakt. Komponenty třetích stran se tedy spíše soustředí na složitejší věci. Bohužel, v současné době jsem nabyl dojmu, že je vývoj dost chaoticky či vůbec neřízen. Použít některou přídavnou vlastnost z WicketStuff je sázka do loterie. Pokud bych toto porovnal s JSF, je na tom Wicket naprosto žalostně.

Osobně využívám následující přídavné vlastnosti:

  • wicket contrib javaee 1.1 - podpora pro injectování EJB komponent

  • swarm 1.4, wasp 1.4 - pro podporu security management

  • grid - jedná se o "rich" tabulky; kdysi byl projekt vystaven na inmethod.com, poté byl zrušen; pohužel jsem musel udělat vlastní úpravy, aby daná komponenta byla vůbec funkční


Zbylé "projekty" jsem po zběžném otestování raději zahodil. Mrzí mě, že například podpora pro jQuery je dost nestabilní a její použití je dost invazivní (viz. nutnost použít pro Application daného předka, což znemožňuje využít zase například Swarm).

Pokud má někdo zkušenosti z dalšími přídavnými vlastnostmi pro Wicket, nechť se o ně podělí v diskuzi.

I přes zmíněné zápory, které jsem zde popsal, je pro mne Wicket tou nejlepší volbou pro tvorbu web aplikací. Je prostě radost s ním pracovat! :)

6 komentářů:

  1. Já trochu nadával generiky u tabulek:

    - IColumn je parametrizovaný typ, takže definice sloupců v tabulce je trochu rozvláčná
    - konstruktor DataTable bere IColumn[], ale nejde psát new IColumn[] -- to jsem vyřešil triviální pomocnou metodou public static T[] array(T... elements) { return elements; }
    - signatury metod ICellPopulator#populateItem jsou obrovské, ale aspoň je za člověka napíše IDE

    Jinak generiky maximálně vítám, Wicket je teď ještě o něco lepší než kdy dřív :-)

    OdpovědětSmazat
  2. Ale ten vyvoj byl opravdu dlouhy ... pres slepou vetev 2.0 az k soucasne verzi 1.4.x se generika zmenila od toho, ze byly vsude, az k docela rozumnemu pouziti ... a clovek si nakonec zvykne a je rad ze tam jsou:-) Wicket je opravdu bomba framework.

    OdpovědětSmazat
  3. Wicket je nejlepší, vo tom žádná.. :)

    Jinak co se týče dalších projektů, určitě bych doporučil kouknout na Brix (http://code.google.com/p/brix-cms/), ten je hodně povedenej.
    Dále např.
    http://code.google.com/p/wicket-tree/
    http://code.google.com/p/wicket-dnd/

    Integrace JQuery do Wicketu je v současné době podle mě nejlepší:
    http://code.google.com/p/wiquery/

    Pro toho kde se nechce drbat s grafikou by mohl být užitečný:
    http://swit.kornr.net/

    OdpovědětSmazat
  4. zajimalo by me, jak jsi zprovoznil security. zkousel jsem to podle navodu s hive, wasp a swarm-1.4-SNAPSHOT.jar (10 Oct 2009), ale PolicyFileHiveFactory factory = new SwarmPolicyFileHiveFactory(getActionFactory()); nefunguje...

    OdpovědětSmazat
  5. to meo: Ahoj, tak to netusim kde je problem, ja to pouzivam presne tak.

    SwarmPolicyFileHiveFactory factory = new SwarmPolicyFileHiveFactory(getActionFactory());

    pote:

    factory.addPolicyFile(getServletContext().getResource("/WEB-INF/cesta k hive souboru"));

    a nakonec registraci factory

    HiveMind.registerHive(getHiveKey(), factory);

    Jedine, co me napada, ze k by na classpath melo byt nasledujici:
    swarm, wasp, hive, wicomsec

    OdpovědětSmazat
  6. moc dekuju, bylo to tim ze mi chybel wicomsec :))
    jinak hodlam pouzivat wicket + guice + warp + hibernate, na prvni pohled to vypada opravdu uzasne a integrace je jeste snazsi nez s EJB3, natoz se springem. neni tam totiz zadny xml, ikdyz by taky slo pridat... :)

    OdpovědětSmazat

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...