| View previous topic :: View next topic |
| Author |
Message |
Montag Guest
|
Posted: Wed Feb 25, 2004 10:32 am Post subject: 2 quesiti.. |
|
|
1. Sto creando un'applicazione in JSP con Tomcat 4, e devo buttare da
qualche parte lo username e la password di un DB (ovviamente un posto
sicuro), che vengono poi utilizzati ad ogni richiesta di connessione. Avevo
pensato di settarle come delle costanti in un Bean, ma ho idea che qualcuno
mi sa consigliare un metodo più pulito (un file XML? quale? e con quale
sintassi?)
2. vorrei implementare il Pattern "Singleton" per una classe "Connessione",
in modo da essere sicuro che venga istanziata una sola volta. Qualcuno di
voi ha già implementato qualcosa del genere?
grazie
--
Giovanni
|
|
| Back to top |
|
 |
fiveMilesOut Guest
|
Posted: Wed Feb 25, 2004 10:49 am Post subject: Re: 2 quesiti.. |
|
|
Montag ha scritto:
| Quote: | 2. vorrei implementare il Pattern "Singleton" per una classe "Connessione",
in modo da essere sicuro che venga istanziata una sola volta. Qualcuno di
voi ha già implementato qualcosa del genere?
|
Io faccio così:
public class Connessione {
private static Connessione CURRENT = null;
public static Connessione getSharedInstance() {
if (CURRENT == null)
CURRENT = new Connessione();
return CURRENT;
}
private Connessione() {
...
}
}
Nel codice:
Connessione c = Connessione.getSharedInstance();
prego!
Ciao
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad [email]abuse (AT) newsland (DOT) it[/email]
|
|
| Back to top |
|
 |
Lucio Benfante Guest
|
Posted: Wed Feb 25, 2004 11:05 am Post subject: Re: 2 quesiti.. |
|
|
On Wed, 25 Feb 2004 11:49:02 +0100, fiveMilesOut wrote:
| Quote: | Montag ha scritto:
2. vorrei implementare il Pattern "Singleton" per una classe "Connessione",
in modo da essere sicuro che venga istanziata una sola volta. Qualcuno di
voi ha già implementato qualcosa del genere?
Io faccio così:
public class Connessione {
private static Connessione CURRENT = null;
public static Connessione getSharedInstance() {
if (CURRENT == null)
CURRENT = new Connessione();
return CURRENT;
}
private Connessione() {
...
}
}
Nel codice:
Connessione c = Connessione.getSharedInstance();
|
Purtroppo la tua implementazione non e' thread-safe, in un'applicazione
Web rischi grosso. Meglio utilizzare un blocco statico per creare
l'istanza del singleton e rendere synchronized il metodo di recupero.
Inoltre per un'applicazione Web un singleton non e' la scelta opportuna,
dato che una singola connessione non sara' probabilmente sufficiente.
Meglio usare un pool di connessioni.
--
Lucio Benfante
Java User Group Padova: http://www.jugpadova.it
Brainbench MVP for Java 1: http://www.brainbench.com
MyTranscript: http://www.brainbench.com/transcript.jsp?pid=167064
|
|
| Back to top |
|
 |
Dario Guest
|
Posted: Wed Feb 25, 2004 11:05 am Post subject: Re: 2 quesiti.. |
|
|
| Quote: | 2. vorrei implementare il Pattern "Singleton" per una classe "Connessione",
in modo da essere sicuro che venga istanziata una sola volta. Qualcuno di
voi ha già implementato qualcosa del genere?
Io faccio così:
public class Connessione {
private static Connessione CURRENT = null;
public static Connessione getSharedInstance() {
if (CURRENT == null)
CURRENT = new Connessione();
return CURRENT;
}
private Connessione() {
...
}
}
|
Piu' semplice e':
public class Connessione {
public static Connessione CURRENT = new Connessione();
private Connessione() {
...
}
}
|
|
| Back to top |
|
 |
