giovedì 19 novembre 2009

SqlTool

Ho scoperto di recente che HSQLDB possiede un piccolo tool, chiamato SqlTool, con cui è possibile connettersi ad un qualsiasi database e inviare comandi e script SQL da linea di comando.
Già questo ne fa uno strumento fondamentale, visto che esistono database che non offrono tool per l'invio di script SQL da shell.
Ma la vera forza è la possibilità di utilizzarlo dall'interno dei propri programmi.
Immaginate un applicativo che la prima volta che viene lanciato crea il suo database senza bisogno di intervento, o la possibilità di applicare patch al db dopo l'installazione di una nuova versione.
L'utilizzo è veramente semplice. Di seguito riporto un esempio:


String url = "jdbc:hsqldb:file:/java/provehsql/provedb;shutdown=true";
String user = "sa";
String pwd = "";
String sql = IOUtils.toString(Prova.class.getResourceAsStream("script.sql"));
SqlTool.objectMain(new String[] {
"--inlineRc",
"URL=" + url + ",USER=" + user + ",PASSWORD=" + pwd,
"--sql",
sql
});


Come si può notare ho caricato il contenuto di uno script file in una string (utilizzando Apache IOUtils) per poi passarlo al metodo objectMain() di SqlTool insieme all'url e alle credenziali per la connessione al DB.
Il metodo accetta un array di stringhe analogo a quanto farebbe il metodo main per i parametri della riga di comando.
L'unico reale impedimento che ho riscontrato è che non è possibile passare una password non vuota. Se l'utente del database ha una password impostata il metodo si ferma per leggerla dallo standard input, cosa che vanifica ogni tentativo di automatizzazione.

martedì 15 settembre 2009

Articolo su JavATE

Un mio articolo su JavATE è appena stato pubblicato sul sito di ZK.
Lo potete raggiungere a questo URL.

Grazie agli amici del team di ZK per questa possibilità di dare visibilità a JavATE.

venerdì 28 agosto 2009

JavATE 0.3

Di recente ho rilasciato la versione 0.3 del mio framework JavATE.
Le novità principali riguardano:

  • Un sottoprogetto completamente nuovo chiamato "AuthorizATE". Come si può intuire dal nome questo progetto si occupa dell'autorizzazione degli utenti.

  • TreeBrowser e TreeEditor per navigare ed editare alberi di oggetti.

  • Il meccanismo di validazione è stato completamente riscritto ed ora è indipendente dal progetto GuidATE. Ora può essere utilizzato anche da chi decide di utilizzare solamente DominATE.

  • Il ListEditor è stato completamente riscritto ed ora è molto più flessibile la gestione della lista che si sta modificando.

  • E' stato aggiunto un meccanismo basato sulle annotazioni che consente di dichiarare una property come dipendente da altre, in modo che quando scatta un evento di PropertyChange di una, scatta il corrispondente evento per tutte le property che da questa dipendono

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à.

sabato 28 marzo 2009

Firefox vs Internet Explorer

SourceForge permette di attivare sul sito di un progetto una serie di software per controllare il progetto stesso. Tra questi c'è anche Piwik, che permette di analizzare gli accessi al sito del progetto. E tra le informazioni statistiche c'è anche il browser utilizzato dal visitatore.

Ho attivato Piwik sul sito di JavATE, il progetto open source a cui lavoro e guardando queste statistiche si nota una netta preponderanza di Firefox. Su 45 visite al sito soltanto 3 sono state effettuate usando Internet Explorer!

Probabilmente come statistica non è molto valida, il campione è piccolo e c'è sicuramente un forte bias dovuto al tipo di utente interessato a JavATE (sviluppatori Java) ma proprio per quest'ultima considerazione la dice tutto sulla qualità del browser Microsoft: gli esperti preferiscono sicuramente Firefox