Apache Derby

Bello quando le cose funzionano e funzionano subito! Con il JDK6 viene distribuito (ma da quale update? Booh! Io me lo sono installato, JDK6 o non JDK6…) anche JavaDB, che altro non sarebbe che Apache Derby, un motore DB pure Java. Lo sto provando perché non si sa mai. Le applicazioni client che sto gestendo tendono a salvare le informazioni in maniera piuttosto casuale. Properties, xml, semini, briciole di pane… troppi.

Ora, Derby è molto smart, easy. Può partire nella stessa VM dell’applicazione, oppure fatta partire in una VM a parte. Tutte cose molto comode ed utili. Insomma… funziona, e funziona subito!

Quello che sto cercando di fare, invece, sarebbe far partire il server all’interno di una delle applicazioni client e tenerlo attivo fino a che tutte le applicazioni client son state chiuse. In pratica, il primo che parte fa uno startup del servizio:

    NetworkServerControl server = new NetworkServerControl();
    server.start(null);

Questo funziona. La seconda eventuale applicazione si accorge che il servizio è già attivo e, di fatto. Entrambe le applicazioni, invece, si connettono (la prima si connette al servizio che lei stessa ha creato, si intende!)

        Properties props = new java.util.Properties();
        Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
        String nsURL="jdbc:derby://localhost:1527/sample;create=true";
        Connection conn = DriverManager.getConnection(nsURL, props);

Dove create=true sta a significare, se non c’è, crealo pure!

Il problema ora sarebbe che la prima applicazione termina alla fine della propria elaborazione. La seconda applicazione non trova più il servizio al quale era così affezionata e termina con rabbia. I casi son due… la prima applicazione dovrebbe aspettare che termini la seconda, oppure che il servizio girasse in una VM a parte. In questo caso… chi lo terminerebbe? Il sistema operativo? Inoltre, il db viene creato nella cartella da dove parte l’applicazione. Come specificare una diversa directory?

Ma questi sono dettagli. Il bello bello bello di tutto ciò è che si ha a disposizione un server Sql in meno di tre Mb di jar per un totale di quattro files.