Category Archives: Uncategorized

WebBeans

Včera jsem si četl dokumentaci k WebBeans. A ač opravdu nemám rád EJB a i k anotacím se stavím dost rezervovaně, docela mě to zaujalo. Je tam pár zajímavých nápadů, které mi docela rozšířily obzory.

Ale abych začal od začátku. WebBeans jsou projekt, který se s největší pravděpodobností dostane do Java EE 6 jako JSR-299. Ideově to celé vychází ze Seamu, ostatně dané JSR vede Gavin King.

Nebudu se zabývat úvodem, radši se podívejte do originální dokumentace nebo sem (česky). Radši napíšu jen co mě zaujalo. No nejvíc asi to, že se díky WebBeans mohou stát EJB i JSF snadněji použitelnějšími. Stejně jako Seam propojují obě technologie, což se může docela hodit. Navíc podporují injektování i normálních POJO, což je taky velký skok vpřed. Nicméně to vypadá, že se EJB nezbavíme, budeme je muset použít pro deklarativní transakce a podobně. Ale proč ne, ve verzi 3.1 vypadají docela snesitelně.

Vlastní anotace
Z technického hlediska mě zaujala míra použití anotací. Z dokumentace to vypadá, že se každý problém dá vyřešit napsáním si vlastní anotace. Doposud jsem anotace spíš jen pasivně používal než je vytvářel. Ale ve WebBeans bude tvorba vlastních anotací na denním pořádku. Uvedu příklad. Představte si, že z nějakého zvrhlého důvodu potřebujete injektovat do bean náhodné číslo. První co potřebujete udělat, je nějaká továrna. Ve WebBeans vyrobíte normální POJO a k metodě přidáte @Produces. Tím frameworku řeknete, že to je továrna na inty. No ale int není zrovna moc konkrétní typ a je velká pravděpodobnost, že se vám v aplikaci objeví továren na inty víc, takže je musíte nějak rozlišit. Tak si napíšete vlastní anotaci @Random.

@ApplicationScoped
public class Generator {

    private Random random = new Random( System.currentTimeMillis() );
    
    @Produces @Random int next() {
        return random.nextInt(100);
    }

}

Když pak chcete injektnout náhodné číslo někam jinam, tak jen použijete tu samou anotaci.

@Random int randomNumber

Není to nic světoborného, Spring to umí taky, ale tady je to primární způsob konfigurace. Navíc můžete nad deklaraci beany hodit anotaci, že je jen pro testovací prostředí, nebo pro zákazníka z Kanady a framework se vám postará o to, aby se použily pro dané prostředí vhodné implementace.

InjectionPoint
Další zajímavá věc je InjectionPoint. Představte si následující kód.

@Current Logger log;

Tím říkám, že chci injektnout logger. Obvykle ale potřebujeme mít v každé třídě Logger s jinou kategorií (jménem). Ve WebBeans uděláte toto.

class LogFactory {

   @Produces Logger createLogger(InjectionPoint injectionPoint) { 
      return Logger.getLogger(injectionPoint.getMember().getDeclaringClass().getName()); 
   }

}

InjectionPoint vám poskytne informace o tom, kam se vytvářená instance injektuje. Musím se přiznat, že jsem se pár hodin pokoušel udělat to samé ve Springu. Nakonec se mi za cenu neuvěřitelných prasáren podařilo, ale hezké to vůbec nebylo.

Dekorátor
Zajímavým nápadem jsou dekorátory. Je to něco jako interceptor, akorát typově kontrolovaný. Nejlépe to zas uvidíte na příkladu. V něm mám rozhraní Account, nějakou jako implementaci nebo dokonce implementace a já chci přidat logování operací větších než nějaká částka. Slušní lidé by si napsali normální wrapper. Pokud jste ale líní, tak můžete použít dekorátor a WebBeans se za vás postarají o ty nudné činnosti.

@Decorator
public abstract class LargeTransactionDecorator 
        implements Account {
    
    @Decorates Account account;
    
    @PersistenceContext EntityManager em;
    
    public void withdraw(BigDecimal amount) {
        account.withdraw(amount);
        if ( amount.compareTo(LARGE_AMOUNT)>0 ) {
            em.persist( new LoggedWithdrawl(amount) );
        }
    }
    
    public void deposit(BigDecimal amount);
        account.deposit(amount);
        if ( amount.compareTo(LARGE_AMOUNT)>0 ) {
            em.persist( new LoggedDeposit(amount) );
        }
    }
    
}

