sabato 31 marzo 2007

Le proposte del papà di Hibernate per Java EE 6

Gavin King, per chi non lo conoscesse, è il papà di Hibernate, l'arcinoto framework di persistenza. Gavin, iniziò a scrivere hibernate per averla vinta con il suo capoufficio (come scrisse tempo fa in un post che non riesco a recuperare). Dopodichè Hibernate crebbe fino a diventare il più popolare e performante ORM java. Venne quindi acquisito da JBoss, di cui Gavin è ora dipendente. Allo stesso tempo l'autore entrò a far parte del gruppo che scrisse la JSR per Java EE 5... i famosi EJB3. Di fatto questi non furono altro che un set di annotation e specifiche cucite attorno ad hibernate.

Oggi Gavin ha pubblicato la sua (parziale) wish list di specifiche per la prossima versione di Java EE. La 6. Alcune, di fatto sono già implementate in JBoss Seam, per cui se la storia insegna, le vedremo nuovamente cucite in EJB4.

Ci aspettiamo a breve nuovi post sulla questione. Per adesso vi riassumo le proposte per i nuovi Session Bean, tutte specificabili via annotation:

Concorrenza

tre tipi di concorrenza forniti dal container

  • session bean senza concorrenza (come adesso)
  • session bean con concorrenza gestita dal container: la serializzazione delle chiamate è garantità dall'application server (esempio: Session Bean singleton)
  • session bean con concorrenza gestita dal container: i synchronized sono a vostro carico
Metodi asincroni

Possibilità di marcare un metodo asincrono (con @Asynchronous), cioè in modo che la sua chiamata non sia bloccante per il chiamante e sia cura dell'application server aprire su un altro thread l'esecuzione del metodo. Direte: si può già fare con il sistema di messagging. Sì, ma quella suggerita da Gavin è un'infrastruttura più leggera di JMS.

Endpoit per webservice WS-blablabla

Possibilità di marcare uno stafeful bean come endpoint di un web-service con stato specificato da molte delle WS-qualcosa. Ad esempio WS-Transaction.
Qui il nostro caro, ha ancora le idee un po' confuse.

Interfaccia business opzionale

La rindondanza della @Local è roba nota, e non ve la ripeto. Gavin "pretende" di togliere il problema. Inoltre fa pubbliche scuse sull'implementazione attuale in EJB3... effettivamente è uno dei pochi che può farlo ;)

Loggers e JMS queues iniettabili

Possibilità di iniettare il classico logger o una coda di messaggi in modo semplice. In Seam già si fa.

Meta-annotation

Questa è bellissima. In un mondo dove ci saranno più annotation che codice, Gavin propone di introdurre una sorta annotation contenitore che esprima tutte le altre in un sol colpo. Direi che questa ci vorrà per forza.


Per ora questo è tutto. Vi terrò aggiornati sul proseguimento delle proposte.

giovedì 29 marzo 2007

Java 7: cosa c'è in ballo

Per chi è interessato a capire cosa ci si potrà aspettare dalla versione 7 di Java, segnalo questa pagina (inglese), dove sono raccolti per categorie link a numerosi blog di discussione delle singole features in gioco.

C'è un po' di tutto: dalle closure, alle NIO2, dal nuovo javadoc, ai superpackage.

Per chi, invece, volesse spulciare il javadoc dell'ultima build di Java 7 lo trova qui.

Buon divertimento!

mercoledì 28 marzo 2007

Rilasciato JBoss Seam 1.2.1

Rilasciata la nuova versione di JBoss Seam: la 1.2.1

JBoss Seam è un framework opensource per la realizzazione di applicazioni web, che sposa in toto la filosofia EJB3.
Le singole pagine, le conversazioni, gli utenti, ecc ecc sono rappresentati come classi Java standard (i famosi POJO) decorate da alcune annotation. Quindi: no implementazioni di interfacce, pattern complessi o altre amenità. L'application server (in questo caso JBoss) si cura di realizzare a runtime, in modo efficiente, quanto si "dichiara" nelle annotation.

In quest'ultima versione è stata aggiunta la classica feature edit-save-and-refresh dei linguaggi web interpretati come PHP o ASP. Nel caso di JBoss Seam si traduce nella possibilità di modificare il codice java, ad esempio via Eclipse, e quindi ottenere la nuova applicazione con un semplice refresh del browser.

Seam farà molta strada.

martedì 27 marzo 2007

Constraint Programming e Scheduling con JOpt

Ho scoperto una giovane libreria molto interessante che implementa gli algoritmi standard di Constraint Programming e una sua "instanziazione" al caso dei problemi di Scheduling: jOpt

Ho navigato i sorgenti e devo dire che l'implementazione è fatta molto bene, sia dal punto di vista architetturale, sia da quello della pulizia del codice.

L'ho testata su dei problemi di scheduling di risorse e attività generati casualmente ,per un lavoro che sto portando avanti, e devo dire che, anche senza implementazione di particolari euristiche di scelta e local search dedicati la velocità della libreria è molto buona.

L'uso dell'implementazione dello scheduling (denominata JS)è banale anche per chi non è ferrato su questo genere di problemi. Le classi e i metodi esposti sono autoesplicative e l'esempio fornito nei sorgenti e di grande aiuto.

Senzadubbio da tenere d'occhio.

Rilasciato JFreeChart 1.0.5

Rilasciata la nuova versione 1.0.5 di JFreeChart , la popolare libreria Java per la realizzazione di grafici.


Questa nuova versione implementa un nuovo renderer perla creazione di serie temporali nei diagrammi, e varie correzioni di bug.

mercoledì 21 marzo 2007

Hibernate incontra Shard e va orizzontale

Il framework di Hibernate si arricchisce ancora con una nuova utilissima estensione: Hibernate Shard

Detta in breve, Hibernate Shard consente di estendere in modo completamente trasparente il layer di Hibernate ad un contesto con più database.
Diciamolo ancora più terra terra. Supponete di avere i dati sparsi in più database (per motivi legali, di prestazioni, o per riesumazioni di applicazioni datate) e di voler persistere i vostri oggetti per alcuni campi su un database e per altri su un'altro database. Bene, Hibernate Shard fa esattamente questo: senza modificare il vostro modello ad oggetti vi basterà ridefinire in quali database persistere i singoli campi e Shard organizzerà per voi transazioni distribuite nella solita chiara e trasparente veste di Hibernate.

Ovviamente il tutto funziona anche a rovescio, qualora decideste di eseguire delle select distribuite.

E, un po' meno ovviamente, anzi quasi miracolosamente, il tutto funziona anche qualora voleste avere più repliche dello stesso db, e per ragioni di performance voleste lanciare select computazionalmente pesanti, ad esempio con politica round robin sulle singole repliche.

L'estensione è stata realizzata dai soliti buontemponi di Google nel loro arcinoto 20% di tempo libero.