sabato 18 aprile 2009

Non è mai troppo tardi ...

... per imparare qualcosa di nuovo. Pensavo di sapere praticamente tutto sul "linguaggio" Java. Non parlo delle librerie o delle specifiche collaterali, ma del linguaggio vero e proprio. Eppure proprio ieri ho scoperto qualcosa che non conoscevo.

Così come è possibile aggiungere ad una classe un inizializzatore statico che viene eseguito prima di qualsiasi utilizzo della classe:

public class MiaClasse {
static {
// Codice da eseguire
}
}

ho scoperto che è possibile aggiungere un inizializzatore di istanza:

public class MiaClasse {
{
// Codice da eseguire
}
}

Il codice dell'inizializzatore di istanza viene eseguito dopo l'inizializzazione degli attributi della classe ma prima del costruttore.

Con questo inizializzatore non solo è possibile fattorizzare la parte comune dell'inizializzazione di una classe, che spesso viene ripetuta in ciascun costruttore, ma è fondamentale soprattutto per l'inizializzazione delle istanze di classi anonime, che non possiedono un costruttore. Sarà infatti possibile scrivere:

new ParentClass() {
{
//codice di inizializzazione della classe anonima
}

// resto della classe anonima

};

Questo permette una tecnica detta Double Braced Initialization per l'inizializzazione delle Collection e delle Map. Basta infatti usare la seguente sintassi:

Map m = new HashMap() {{
put("primo", 1L);
put("secondo", 2L);
put("terzo", 3L);
}};

per avere in m una Map subito pronta.

giovedì 16 aprile 2009

Open Source Business Intelligence

Mi è capitato recentemente di dover effettuare uno studio di fattibilità per un progetto per un nuovo cliente che aveva tra i requisiti una serie di analisi statistiche abbastanza sofisticate.
Mi sono immediatamente reso conto che era esattamente il tipico problema risolvibile tramite l'analisi dati multidimensionale ma ... di solito i tool di Business Intelligence sono estremamente costosi.
Ovviamente non mi sono perso d'animo, mi sono messo a cercare e la ricerca ha dato i suoi frutti.

Ho scoperto inizialmente l'esistenza di Jasper Server. Ovviamente avevo già usato più volte Jasper Report per realizzare piccoli report da lanciare dall'interno degli applicativi, ma Jasper Server, oltre ad agire da reporting server (esecuzione centralizzata, schedulazione, ecc.) può agire anche da semplice tool di analisi multidimensionale.

Ma Jasper Server in realtà mi ha aperto un mondo, perchè ho scoperto che al suo interno utilizza Mondrian, una libreria open source per l'analisi multidimensionale con supporto per il linguaggio MDX.

Inoltre, per l'interfaccia utente Web based, viene usato jPivot, che permette di visualizzare il risultato delle query MDX effettuate con Mondrian con la possibilità di effetuare drill-up / drill-down e molte altre delle operazioni tipiche dei tool di business intelligence. Peccato che la documentazione sia un po' scarsa!

Tramite jPivot e Mondrian non è difficile integrare all'interno di un applicativo web un'interfaccia per l'analisi dati. Niente di particolarmente sofisticato ma di sicura efficacia per clienti che non si possono permettere di acquistare una costosissima licenza di un tool di cui poi useranno circa l'1% delle funzionalità.