Všimněte si prosím dvou věcí. První je, že je třída abstraktní, takže nemusím implementovat ty metody, které mě nezajímají. Druhá věc je injektnutí obalované instance pomocí anotace @Decorates. Pozor, dekorátor se nedá použít jako náhrada za AOP, jak jsem původně myslel. K tomu aby se to dalo použít, potřebujete rozhraní, které budete implementovat, takže třeba na transakce je to nepoužitelné. Ale nápad je to zajímavý.

Abych to shrnul. Pořád si myslím, že pro složitější konfiguraci je XML lepší. Mám pro to i jeden argument. V XML mohu mít víc instancí stejné třídy s různou konfigurací. To se může často hodit. U anotací platí vztah jedna třída jedna konfigurace. Nicméně to vypadá, že jsem se svým názorem v menšině, takže se s anotacemi musím asi smířit. Rozhodně se vyplatí si alespoň přečíst tu dokumentaci, něco se třeba naučíte. Čte se docela dobře a je i rozumně krátká. Z mého pohledu jsou WebBeans framework, který by teoreticky, za velmi nepravděpodobných podmínek, při vhodné konstelaci planet, až se mi to skoro nechce ani napsat, mohl na čas nabídnou funkce, které vám Spring nenabídne. Tím se oproti ostatním módním frameworkům docela liší.

Update (10.10.2009): Ještě link na zajímavý článek

Hledám práci

(Pozor, tento zápisek není o Javě, ale o mě, takže ho radši nečtěte)

Tak už vám tady na blogu svými nedostižnými články několik let pomáhám. Teď určitě pomůžete vy mě. V prosinci mi skončil kontrakt v Irsku a teď nemám co dělat. Původně jsem chtěl dělat něco do školy (dal jsem se na dálkové doktorandské studium), ale po dvou dnech jsem přišel na to, že mě to vůbec nebaví. Myslím, že na konci ledna mi to už poleze krkem úplně.

Takže jsem si řekl, že je na čase si začít hledat práci. Ale nějak ani moc nevím co bych chtěl dělat, mám dokonce pár protichůdných požadavků. Docela mi vyhovuje práce na volné noze. Pár měsíců pracovat, pak pár týdnů volna a pak znova. Programováním se živím protože mě to baví. Rozhodně se mi nechce sedět někde v bance a prát se s proprietárním frameworkem jenom proto, že mému zaměstnavateli dobře platí. Chtěl bych dělat něco zajímavého. Docela mě baví řešit zajímavé problémy a myslím si, že je umím i docela řešit. Taky bych si chtěl konečně vyzkoušet práci v týmu, který se alespoň pokouší o něco jako je agilní vývoj. To se mi zatím nepodařilo.

A co můžu nabídnout? Jsem hodně dobrý Java programátor, moje nejsilnější stránkou je práce na backendu, Spring umím skrz na skrz, docela se vyznám v ORM a programování nad databází obecně. Jsem fanda do unit testů a automatických testů obecně. Párkrát se mi podařil i vývoj řízený testy. Myslím si, že mám docela přehled o Javovských technologiích. Jsem taky docela silný v objektově orientovaném programování, nebál bych se ani složitější architektury. Strávil jsem i pár měsíců prací na build systému postaveným nad Mavenem, takže i do něj vidím docela obstojně. Pokud si někdo potrpí na papíry, tak mám průkaz mladého řidiče (takový ten s Hurvínkem), asi 25 vysvědčení, jsem inženýrem přírodních věd a mám i SCJP, SCWCD, SCBCD a CAE.

Pokud jde o ty měkčí dovednosti, myslím že bych dokázal i vést pár programátorů, dovedu mluvit i bez většího koktání a to dokonce i anglicky. Vím toho dost i o výrobě programů z širšího pohledu. Tuším co a jak dokumentovat, na co si dát pozor a tak. Dokonce jsem se už skoro naučil dělat to, co je užitečné pro zákazníka, a ne to, co by bylo zajímavé technicky. Ale znáte to, vždycky už si myslím, že vím jak ten software dělat, ale pak mě najednou zas něco překvapí. Taky jsem zrealizoval pár školení a všichni mi tvrdili jak se jim to líbilo.

