2016-01-03 5 views
5

У меня есть простой webapp, который приобретает соединение с datasource tomcat JDBC. Чтобы отслеживать использование соединения, я планирую внедрить протоколирование при открытии и закрытии соединения. Журналирование должно было напечатать что-то вроде этого.Как однозначно назвать объект

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 

Мои открытые и закрытые методы:

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); 
} 

Здесь я использую connection.toString() в качестве уникального имени соединения в журналах. Но я хочу знать, есть ли лучший способ сделать это.

+1

Объект, который вы пытаетесь распечатать? Кажется, что класс, который вы пытаетесь распечатать, не переопределил 'toString()'. –

+0

Я не пытаюсь напечатать любой объект. Я просто хочу показать ** имя объекта Connection **, которое я открыл или закрыл. –

+0

а вы публикуете код .. –

ответ

2

Просто используйте стандартную реализацию toString() на суперклассе Object.

Это уже делает это для вас:

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

toHexString(hashCode()) даст вам уникальный идентификатор прямо там. И это гарантирует JVM, что это будет уникальная ценность.

+0

Я также планировал этот подход, а затем прочитал этот документ http://eclipsesource.com/blogs/2012/09/04/the-3-things-you-should-know -about-hashcode/И в соответствии с этим источником hashCode не должен быть уникальным для каждого объекта. Вот где мне пришлось искать другие варианты. –

+0

@RajaAnbazhagan имеет шансы на существование двух 'hashCode()' s для двух подключений, которые одновременно открываются одинаково, рядом с нолем. Если вы хотите выйти за борт и сделать его на 100% уникальным, сделайте что-нибудь вроде 'hashCode() + '-' + System.nanoTime()'. Я могу использовать 'hashCode()' как уникальный идентификатор, который отлично подходит при выполнении отладки jdbc в масштабе предприятия в журналах –

+0

Наконец, решил перейти с hexString метода hashcode. –

 Смежные вопросы

  • Нет связанных вопросов^_^