Newsgroup: it.comp.java
Titolo: Nuova struttura database

Ciao a tutti,
vorrei un consiglio per evitare di prendere una strada sbagliata.
Lavorando con un database (mysql, postgres, ecc.) è normale dopo un
po' dover cambiare la struttura dei dati (aggiungere tabelle,
campi ... modificare il tipo di dati di una collonna .. ecc. ecc.).
Ci possono essere due alternative:
1) usare un client visuale che apporta ogni singola modifica;
2) usare una routine che fa tutto in automatico.
La prima la scartiamo immediatamente perché va bene solo se lo fa una
persona competente.
La seconda invece è più veloce e sicura .... oltre che automatica.
Anche qui vedo due strade:
1) inserire nel codice java una classe che contiene anche le
definizioni del database;
2) la definizione del database la metto in un file XML e poi da questo
leggo ed aggiorno.
Penso che la soluzione migliore sia la seconda.
Secondo voi è veramente la soluzione migliore? In java ci sono delle
classi già pronte o devo scrivere tutto attraverso delle query
utilizzando il driver JODC per lo specifico database?
Grazie
Biagio

 campi ... modificare il tipo di dati di una collonna .. ecc. ecc.).
Ma non puoi usare un editor SQL?
Francamente credo di non aver capito la domanda...

 utilizzando il driver JODC per lo specifico database?
Quasi tutti gli orm hanno una parte del codice dedicata alla 
creazione/alterazione delle tabelle.
Se attualmente non usi un orm sta a te valutare il costo di integrarne 
(parte di) uno a fronte del numero di modifiche previste (moltiplicato 
per 3 ;) ) alla struttura del db.
Ciao,
Pablo

 utilizzando il driver JODC per lo specifico database?
Hibernate dovrebbe fare al caso tuo
Enrico


wrote:

Mi sono precipitato a leggere qualcosa su Hibernate e la cosa mi ha
molto incuriosito. Sì, da quello che ho letto dovrebbe fare al caso
mio.
Tra le mille cose che devo ancora imparare di java, mettiamoci anche
questo hibernate.
Grazie per la segnalazione
Biagio

 Francamente credo di non aver capito la domanda...
Quello lo uso già, ma vorrei creare un programma da distribuire, che
possa aggiornarsi in sicurezza senza richiedere l'intervento di un
tecnico.
Grazie
Biagio


Sì, hai ragione. Inutile esagerare con le soluzioni artigianali. Ecco,
ho bisogno di un orm. Mi hanno già suggerito Hibernate, tu dici che è
una buona soluzione?
Grazie
Biagio

 una buona soluzione?
Premetto che generalmente apprezzo gli ORM, ma mi sembra ridicolo 
passare ad un ORM per il suddetto motivo.
Non puoi semplicemente eseguire la modifiche a mano tramite editor SQL e 
poi distribuire gli script o comunque inviarli in modo che vengano 
eseguiti da un server JDBC o che altro (anche se continuo a non vederne 
la necessit�)?
Solitamente le modifiche perpetuate da un editor SQL visuale alla 
struttura della base dati vengono loggate tramite comandi SQL che puoi 
rieseguire.
Ti dico quello che si fa usualmente: ti tieni gli script da parte e gli 
invii a dba che li riapplica sul database di produzione.

 S�, hai ragione. Inutile esagerare con le soluzioni artigianali.
Non ho detto questo, purch� non si reinventi l'acqua calda a me 
piacciono le soluzioni artigianali ;)
Dicevo solo che � un problema frequente e che l'uso di un orm lo aggira 
parzialmente ma non lo risolve (nella prima parte della risposta).
 > Ecco, ho bisogno di un orm.
Hai bisogno di un orm? Aspetta a darlo per assodato: quanti sviluppatori 
lavorano sul progetto? E' web o desktop? Quanti utenti accedono 
simultaneamente all'applicazione?
Queste (e molte altre) sono le domande a cui rispondere per valutare se 
serve o meno un orm.
 > Mi hanno gi� suggerito Hibernate, tu dici che � una buona soluzione?
