2016-01-03 14 views
5

Ho una semplice webapp che acquisisce la connessione dall'origine dati di tomcat JDBC. Per monitorare l'utilizzo della connessione, sto pianificando di implementare la registrazione durante l'apertura e la chiusura della connessione. Il logging dovrebbe stampare qualcosa di simile.Come denominare un oggetto univoco

20151230143623.947[Thread-3] INFO [DataSourceManager:19] Opened connection identified by id : BlahBlahBlah1 
20151230143623.947[Thread-3] INFO [DataSourceManager:19] Closed connection identified by id : BlahBlahBlah1 

I miei metodi di apertura e chiusura sono come questo.

Connection openConnection(String JNDILookupName) throws Exception { 
    Connection connection = DataSourceManager.getConnection(JNDILookupName); 
    logDBOperation("Opened", connection.toString()); 
    return connection; 
} 
Connection closeConnection(String JNDILookupName) throws Exception { 
    connection.close(); 
    logDBOperation("Closed", connection.toString()); 
} 
void logDBOperation(String operation, String connecitonName){ 
    logger.info(operation+" connection identified by id : "+connectionName); 
} 

Qui sto usando connection.toString() come nome univoco del collegamento nei registri. Ma voglio sapere se c'è un modo migliore per farlo.

+1

quale oggetto si sta tentando di stampare? Sembra che la classe che stai tentando di stampare non abbia scavalcato 'toString()'. –

+0

Non sto provando a stampare Qualsiasi oggetto. Voglio solo mostrare il ** nome dell'oggetto Connection ** che ho aperto o chiuso. –

+0

e si pubblica il codice .. –

risposta

2

Basta usare l'implementazione di default toString() sulla superclasse Object.

Lo fa già questo per voi:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

Il toHexString(hashCode()) vi darà l'ID univoco proprio lì. E questa è una garanzia della JVM che sarà un valore unico.

+0

Avevo in programma anche questo approccio e poi ho letto questo documento http://eclipsesource.com/blogs/2012/09/04/the-3-things-you-should-know -about-hashcode/E come per questa sorgente hashCode non deve essere univoco per ogni oggetto. Ecco dove ho dovuto cercare altre opzioni. –

+0

@RajaAnbazhagan le possibilità di due 'hashCode()' s per due connessioni che sono aperte nello stesso momento in cui lo stesso è vicino a zero. Se vuoi andare fuori bordo e renderlo unico al 100%, fai qualcosa come 'hashCode() + '-' + System.nanoTime()'. Sono in grado di usare 'hashCode()' come un ID univoco bene quando eseguo il debugging in jdbc su scala aziendale nei registri –

+0

Finalmente ho deciso di andare con l'hexString dell'approccio hashcode. –