Před pár dny jsme se s kolegy z JetMinds vrátili z příjemného výletu do polského Krakowa, kde se konala javistická konference GeeCON 2011. Z Ostravy jsou to do Krakowa dvě hodinky jízdy autem, takže takovou akci nešlo ignorovat. Vrátili jsme se informačně bohatší a já se pokusím něco málo z toho bohatství převést do psané formy...
Organizačně byla akce více méně povedená. Vytknul bych akorát ne zcela ideální kuchařské výkony (v případě obědů) a také nemožnost si k obědu sednou někde ke stolu, když už to jídlo tedy dávali na normální keramické talíře... posedávání na schodech před kinem nebo jezení ve stoje není ideální. Při příjezdu nám také trochu vadilo, že neexistovala žádná vizuální navigace, která by alespoň lehce řidiče na GeeCON směrovala (TomTom není všemocný). To je ale asi konec výčtu negativ. Pojďme na dojmy z toho, kvůli čemu jsme tam jeli.
University Day
Naše první kroky směřovaly na přednášku Paradoxes of API Design od Jaroslava Tulacha. Věci, nad kterými se zamýšlel, byly zajímavé, ale celkově mi přednáška připadla dost chaotická. Skákání od myšlenky k myšlence, cesta tak trochu odnikud nikam... Zaujalo mě ale dělení uživatelů API do různých skupin, hlavně tedy skupina největší -- "clueless", aneb uživatel API v lazy módu, což ovšem nutně není špatně. Jde o to umět se přepnout do "educated" módu, když je třeba.
Dále jsem se zašel mrknout na tutoriál k Liftu (webový framework pro jazyk Scala). Lift sám o sobě je framework pěkný, hlavně templatovací systém se mi líbil, protože využívá 100% (X)HTML, resp. atribut class a nevymýšlí žádnou šílenou syntaxi. Scala mě ale nijak zvlášť nebere a tak jsem ještě zaskočil na tutoriál k Javě EE 6. EE 6 mě zaujala už před časem. JSF 2(!) mě celkem baví, EJB 3.1 už jsou taky použitelné, stejně jako CDI. Tutoriál neukazoval pro mě nic extra nového, ale minimálně bylo zajímavé poslouchat Antonia Goncalves -- energický speaker. Pokud chcete opravdu pěkný popis toho, co je nové např. v JSF 2, doporučuji tento článek. EJB 3.1 dále éjébéčka zjednodušují a zpřístupňují běžným smrtelníkům -- méně interfaců, jednodušší konfigurace, singleton beans, možnost deployi v obyčejném WARu, lepší timer service atp. CDI (IoC/DI kontejner) mě zaujalo asi nejvíce, ale zmíním se o něm více později. Důležité je také dělení EE 6 na edice Full a Web. Ovšem výběr co kam bude patřit už tak skvělý není -- absence timeru ve Web profilu je bolestná a těžko bude lidi lákat od Springu, kde je periodické souštění jobů samozřejmostí.
Pak jsme zaskočili na přednášku Code Generation on the JVM, kde Hamlet D'Arcy ukazoval různé technologie pro generování kódu v Javě a jazycích postavených na JVM, primárně kvůli zjednodušení kódu. Nejvíce mě zaujal Lombok, který umí např. dogenerovat gettery a settery pro properties dané třídy a další různé praktičnosti. Všechno to ale stojí a padá na tom, že bez podpory v IDE pak ztrácíte doplňování kódu a taky se vám zdrojáky zalijou červenou barvou, protože ty metody tam prostě chybí... Zatím existuje, pokud vím, podpora pro klasický Java kompiler a pro Eclipse. Dokud by něco takového nebylo součástí oficiální Javy, asi bych se do toho moc nehrnul...
No, a to byl konec dne 1. Tedy skoro. Pokračovali jsme večerní procházkou po historickém centru Krakowa, které je opravdu impozantní a večeří+party v jistém klubu na hlavním náměstí. Hned v klubu vedlejším jsme pak mimochodem narazili na moc povedený koncert...
Conference Day 1
Den dva byl de fakto dnem jedna samotné konference. První dvě přednášky byly celoplošné, ve velkém sále. Nejdříve povídání o Javě SE 7 (i 8) a o tom, co (konečně) přinese. Asi nemá smysl, abych to tu vypisoval všechno, když už teď je toho plný internet. Zmíním ale věc, která je podle mě nejdůležitjší -- optimalizace střev JVM cílené na běh programů v jazycích nad JVM napsaných (Groovy, Clojure, Scala...). Oracle si evidentně uvědomuje, že s Javou nepřesekne každou větev a že je třeba podporovat i alternativní jazyky, aby JVM zůstala relevantní technologií i ve vzdálenější budoucnosti.
Dále pak nastoupil Juergen Hoeller (jeden z autorů Springu) s obšírně nazvaným povídáním Enterprise Java in 2011 and Beyond: From Java EE 6 to Cloud Computing. Cítil jsem z toho názvu marketingovou nakládačku z dílny VMWare/SpringSourcu a v zásadě jsem se ani moc nemýlil :) Došlo i na rýpavé poznámky na adresu EE 6, což trošku zvířilo vody na Twitter hashtagu #geecon :) Na Javě EE je toho samozřejmě dost, co lze kritizovat a EE 6 v mnoha věcech skutečně pouze dohání rozjetý vlak (a jinak to ani při "design by committee" být nemůže), ale rozhodně je to zajímavý technologický stack (místy i originální) a ignorovat ho nelze. Pocit, že Spring je silver bullet a nic více netřeba, není k ničemu.
Poté jsem se vypravil na povídání dalšího springaře, tentokrát na téma The Social Service Bus. Doufal jsem, že uvidím nějakou pěknou ukázku integrace se sociálními sítěmi za pomoci Springu (který takové věci umí jak přes Spring Social, tak přes Integration), ale dočkal jsem se spíše převyprávění dokumentace a dokonce i slidu na téma "Co to je Twitter" ...WTF?
Pak jsme zase mrkli na Juergena a jeho Modern Component Design with Spring 3.1, kde ale z velké části probíral věci dostupné už v 3.0. Každopádně bylo fajn slyšet některé věci (rozdělení sémantiky anotací, jejich funkce) vysvětlené od člověka, který framework prakticky stvořil.
Nikita Ivanov pak mluvil o celkem zajímavé gridové technologii GridGain a hlavně ji prakticky předvedl bez jakéhokoliv předpřipraveného příkladu -- což hezky ilustrovalo relativně plochou učící křivku a schopnosti téhle technologie. Jednotlivé nody, které umí běžet všechny v jedé jediné JVM, se spolu velice inteligentně samy baví a hlavně jsou schopné se automaticky ujmout práce, která zůstane po (třeba i násilně) ukončeném nodu.
Jak jsem už zmínil, celkem mě zaujalo CDI (JSR-299, ref. implementace JBoss Weld), o kterém v další přednášce mluvil Antonio Goncalves. Zajímavá věc je to především proto, že je to součást EE 6, která je ale použitelná v jakémkoliv servlet kontejneru (i na Google App Engine), bez nutnosti plnohodnotného aplikačního serveru. Princip je stejný jako u Springu -- ServletContextListener. CDI je v podstatě Inversion of Control (Dependency Injection) kontejner podobný Spring IoC, Guice a podobným. Zajímavá na něm je 100% typesafe injekce -- ani kvalifikátory na beanách nelze mít textové jako ve Springu a tím pádem je vše velmi jednoduše refaktorovatelné. Na druhou stranu je třeba vše při změnách kompilovat a je to také neatraktivní pro milovníky XML, jelikož v něm beany wirovat nelze. Je určeno pouze pro základní konfiguraci alternativ bean stejného typu, nastavení exclude/include patternů atp. To druhé zmiňované je důležité, jelikož Weld je dosti agresivní a jakmile najde POJO, které má někde v sobě @Inject, automaticky ho samotné bere jako beanu a už ho tvoří... pokud tedy chcete mít např. kontrolery vašeho oblíbeného MVC frameworku, jejichž životní cyklus spravuje framework sám, je třeba Weld plácnout přes prsty, ať ty třídy nechá napokoji a pak si je owirovat ručně v rámci životního cyklu v tom webovém frameworku (v podstatě jako s jakýmkoliv jiným IoC udělátkem). Pro uživatele JSF je to jednodušší, jelikož Faces s CDI automaticky počítají a pokud běží oba v jedné aplikaci, není třeba Faces nijak instruovat, aby beany našly (na rozdíl od ELResolveru v případě Springu) -- ověřeno na Google App Enginu s JSF 2. Další velmi lákavou vlastností CDI je vestavěný Event/Observer framework, který umožňuje za použití pár anotací odpalovat události a předávat je observerům -- vše v režii CDI. Už párkrát jsem něco takového hledal pro Spring a nikdy jsem nebyl s výsledky hledání moc spokojen...
Další hodinku jsme strávili poslechem plánů na Javu EE 7, jimž vévodil termín cloud. Není divu... App Engine, Amazon, CloudForge. Silná konkurence. Mluvilo se také o podpoře NoSQL databází, což je ale opět pole, na kterém má už teď Spring obrovskou převahu. Když chcete použít full-stack EE pro vývoj s NoSQL, nic moc růžového vás nečeká.
Conference Day 2
Druhý konferenční den začal celoplošnou přednáškou Jima Webbera na téma SOA v 21. století. Z Jima se velmi rychle vyklubal suverénně nejlepší speaker celé konference. Brit s krásnou angličtinou, ostrým humorem (pokud byli v sále nějací francouzi, asi jim bylo dost horko) a zcela evidentním zápalem a zájmem o věc. Kritizoval mamutí SOA řešení, převážně ztělesněná ESB a nabízel klasický web (HTTP & REST) jako alternativu.
Dál jsme si zašli poslechnout pár pokročilých tipů ze světa Bean Validation, anotacemi se to tam jen hemžilo. Následoval blok přednášek, ze kterých jsem měl dost problém si vybrat, tak jsem seděl na přednášce o Hadoop a HBase a hrál si s Javou EE 6...
Fin Joonas Lehtinen, autor Vaadinu, pak vyprávěl o různých typech útoků na RIA aplikace a ukazoval je na příkladu bankovní aplikace napsané ve Vaadinu. Mezi radami, jak se takovým věcem vyhnout, byla samozejmě v první řadě rada: neobcházejte serverovou validaci.
Autor přednášky o Bean Validation pak představoval projekt Hibernatu na podporu NoSQL databází přes JPA. Osobně jsem z toho nadšen nebyl -- JPA bylo vždy cíleno na databáze relační a tak to taky zůstane. Pro obecnou persistenci je tady JDO (i když má své mouchy) a já nevidím důvod, proč to ohýbat. Vytvářet další JSR standard čistě pro NoSQL databáze by bylo taky dosti těžké, protože typů je mnoho.
Moc jsem se těšil na lákavě nazvanou přednášku 3 Case Studies in NoSQL and Java in the Real World, ale byl jsem zklamán. Šlo napůl o maketing a napůl o změť slidů s obřími "enterprise" diagramy. Nejzábavnější na téhle přednášce bylo sedět v řadě za Jimem Webberem a sledovat, co mu na tváři jednotlivé slidy kouzlí za úsměvy...
Druhý den už pak nešlo zakončit lépe, než přednáškou Jima Webbera o grafové NoSQL databázi Neo4j. Nejen, že Jim opět předvedl svůj přednášecí um, ale grafově orientovaná databáze je nesmírně zajímavá věc. V první řadě proto, že je podle mého nejblíže tomu, jak je skutečný svět kolem nás poskládán a "zadrátován". Určitě to není věc vhodná pro každou aplikaci (např. čistě dokumentově orientované záležitosti), ale mnoha týmům by vytrhla trn z paty. Rychlost je také vysoká, ovšem škálovatelnost ještě ideální není (myšleno škálovatelnost do opravdu mamutích rozměrů typu Facebook). Každopádně jde o open source záležitost a lze ji použít jak v módu serverovém, tak jako embedded záležitost. Pro vývoj webových aplikací je škoda, že interface Node není kamarád s EL (JSP, JSF...), resp. že traverzování po propertách a vztazích s ostatními nody je v EL nemožné. Napsat si na to vlastní wrapper ale nebylo těžké.
Tím konference oficiálně skončila. V sobotu jsme se už museli během dopoledne odebrat zpět domů, takže Community Day jsme se neúčastnili. Každopádně ale stála celá akce za to a pevně věřím, že příští rok bude zas o něco lepší.