Montag Guest
|
Posted: Wed Feb 25, 2004 11:43 am Post subject: Re: 2 quesiti.. |
|
|
grazie a tutti per i consigli, molto utili
e riguardo al primo quesito?
"Montag" <inventato (AT) nonesiste (DOT) it> ha scritto nel messaggio
news:UQ__b.26493$IT2.861100 (AT) news4 (DOT) tin.it...
| Quote: | 1. Sto creando un'applicazione in JSP con Tomcat 4, e devo buttare da
qualche parte lo username e la password di un DB (ovviamente un posto
sicuro), che vengono poi utilizzati ad ogni richiesta di connessione.
Avevo
pensato di settarle come delle costanti in un Bean, ma ho idea che
qualcuno
mi sa consigliare un metodo più pulito (un file XML? quale? e con
quale
sintassi?)
2. vorrei implementare il Pattern "Singleton" per una classe
"Connessione",
in modo da essere sicuro che venga istanziata una sola volta. Qualcuno di
voi ha già implementato qualcosa del genere?
grazie
--
Giovanni
|
|
|
| Back to top |
|
 |
matish Guest
|
Posted: Wed Feb 25, 2004 11:59 am Post subject: Re: 2 quesiti.. |
|
|
Lucio Benfante wrote:
| Quote: | Purtroppo la tua implementazione non e' thread-safe, in un'applicazione
Web rischi grosso. Meglio utilizzare un blocco statico per creare
l'istanza del singleton e rendere synchronized il metodo di recupero.
|
Non basta rendere synchronized getSharedInstance() ?
--
chi sono e soprattutto chi non sono:
http://www.ilnomedeldominio.it
un piccolo programma per studenti universitari:
http://inutility.ilnomedeldominio.it
|
|
| Back to top |
|
 |