Samozřejmě mám i slabiny. Z technického hlediska to bude asi frontend. JavaScriptu se pokud možno vyhýbám, ale umím hodně dobře Spring MVC, Spring Web Flow, samozřejmě standardní JSP a dokonce i Struts (nechť je jim země lehká). Ale to je asi tak všechno, JSF, Stripes, Wicket a spol bych se musel naučit. Ale neměl bych s tím problém. Co se týče měkkých nedostatků tak to bude možná prostořekost. Když někoho vidím dělat hloupost, tak mu to obvykle řeknu. Takže pokud potřebujete pomoci s psaním vlastního frameworku, tak vám maximálně řeknu, ať se na to vykašlete. Nebo přinejmenším pořádně zamyslíte.

Pokud tedy víte o někom kdo má zajímavý projekt a potřebuje si najmout špičkového, zkušeného, vzdělaného, zábavného, seniorního, šaramantního a i jinak bezchybného programátora, tak mu prosím pošlete odkaz na můj životopis. Nebo kdybyste měli zájem o školení Springu, neváhejte se na mě obrátit, něco vymyslíme.

Zážitky z Devoxxu

Včera jsem se vrátil z Devoxxu a potřebuji si urovnat myšlenky. Takže následující text je vysoce subjektivní. Pohybuji se hlavně EE prostředí a i tam se zajímám hlavně o backend, podle toho jsem si vybíral přednášky. Takže se tu nedozvíte nic o Grailsech, GWT a ani o JavaFX, které Sun hodně prosazuje. Protože jsem neuvěřitelně líný, popíšu jen pět nejlepších přednášek, na kterých jsem byl.

Be Smart
Ivar Jacobson

Bezkonkurenčně nejlepší bylo povídání Ivara Jacobsona s názvem Be Smart. Ano Toho Ivara Jacobsona, spoluautora UML, RUPu a kdoví čeho ještě. Povídal o tom jak by se měl dělat software a byl naprosto neuvěřitelný. Takže až se přednášky objeví na Parleys, tuhle si rozhodně nenechte ujít Nejen to, pusťte jí svým kolegům, manažerům, zákazníkům, přítelkyni i babičce. Je to něco co prostě musí vidět každý. Je to zábavné a neuvěřitelně zajímavé.

Building Web Applications With The SpringSource DM Server
Sam Brannen

Tato přednáška nebyla ani tak zajímavá tím kdo ji přednášel, ale svým obsahem. Spring DM Server spojuje sílu OSGi a Springu do jednoho pěkného balíku. Když člověk sleduje OSGi tak si říká, že by to mohlo být užitečné, když sleduje DM Server tak to vidí v akci. Uvidíte jak můžete instalovat aplikaci po částech, za běhu prohazovat části, upgradovat na novější verzi bez nutnosti restartu. Když jsem seděl v tom sále, tak jsem si říkal, že takhle by měl vývoj a spouštění aplikací vypadat. Jediné co zážitek kalí je licenční politika. Tvrdili, že se to dá stáhnout pod GPL licencí, ale to se mi zatím nepodařilo. Pravda je, že jsem po tom příliš nepátral.

Java SE 7 update
Mark Reinhold

O novinkách v Javě 7 už jsem psal minule a asi se k tomu ještě dostanu. O novém modulárním systému pak byla ještě jedna přednáška a ve čtvrtek i hodina a půl otázek a odpovědí. Trochu to zmírnilo moje nadšení, je tam ještě mnoho otevřených otázek, takže výsledek může být jak úžasný tak i úplně k ničemu. Dobrá zpráva, ale je, že to berou hodně vážně, evidentně nad tím hodně přemýšlí a jsou hodně opatrní. Takže se snad není čeho bát.

From Concurrent to Parallel
Brian Goetz

Povídání o tom, jak se v Javě dají psát paralelní aplikace. Hlavním tématem bylo ParallelArray. Je to docela jednoduchý nástroj jak spouštět paralelní operace. Zajímavé je, že se to dá použít i na spoustu dalších věcí. Částečně se to dá i použít jako in-memory databáze. Něco jako Microsoftí LINQ.

The Scala Experience
Bill Venners, Ted Neward

Pěkný úvod pro lidi, kteří jako já okusili „dynamické“ jazyky jako Groovy a moc se jim nelíbily. Scala vypadá hezky a přednášející byli taky hodně dobří.

Takže abych to shrnul. Devoxx rozhodně stojí za to, úroveň přednášek i přednášejících byla hodně vysoká. Do mého seznamu pěti nejlepších se nedostalo třeba OSGi, performace tuning a podobně, ale i ty byly hodně zajímavé. Dobrá zpráva je, že by se snad v lednu nebo v únoru měly všechny přednášky objevit na Parleys.com, takže si je bude moci pustit i ten, kdo se letos do Antwerp nedostal.