HSQL embeded o server

3 views
Skip to first unread message

Cristiano Tomasi

unread,
Aug 15, 2010, 4:23:51 AM8/15/10
to jug...@googlegroups.com
Ciao a tutti

sto cominciando ad usare HSQL (per il progetto open source) e mi chiedevo se e' meglio usare HSQL in modalità embedded o modalità server
La prima non richiede pressoche installazione, pero' e' usabile solo da un applicativo alla volta (c'e' un lock sul db alla connessione), la seconda permette a più applicativi di connettersi al DB ma richiede un maggior lavoro in fase di installazione.

Secondo la vostra esperienza cosa mi consigliate di fare?

Saluti
Cris.


andrea antonello

unread,
Aug 15, 2010, 4:33:44 AM8/15/10
to jug...@googlegroups.com
Ciao,
non rispondo esattamente alla tua domanda, perche' non uso (piu') hsql.Ma....

Ho usato hsql per un po', poi per motivi tecnici slegati dal db sono
passato a H2 (praticamente stessi genitori e stessa cosa).
Mi trovo molto bene con H2, anche perche ti regala anche un webserver
con tanti di interfaccia di esecuzione di query che e' possibile anche
integrare facilmente nelle proprie applicazioni (ad esempio il la uso
in questo modo: http://tinyurl.com/32hfzfe )

Ho iniziato ad usarlo in local mode trovando la tua stessa
limitazione. Per farlo diventare "multi", baste una piccola
configurazione e voila'.

Ciao
Andrea


2010/8/15 Cristiano Tomasi <ctom...@gmail.com>:

> --
> You received this message because you are subscribed to the Google Groups
> "JUG Trentino Alto Adige Suedtirol" group.
> To post to this group, send email to jug...@googlegroups.com.
> To unsubscribe from this group, send email to
> jugtaa+un...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/jugtaa?hl=en.
>

Mario Alexandro Santini

unread,
Aug 15, 2010, 4:46:09 AM8/15/10
to jug...@googlegroups.com
2010/8/15 Cristiano Tomasi <ctom...@gmail.com>:

Ciao,

a volte per trovare le risposte dobbiamo porci le giuste domande.

Che cosa deve contenere questo database?
Sono dati pertinenti all'applicazione?
Possono essere fruiti da più client? (O meglio è sensato che vi
accedano più client?)

Chi dovrà installare l'applicazione?


Io non conosco bene il tuo progetto ( forse ho perso delle e-mail ),
ma per capire quale sia la strada migliore da intraprendere a volte
serve avere una idea chiara di dove si vuole arrivare.

Comunque, la scelta può essere anche legata ad esigenze implementative.
Installare il database embedded può semplificare l'installazione
dell'applicazione e quindi favorirne lo sviluppo.

Se le cose sono fatte bene, quando si renderà necessario passare ad un
database server non sarà tanto difficile introdurre la modifica.


--
Ciao,
      Mario

Cristiano Tomasi

unread,
Aug 15, 2010, 6:20:46 AM8/15/10
to jug...@googlegroups.com
Grazie mille andrea, provero' sicuramente a darci un occhiata.

Cris.


2010/8/15 andrea antonello <andrea.a...@gmail.com>

Cristiano Tomasi

unread,
Aug 15, 2010, 6:31:56 AM8/15/10
to jug...@googlegroups.com
Ciao Mario

il mio progetto e' un' applicazione web per la gestione dei progetti e tra gli obbiettivi c'e' quello della massima facilità di installazione, un paio di click e via. (lo scopo principale e' quello di studiare java ma al tempo stesso produrre qualcosa di utile)
E' questo l'ho provato e funziona con HSQLDB in modalità embeded.

Il problema e' che adesso per alterare il DB uso DB Visualizer, e al tempo stesso per provare l'applicazione  accedo al DB tramite tomcat. Le due cose fanno a pugni perche' solo una delle due applicazioni puo accedere al DB.

Inoltre da utilizzatore di applicativi simili, non voglio escludere a priori che un utente esperto voglia accedere ai dati dei suoi progetti direttamente da tools esterni, ci sono mille motivi per farlo:

1) ricerche customizzate
2) integrazione dell' applicativo con applicativi esterni gia' esistenti
3) backup personalizzati

etc...

Saluti
Cris.



2010/8/15 Mario Alexandro Santini <alexm...@gmail.com>

--

Nicola Pedot

unread,
Aug 15, 2010, 1:16:07 PM8/15/10
to jug...@googlegroups.com
Ciao Cris,
anch'io son passato da hsql a h2,

http://user.services.openoffice.org/en/forum/viewtopic.php?f=13&t=29737&start=0

NiPe

2010/8/15 Cristiano Tomasi <ctom...@gmail.com>
Ciao Mario

Mario Alexandro Santini

unread,
Aug 16, 2010, 2:57:48 AM8/16/10
to jug...@googlegroups.com
2010/8/15 Cristiano Tomasi <ctom...@gmail.com>:

> Ciao Mario
>
> il mio progetto e' un' applicazione web per la gestione dei progetti e tra
> gli obbiettivi c'e' quello della massima facilità di installazione, un paio
> di click e via. (lo scopo principale e' quello di studiare java ma al tempo
> stesso produrre qualcosa di utile)
> E' questo l'ho provato e funziona con HSQLDB in modalità embeded.
>