Ha il vantaggio di essere molto diffuso (praticamente uno standard).
E' per� molto complesso, ha prestazioni limitate (o meglio: tarare 
adeguatamente le prestazioni richiede competenze non banali), "pesa" in 
memoria.
IMHO se non hai migliaia di accessi simultanei (e se proprio devi usare 
un orm) ti suggerirei di provare ActiveObjects o SimpleORM: sono molto 
pi� semplici e rapidi da imparare.
Poi ribadisco: come un utente inesperto pu� combinare danni usando un 
editor SQL cos� un programmatore (o installatore) inesperto pu� fare lo 
stesso configurando male un orm (basato su xml o classi java poco cambia).
Concludo: visto che il tuo obiettivo � realizzare un sistema di 
aggiornamento del sw senza necessit� dell'intervento di terzi l'uso di 
un orm non cambia nulla, all'atto pratico.
Vi sono soluzioni decisamente pi� adatte e sicure (da Java Web Start a 
stumenti di plugin o scripting, da script sql -come suggerito da cicap- 
a sistemi "proprietari" via rete), ma il discorso diventa lungo.
Ciao,
Paolo

 pi semplici e rapidi da imparare.
Per quale motivo? Non li conosco, ma sarei curioso in quale campo
battono Hibernate.

 battono Hibernate.
Ripeto: perch� sono pi� semplici e facili da imparare.
Come faccio a spiegarti il motivo?
Semplicit� e facilit� sono caratteristiche soggettive, magari per te (o 
per l'OP) risulta pi� semplice hibernate (improbabile ma non impossibile).
Prova a dare una rapida scorsa ai rispettivi tutorial e valuta (in 
ordine di complessit� decrescente):
https://activeobjects.dev.java.net/example.html
http://www.simpleorm.org/sorm/whitepaper.html
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/tutorial.html
Ciao,
Pablo

 Forse hai invertito i termini?
In italiano quando uno dice "praticamente � uno standard" significa 
standard  de facto. In realt� non � uno standard de facto, ma uno 
standard vero e proprio (nel senso che lo implementa ovviamente).
Sinceramente non avevo alcun intento polemico nei tuoi confronti, ho 
posto semplicemente delle correzioni a quelle che io credevo delle 
inesattezze.
Mi pare tu non l'abbia presa bene o sbaglio?

 Mi pare tu non l'abbia presa bene o sbaglio?
S�, sbagli: ho risposto un po' in fretta (me ne scuso) e sinteticamente 
e, lo sappiamo bene, per iscritto � facile equivocare i toni.
Nessun problema :)
Ciao,
Pablo

 Pablo
Grazie a tutti per le preziose informazioni.
Devo ammettere che ho aperto questa discussione tralasciando alcuni
dati che sono importanti per ottenere buoni consigli.
Il progetto è molto semplice ed io sono l'unico che ci lavora, almeno
per il momento.
Sono nuovo del mondo java, provengo da un'altro linguaggio.
L'applicativo da me sviluppato (un gestionale per un settore
particolare) andrà nelle mani di gente molto inesperta e quindi devo
ridurre al massimo le operazioni di aggiornamento del database.
Voglio permettere ad ognuno di loro di scaricarsi la versiona
aggiornata da internet. Molto probabilmente ci saranno nuove tabelle
da creare o campi da aggiungere a tabelle esistenti.
Non posso intervenire personalmente con un editor SQL direttamente sul
loro database.
Cercavo una soluzione facile e sicura che evitasse al massimo errori
per non compromettere i dati.
Biagio

 per non compromettere i dati.
Per esperienza personale: dai per scontato che, pi� prima che poi, 
qualche errore si verifichi con conseguente perdita di dati.
Prevedi quindi un sistema di backup-restore del db (operazione che, 
periodicamente, andrebbe comunque fatta) in modo da poter effettuare una 
"rollback" degli aggiornamenti.
Ciao,
Pablo