úterý 3. října 2006

Anotační peklo?

Nevím jestli již aktivně používáte nebo jste alespoň viděli JSR 175 - Metadata Facility for Java alias Anotace v akci. Já jsem zatím používal pouze klasické SE anotace pro přidání metadat kompilátoru jako @override. Místo kde byly s anotacemi velké plány a kde se od něj hodně slibuje je enterprise oblast. Pokud jste neviděli nějaký příklad EJB 3.0, tak tam se metadata používají pro anotování session i entity bean.

Při studiu frameworku Seam, který je na anotacích postavený jsem ovšem dostal pocit, že XML peklo bude možná nahrazeno anotačním peklem. Seam umožňuje spojení technologie EJB 3.0 a JSF. Mezi jednu z výhod Seamu patří přímé napojení JSF komponent na session beany (action listenery) a entity beany (model) bez nutnosti psaní controleru. Funkce controlleru není nahrazena žádnou automagií, ale anotacemi.

Pokud tedy použijete Seam, ve vašem kódu se to krom EJB anotací začne míhat pěknou řádkou Seam anotací, například pro definici komponent, nastavení/čtení atributů komponent, validaci, transakce atd. Takový jednoduchý kód pak může vypadat následovně (zkopírováno ze Seam dokumentace ).

    
@Stateful
@Scope(SESSION)
@Name("messageManager")
public class MessageManagerBean implements Serializable, MessageManager
{

   @DataModel                                   (1)
   private List<Message> messageList;
   
   @DataModelSelection                          (2)
   @Out(required=false)                         (3)
   private Message message;
   
   @PersistenceContext(type=EXTENDED)           (4)
   private EntityManager em;
   
   @Factory("messageList")                      (5)
   public void findMessages()
   {
      messageList = em.createQuery("from Message msg order by msg.datetime desc").getResultList();
   }
   
   public void select()                         (6)
   {
      message.setRead(true);
   }
   
   public void delete()                         (7)
   {
      messageList.remove(message);
      em.remove(message);
      message=null;
   }
   
   @Remove @Destory                              (8)
   public void destroy() {}

}    
    
    
  1. The @DataModel annotation exposes an attibute of type java.util.List to the JSF page as an instance of javax.faces.model.DataModel. This allows us to use the list in a JSF <h:dataTable> with clickable links for each row. In this case, the DataModel is made available in a session context variable named messageList.
  2. The @DataModelSelection annotation tells Seam to inject the List element that corresponded to the clicked link.
  3. The @Out annotation then exposes the selected value directly to the page. So ever time a row of the clickable list is selected, the Message is injected to the attribute of the stateful bean, and the subsequently outjected to the event context variable named message.
  4. This stateful bean has an EJB3 extended persistence context. The messages retrieved in the query remain in the managed state as long as the bean exists, so any subsequent method calls to the stateful bean can update them without needing to make any explicit call to the EntityManager.
  5. The first time we navigate to the JSP page, there will be no value in the messageList context variable. The @Factory annotation tells Seam to create an instance of MessageManagerBean and invoke the findMessages() method to initialize the value. We call findMessages() a factory method for messages.
  6. The select() action listener method marks the selected Message as read, and updates it in the database.
  7. The delete() action listener method removes the selected Message from the database.
  8. All stateful session bean Seam components must have a method marked @Remove @Destroy to ensure that Seam will remove the stateful bean when the Seam context ends, and clean up any server-side state.

Jenom dodávám, že tohle je opravdu jednoduchý příklad použití. Celkově Seam definuje něco přes třicet anotací! K tomu si připočítejte EJB anotace a to především anotace pro JPA (Java Persistence API) a pravděpodobně se dostaneme někam k stovce runtime metadat. To už je celkem pekelná síla. Co s tím?

  • potřebujeme vylepšit naše vývojové nástroje o rozumnou vizualizaci metadat a podporu vývojových činností jako je refaktorování.
  • vývojáři budou potřebovat návrhové vzory pro použití anotací

Musím říci, že například v případu Spring frameworku dávám přednost starému klasickému XML před anotacemi a to především ze dvou důvodů.

  • centralizace - související metadata mám na jedno místě například definici DAO či WEB vrstvy, to činí práci (hládní, změny) jednoduší.
  • nazávislost - změna metadat nemusí nutně znamenat zásah do kódu aplikace. Mohu mít například pro testování DAO vrstvy v izolaci vlastní nastavení transakcí jenom na úrovni metadat.

