Nečekejte od open-source vše
Spolu s Honzou Dvořákem z Mathanu musím uznat, že stěžovat si na absenci vhodného free software je v některých případech přeci jen trochu podivné 
(I když samozřejmě je možné, že něco se přece jen najde)
Dalších par ukázek z Javy 5
Co třeba takovýto (svou jednoduchostí už na úrovni skriptovacích jazyků) kód vypisující řádky textového souboru:
TextFile textfile = new TextFile(new File(f), "UTF-8");
int lineNumber = 0;
for(String line : textfile) {
System.out.printf("%6d: %s%n", ++lineNumber, line)
}
Tento příklad a povídání o dalších vybraných novinkách “Tygří” javy najdete v článku Davida Flanagan na OnJava.com nazvaném Five Favorite Features from 5.0
.
Open-source ESB Mule v ostré verzi
Před časem jsem na Jabloku zmínil existenci projektu Mule, který se snaží být open-source implementací "podnikové sběrnice služeb".
Nyní je k dispozici první ostrá verze, s od pohledu obstojnou dokumentací a výbornými reakcemi v komentářích na TheServerSide.
Pokud se chystáte pustit do nějaké méně triviální integrace, a jste ochotni pustit do hry v roli natolik zásadní systémové komponenty poměrně nový open-source produkt, pak Mule stojí rozhodně za zvážení.
Sjednocení JSTL a Java Server Faces na obzoru
Na světě jsou ve stadiu "public review draft" návrhy specifikací JSF 1.2 a JSP 2.1.
V nových verzích najdeme především zobecněný expression language, který řeší trapný rozpor mezi JSTL EL a JSF EL, další novinky na shrnutí na TSS.
Mimochodem, ve verzi JSP 2.1 se konečně objevuje standardní způsob, jak zamezit generování spoust whitespaces, aniž bychom se museli obracet ke XML zápisu (direktiva trimWhiteSpaces).
Len taký povzdych nad vlastnou blbosťou
Tak som včera po troch hodinách nadávania, dekompilovania tried z oraclovského AQ API, googlovania atď. prišiel na to, že použiť z lenivosti ako JMS message vnorenú triedu (hoci Serializable) nie je práve najvhodnejšie…
J2EE 5.0 first draft
Pokud si zakládáte na tom, že držíte prst na tepu doby, jistě by Vám nemělo uniknout, že expert group JSR 244 vydala Early Draft J2EE 5.0 specifikace .
Via TSS.
JBoss + Xdoclet + Unknown primary key + CMR relation = ?
Za otazníkem v nadpisu se skrývá nejspíše něco jako “spousta zábavy”. Věc se má následovně:
EJB specifikace nám umožňuje ponechat na kontejneru vytváření primárních klíčů, a říká tomu “Unknown primary key” (bod 10.8.3). Co když se rozhodneme něco takového zkusit v praxi (s aplikačním serverem JBoss 4.0.1)?
Nejprve se popereme s implementací “neznámého” primárního klíče.
Člověk by řekl, že postačí v souladu se specifikací definovat návratový typ příslušé findByPrimaryKey metody jako java.lang.Object, stejný typ dát příslušnému CMP poli a navíc třídu i pole patřičně otagovat Xdocletem (u třídy @jboss.unknown-pk a @ejb.pk class = "java.lang.Object" generate = "false", u get metody pak @ejb:persistent-field, @ejb:pk-field a @ejb:interface-method view-type="local").
A houbeles — JBossův CMP plugin nerozpozná, že deklarovaný “unknown primary key” je totožný s deklarovaným CMP primárním klíčem, a tedy generuje dotazy jako insert into tabulka (pk field, pkfield, ...). Zkrátka vidí dva sloupce, od čehož se odvíjejí rozličná chybová hlášení, od pochopitelné stížnosti relační databáze na zdvojené jméno sloupce v insert dotazu, až po mysteriózní zamyšlení aplikačního serveru na téma nevhodnosti složených primárních klíčů ve scénáři “unknown primary key”.
Co s tím? Zlenivěn Xdocletem přeskakuji studium JBoss-specific deployment descriptoru (možná chyba ;)) a rovnou sahám po manuálu k Xdocletu. Nabízí pouze uvést JBoss specific tagem název databázového sloupce sloužícího jako PK, to pochopitelně dělám, ale JBoss si z toho (vcelku pochopitelně) souvislost neznámého klíče a specifikovaného CMP fieldu odvodit nedokáže. Navíc při generování SQL příkazu INSERT se snaží vkládat primární klíč coby null namísto toho, aby se o něm vůbec nezmiňoval.
Napadá mě CMP field pro primární klíč vypustit, a vida, najednou vše funguje. Primární klíč se stává opravdu doslova neznámým — v důsledku to znamená, že hodnotu klíče musím lovit přes ruku z EntityContextu získaného callback metodou, ale tím se trápit nebudeme.
Nicméně nyní nás čeká úkol číslo 2 — definovat mezi takovýmito entitami relaci.
Napohled nic těžkého, dokud si neuvědomíme, že v descriptoru aplikačního serveru musíme definovat propojovací sloupce — a nyní na nás dopadá důsledek předminulého odstavce: co je vlastně primárním klíčem, když jsme jeho CMP pole zavrhli?
Po marném Googlování a několika naivního pokusech cosi nastřelit nezbývá než využít dostupnosti zdrojových kódů JBosse a ladících možností Eclipse. Po pár breakpointech je situace jasná:
- Vytvoříme-li “unknown primary key” výše popsaným způsobem, JBoss si interně zavede pole s názvem
JménoBeany_upk. - Toto po chvíli úspěšně ověřuju na stránce JBossích odštěpenců z Core Developers Network
Uf.
Stále si říkám, že by nebylo od věci tam pole pro primání klíč zavést. Neustále se ale opakují problémy se zdvojenými poli v dotazu či nadbytečným uvádění primárního klíče v INSERT dotazu.
Takže výsledný kód je:
/**
* @ejb.bean name="Something" type="CMP" cmp-version="2.x" view-type="local"
* @jboss.entity-command name="postgresql-fetch-seq"
* class="org.jboss.ejb.plugins.cmp.jdbc.keygen.JDBCPostgreSQLCreateCommand"
* @jboss.unknown-pk auto-increment = "true" column-name="somethingId"
* jdbc-type="INTEGER" sql-type="INTEGER"
* class="java.lang.Integer"
* @ejb.pk class = "java.lang.Object" generate = "false"
*/
public abstract class SomethingEJB implements EntityBean {
/**
* @ejb.interface-method view-type="local"
* @ejb.relation name="Something_SomethingElse"
* role-name="something-has-somethingelse"
* target-ejb="SomethingElse"
* target-role-name="somethingelse-has-something "
* @jboss.relation related-pk-field="SomethingElse<strong>_upk</strong>"
* fk-column="assignedSomethingElse"
*/
public abstract LocalSomethingElse getSomethingElse ();
// other stuff comes here
}
(Jde o dvě entity beans — Something a SomethingElse, obě mají databází generovaný (a z pohledu EJB specifikace “unknown”) primární klíč. Pro jednoduchost jsem uvedl zdrojový kód pouze jedné z nich, která obsahuje jednosměrnou relaci getSomethingElse().)
"Takový hloupý vtip"
Sice s křížkem po funuse, ale což. Půvabný aprílový žertík se dostal na stránky javalobby.org — posuďte sami: Java on organic computers 
Hibernate 3.0 final
Gavin King se nejspíše nechal inspirovat loňským úspěchem Gmailu a zvolil si první duben jako termín pro vydání ostré verze Hibernate 3.
Ve stručnosti:
(Jen co jsem to dopsal, všiml jsem si, že to vydal už včera, takže poutavý úvod neplatí. Ale jiný už vymýšlet nebudu. Vlastně se můžeme vymluvit na časový posun.)
A mimochodem, když už jsem zmínil Gmail — Google v tichosti oslavil první výročí provozu této služby nenápadným přihozením dalšího giga.