matish Guest
|
Posted: Wed Feb 25, 2004 12:00 pm Post subject: Re: 2 quesiti.. |
|
|
Dario wrote:
| Quote: | Piu' semplice e':
public class Connessione {
public static Connessione CURRENT = new Connessione();
private Connessione() {
...
}
}
|
Si ma se creare una connessione fosse costoso (in termini di risorse
sarebbe meglio crearla solo quando effettivamente necessaria.
--
chi sono e soprattutto chi non sono:
http://www.ilnomedeldominio.it
un piccolo programma per studenti universitari:
http://inutility.ilnomedeldominio.it
|
|
| Back to top |
|
 |
fiveMilesOut Guest
|
Posted: Wed Feb 25, 2004 1:10 pm Post subject: Re: 2 quesiti.. |
|
|
matish ha scritto:
| Quote: | Piu' semplice e':
public class Connessione {
public static Connessione CURRENT = new Connessione();
private Connessione() {
...
}
}
Si ma se creare una connessione fosse costoso (in termini di risorse
sarebbe meglio crearla solo quando effettivamente necessaria.
|
Non solo: se il costruttore può sollevare Exception, diventa difficile
l'inizializzazione:
public static Connessione CURRENT;
static {
try {
CURRENT = new Connessione();
} catch Exception e {
??? che fare ???
}
}
private Connessione() throws Exception {
...
}
Ciao
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad [email]abuse (AT) newsland (DOT) it[/email]
|
|
| Back to top |
|
 |
Lucio Benfante Guest
|
Posted: Wed Feb 25, 2004 2:07 pm Post subject: Re: 2 quesiti.. |
|
|
On Wed, 25 Feb 2004 12:59:57 +0100, matish wrote:
| Quote: | Lucio Benfante wrote:
Purtroppo la tua implementazione non e' thread-safe, in un'applicazione
Web rischi grosso. Meglio utilizzare un blocco statico per creare
l'istanza del singleton e rendere synchronized il metodo di recupero.
Non basta rendere synchronized getSharedInstance() ?
|
In realta' mi e' rimasta nella tastiera (e nella testa) parte della frase.
Completa potrebbe essere:
....e (se proprio necessario) rendere synchronized...
Il senso e' che in un'applicazione multithreading i metodi sinchronized
sono un collo di bottiglia, quindi si dovrebbe cercare di limitare il piu'
possibile la quantita' di codice synchronized. Utilizzando
un'inizializzatore statico, se il metodo getSharedInstance si limita a
restituire il reference all'istanza gia' creata, non c'e' bisogno che sia
synchronized, migliorando di molto le performance e l'utilizzabilita'
concorrente.
--
Lucio Benfante
Java User Group Padova: http://www.jugpadova.it
Brainbench MVP for Java 1: http://www.brainbench.com
MyTranscript: http://www.brainbench.com/transcript.jsp?pid=167064
|
|
| Back to top |
|
 |
Lucio Benfante Guest
|
Posted: Wed Feb 25, 2004 2:14 pm Post subject: Re: 2 quesiti.. |
|
|
On Wed, 25 Feb 2004 10:32:20 +0000, Montag wrote:
| Quote: | 1. Sto creando un'applicazione in JSP con Tomcat 4, e devo buttare da
qualche parte lo username e la password di un DB (ovviamente un posto
sicuro), che vengono poi utilizzati ad ogni richiesta di connessione. Avevo
pensato di settarle come delle costanti in un Bean, ma ho idea che qualcuno
mi sa consigliare un metodo più pulito (un file XML? quale? e con quale
sintassi?)
|
Il deployment descriptor dell'applicazione (web.xml) potrebbe essere un
buon posto, definendo un context-param. Dai un'occhiata al web.xml
d'esempio di Tomcat:
http://jakarta.apache.org/tomcat/tomcat-4.1-doc/appdev/web.xml.txt
--
Lucio Benfante
Java User Group Padova: http://www.jugpadova.it
Brainbench MVP for Java 1: http://www.brainbench.com
MyTranscript: http://www.brainbench.com/transcript.jsp?pid=167064
|
|
| Back to top |
|
 |
Lucio Benfante Guest
|
Posted: Wed Feb 25, 2004 2:22 pm Post subject: Re: 2 quesiti.. |
|
|
On Wed, 25 Feb 2004 13:00:54 +0100, matish wrote:
| Quote: | Dario wrote:
Piu' semplice e':
public class Connessione {
public static Connessione CURRENT = new Connessione();
private Connessione() {
...
}
}
Si ma se creare una connessione fosse costoso (in termini di risorse
sarebbe meglio crearla solo quando effettivamente necessaria.
|
Non sono completamente d'accordo: secondo me e' meglio crearla quando da'
meno fastidio. In questo caso (applicazione Web) e' meglio crearla prima,
piuttosto che l'utente debba aspettare quando richiede la pagina.
--
Lucio Benfante
Java User Group Padova: http://www.jugpadova.it
Brainbench MVP for Java 1: http://www.brainbench.com
MyTranscript: http://www.brainbench.com/transcript.jsp?pid=167064
|
|
| Back to top |
|
 |
Lucio Benfante Guest
|
Posted: Wed Feb 25, 2004 2:24 pm Post subject: Re: 2 quesiti.. |
|
|
On Wed, 25 Feb 2004 14:10:49 +0100, fiveMilesOut wrote:
| Quote: |
Non solo: se il costruttore può sollevare Exception, diventa difficile
l'inizializzazione:
public static Connessione CURRENT;
static {
try {
CURRENT = new Connessione();
} catch Exception e {
??? che fare ???
}
}
private Connessione() throws Exception {
...
}
Ciao
|
Infatti sarebbe meglio che l'attributo della classe fosse privato e che
ci sia un metodo pubblico per recuperarlo. In questo modo sarebbe quel
metodo eventualmente a sollevare un'eccezione.
--
Lucio Benfante
Java User Group Padova: http://www.jugpadova.it
Brainbench MVP for Java 1: http://www.brainbench.com
MyTranscript: http://www.brainbench.com/transcript.jsp?pid=167064
|
|
| Back to top |
|
 |
|