Využití anotací je široké, tak hlavně aby z toho nebylo další peklo...

pondělí 2. října 2006

Škola je kráva bere ti práva

Původně jsem chtěl navázat na poslední JUG a prezentaci Craiga R. McClanahana na téma The state of web frameworks, ale o tom někdy příště. Dneska budu opět v netechnickém tónu mentorovat cosi, co mi leží v žaludku už delší dobu - naše školství. Pokud místy volím ostřejší slova, tak vězte, že to tak opravdu myslím.

Školství respektive škola základ života řekl by si jeden a podle toho očekával, že škola ten život bude alespoň lehoulince respektovat. Máme šestnáct let po revoluci, ale řekl bych, že naše školství hnije někdo hluboko v socialismu. Pravda, dnešní prvňáčci již dnes nekreslí Auroru, jak jsem činil léta páně roku 1986 já, ale "výukové" metody zůstávají pořád stejné.

Bohužel produkty - absolventi, které naše školství produkuje tomu absolutně odpovídají. Nedá velkou intelektuální námahu zjistit, že pokud naši studenti něco opravdu potřebují, tak jsou to dvě klíčové vlastnosti: jazyková vybavenost angličtinou a schopnost hledat a využívat informace. Místo toho se ovšem v našich školách klade důraz především na memorování.

V podstatě tedy není důležité, jestli si informace dokážete najít, porozumět jim a používat je, ale důležité je jestli si je zapamatujete v krátkodobém horizontu. Když to přeženu, tak naše škola v podstatě slouží jako dobrý trénink paměti. Což je vám v praxi platné asi jako fotbalistovi brusle.

Bohužel ty samá martyria, které jsem podstupoval já musí podstoupit i moji následovníci. Co by se muselo změnit, aby ten systém (školství) začal fungovat ekvivalentu doby? Výjimky potvrzující pravidlo nechť prominou, místo socialistických pohrobků, by museli všude nastoupit kantoři, kteří chápou potřeby doby. A pořádně placeni by mohli býti z daní, které každý z nás platí, a které se rozplynou kdesi v chapadlech prapodivné chobotnice sociálních dávek.

Na závěr vzdávám hold těm kdo vzdor systému a prach bídnému ohodnocení berou výuku jako poslání.

Wanastowi Vjecy - Škola je kráva

Škola je kráva:

Škola je tu a všechno podělá, hlavu ti zavře, mozek rozdělá
Škola je kráva, je už taková, do fronty kripla z tebe vychová

Tady jsem - tak tady mě máš
Škola je kráva, bere mi moje práva - kouř jí dám
Tady jsem - revolucionář
Škola je kráva, bledne jí moc a sláva - dodejchává

Doktorka profesorka Mrázová novej typ idiota vyková
Ze školy chtěl bys zdrhnout - běží pás
Do mlejnku lidi padaj zas a zas
Ze školy ozývá se zvonění, v žaludku vycukaný sevření
Bereš to za roh - prostě chceš bejt sám
Ty ranní křeče taky dobře znám

Tady jsem - tak tady mě máš
Škola je kráva, bere mi moje práva - kouř jí dám
Tady jsem - revolucionář
Škola je kráva, bledne jí moc a sláva - dodejchává
Tady jsem - tak tady mě máš
Škola je kráva, bere mi moje práva - kouř jí dám
Tady jsem - revolucionář
Škola je kráva, bledne jí moc a sláva - dodejchávááááá

Generics na setkání CZJUG

Musím říci, že se nám zatím daří na setkání CZJUGu dostat samá zajímavá témata. Pokud byste rádi opravdu technické téma, tak mohu doporučit připravovanou přednášku o generických typech Tomáše Záluského. Na tuhle přednášku se vyplatí jít z několika důvodů

  • Pokud si myslíte, že víte něco o generických typech, tak se přesvědčíte o opaku.
  • Praktické příklady nebude ilustrovat provařený typový seznam (generický list), ale můžeme se těšit na například na spojení s návrhovými vzory.
  • Bude se mluvit o převodu stávajícího kódu a o dalších praktických zkušenostech s přechodem a používáním generických typů.

Samozřejmě těch témat je více, jak si můžete přečíst ve výše odkazovaném dokumentu. Protože by všechna témata kolem generik zabrala minimálně celý den a pořád by bylo o čem povídat, Tomáš se rozhodl nechat výběr na posluchačích. Takže pokud máte zájem napište přímo autorovi na zalusky zavinac centrum tecka cz, případně mu nechte vzkaz pod tímto článkem.