Bhe, secondo me dovresti pensare seriamente ad evere una base dati
centralizzata.

Se si tratta di una applicazione Web è sicuramente utile per renderla
più scalabile.
Inoltre, il dominio della tua applicazione prevede sicuramente la
condivisione fra più persone ergo diverse istanze che accedono in
lettura/scrittura agli stessi dati.

Io direi che ti conviene passare quanto prima ad un db server, magari
H2 come ti consigliano in diversi ( la popolarità è sempre un criterio
valido di scelta ).

Ma in ottica Web ti direi di valutare anche MySQL, naturalmente tieni
presente che c'è un problema di licenze per la distribuzione.

--
Ciao,
      Mario

mbuc

unread,
Aug 16, 2010, 3:06:02 AM8/16/10
to JUG Trentino Alto Adige Suedtirol
Ciao Cristiano,
ho usato qualche volta HSQLDB per fare dei test veloci o prototipi e
nel caso di web application di solito l'ho usato comunque in modalità
server, facendolo startare in automatico mediante una servlet
all'avvio del container (ad es. tomcat o jetty). Questo è comodo se,
oltre all'applicazione, vuoi lanciare contemporaneamente anche il
client swing per fare query o altro, cosa che di solito si fa mentre
provi le funzionalità.
Per fare questo mi sono creato una servlet che faccio caricare
all'avvio mediante il parametro <load-on-startup>1</load-on-startup>
nel web.xml della webapp.

Ecco il codice della servlet:


package my.company.progetto.server.db;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.hsqldb.Server;


public class HsqldbServerServlet extends HttpServlet {

private static final long serialVersionUID = 830802848307386595L;

private static final Server db = new Server();

public void init(ServletConfig sc) throws ServletException {

String rootPath = sc.getServletContext().getRealPath("/");
String dbpath = sc.getInitParameter("db-path")==null ? "WEB-
INF/database" : sc.getInitParameter("db-path");
String dbname = sc.getInitParameter("db-name")==null ?
"exampledb" : sc.getInitParameter("db-name");
String hsqldbpath = rootPath + dbpath + "/" + dbname;

if ( dbname.equals(db.getDatabaseName(0, true)) ) {
return;
}

db.setDatabaseName(0, dbname);
db.setDatabasePath(0, hsqldbpath);
db.setSilent(true);
db.start();

super.init(sc);
}

public void destroy() {
db.shutdown();
super.destroy();
}

}


E la parte del web.xml (non serve la parte <servlet-mapping> dato che
la servlet in realtà non deve rispondere a chiamate del browser).
I parametri <db-path> e <db-name> servono per dire in che directory
hai messo il db (io di solito lo metto nella WEB-INF/database, che è
anche il default se ometti quei due init-params). Mi raccomando,
importante è il parametro <load-on-startup>1</load-on-startup>, dove
il numero indica l'ordine con cui vengono caricate le servlet allo
startup, se per caso ne avessi più di una e vuoi che una venga
caricata per forza prima di un'altra:


<servlet>
<servlet-name>HsqldbServerServlet</servlet-name>
<servlet-
class>my.company.progetto.server.db.HsqldbServerServlet</servlet-
class>
<!-- Following params can be given to override the default that is
WEB-INF/database/exampledb -->
<init-param>
<param-name>db-path</param-name>
<param-value>WEB-INF/database</param-value>
</init-param>
<init-param>
<param-name>db-name</param-name>
<param-value>exampledb</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>


Ciao,
Marco.

On Aug 15, 7:16 pm, Nicola Pedot <nicola.pe...@gmail.com> wrote:
> Ciao Cris,
> anch'io son passato da hsql a h2,
>
> http://user.services.openoffice.org/en/forum/viewtopic.php?f=13&t=297...
>
> NiPe
>
> 2010/8/15 Cristiano Tomasi <ctomas...@gmail.com>

Cristiano Tomasi

unread,
Aug 16, 2010, 3:23:25 AM8/16/10
to jug...@googlegroups.com
Davvero interessante Marco

grazie mille per la dirtta, non manchero' di provarla.

Saluti
Cris.

2010/8/16 mbuc <mb...@libero.it>

Marco Moser

unread,
Aug 20, 2010, 4:09:29 AM8/20/10
to jug...@googlegroups.com
ho terminato da pochissimo il collaudo di un applicativo swing su hsqldb
2 e ti confermo che funziona benissimo in modalita' "embedded server"

mi sembra di capire invece che piu' istanze di H2 possono lavorare
contemporaneamente sullo stesso datafile (mi confermi nicola?!?)

apache derby e' molto completo ma soffre un pochino di performance


Nicola Pedot

unread,
Aug 20, 2010, 5:44:40 AM8/20/10
to jug...@googlegroups.com
Confermo,
H2 fa ambo le cose
in particolare se qualcuno è curioso per i file c'e' questa sezione:
http://www.h2database.com/html/advanced.html#file_locking_protocols
NiPe

2010/8/20 Marco Moser <ma...@marcomoser.it>
ho terminato da pochissimo il collaudo di un applicativo swing su hsqldb 2 e ti confermo che funziona benissimo in modalita' "embedded server"

mi sembra di capire invece che piu' istanze di H2 possono lavorare contemporaneamente sullo stesso datafile (mi confermi nicola?!?)

apache derby e' molto completo ma soffre un pochino di performance


--
Reply all
Reply to author
Forward
0 new messages