Newsgroup: it.comp.java
Titolo: JPA con database differenti

Ciao a tutti,
ho iniziato ad usare eclipselink + netbeans da poco e l'ho trovato
utilissimo.
Volevo usare la stessa applicazione su macchine diverse, una con mysql
e l'altra con postgres, ma mi sono subito inchiodato.
Quando nel sorgente definisco una table con
@Table(name = "clienti", catalog = "provadb", schema = "public")
funziona con postgres, ma non con mysql. Quest'ultimo vuole
@Table(name = "clienti", catalog = "uapp", schema = "")
Come si fa a mantenere lo stesso codice? Volevo usare una condizione
IF ma non penso si possa fare.
Qualcuno ha suggerimenti? Vorrei evitare di avere due sorgenti
diversi.
Grazie
Biagio


Ho provato e riprovato ma non vedo soluzione.
Ho bisogno di rendere dinamica questa annotazione in modo da poter
cambiare il parametro "schema".
Ma se l'annotazione non permette un IF o non permette di usare una
funzione che ritorni un valore posso fare solo questo:
Duplicare le classi che fanno riferimento al database ma è una cosa
inaccettabile.
Suggerimenti?
Grazie

 Suggerimenti?
Usare una configurazione di mapping in XML.
Ciao
   Lucio
-- 
Lucio Benfante
JUG Padova           
http://www.parancoe.org
 ...have a look at it!
www.jugpadova.it
 
http://www.jugevents.org


Ho cercato come modificare la configurazione XML per quanto riguarda
il parametro "schema" per la @table ma non ho capito come.
A run-time sono riuscito a cambiare la password, l'host ... ecc.
ecc. ..... ma non questo parametro.
Considerando che una delle qualità di eclipselink è quello di usare la
stessa applicazione su database differenti mi sembra impossibile che
non ci sia una soluzione elegante senza modificare il codice.

Biagio ha scritto:

La butto là... ma catalog e schema non dovrebbero essere proprietà che 
imposti sulla connessione? Di conseguenza non ti pasta fare due 
persistence.xml diversi?
ciao

 ciao
Si, i duue persistence.xml sono diversi. Ma il parametro "schema" è
contenuto nel sorgente a completamento dell'annotazione @Table
Ti spiego tutto perché forse mi sfugge qualcosa.
Sia per mysql che postgres ho utilizzato il loro client. Dal client
specifico, in maniera visuale, seleziono il menu alla voce "aggiungi
database".
Tutto perfetto. I due server hanno un database con lo stesso nome e
chiaramente sono vuoti.
Lancio la mia applicazione specificando i parametri che puntano a
mysql (uso una JDialog per il login). Tutto perfetto, vengono create
tutte le tabelle (fantastico).
Lancio la stessa applicazione, questa volta inserendo i dati per
postgres, e chiaramente mi da errore. Non trova il database.
Entro nel codice e per ogni classe che rappresenta una tabella
@Table(name = "clienti", catalog = "uapp", schema = "")
cambio in
@Table(name = "clienti", catalog = "uapp", schema = "public")
Compilo e riprovo son postgres, perfetto, ora anche qui vengono
generate le tabelle correttamente.
Se però lancio l'applicazione per collegarmi a mysql, non trova più il
database.
Insomma questo "schema" non lo digeriscono in maniera identica.
Forse come dici tu devo intervenire sulla creazione del database, ma
postgres non mi permette di crearne uno nuovo senza "public" tra i
suoi parametri.
Cosa dici?
Grazie
Biagio


Quanto tempo perso (non è vero, nel frattempo ho imparato un sacco di
cose) per risolvere questo stupido problema !!!!!
Soluzione
Se usate Netbeans e create le annotazioni JPA leggendo un database già
esistente .... e volete rendere il programma indipendente dal tipo di
database.
modificate questa riga
@Table(name = "clienti", catalog = "uapp", schema = "public")
in
@Table(name ="clienti")
Funziona senza problemi su Postgres e su MySql.
Grazie ab, mi hai fatto riflettere.
Biagio

 Funziona senza problemi su Postgres e su MySql.
Ma va? ;)
E' quello che ti aveva detto di fare "ab" ed � anche quello che si fa 
solitamente.