Newsgroup: it.comp.java
Titolo: 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

 grazie
prego!
Ciao
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 
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

 }
Piu' semplice e':
public class Connessione {
    public static Connessione CURRENT = new Connessione();
    private Connessione() {
       ...
    }
}

 ha scritto nel messaggio
news:UQ__b.26493$IT2.8...@news4.tin.it...


 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

 }
Si ma se creare una connessione fosse costoso (in termini di risorse :)
sarebbe meglio crearla solo quando effettivamente necessaria.


 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 {
    ...


 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.


 
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


 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.


 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.
