- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
@Override
public void afterPersistenceInit() {
val conn = emProvider.get().unwrap(Connection.class);
try {
log.info("Transaction isolation level: {}", getLevelString(conn.getTransactionIsolation()));
} catch (final SQLException e) {
log.error("Error getting transaction isolation level", e);
}
}
private String getLevelString(final int isolationLevel) {
// Poor man's enums. Use reflection to find a constant with the given value
try {
for (val maybeLevelConstant: Connection.class.getDeclaredFields()) {
if (maybeLevelConstant.getType() == int.class && maybeLevelConstant.getName().startsWith("TRANSACTION_")
&& maybeLevelConstant.getInt(null) == isolationLevel) {
return maybeLevelConstant.getName();
}
}
} catch (final IllegalArgumentException | IllegalAccessException e) {
return "UNKNOWN";
}
return "UNKNOWN";
}
Ищем рефлексией константу с нужным значением. И всё для того, чтобы напечатать её в логе. Вот что крест животворящий отсутствие энумов в legacy API делает.
Lure Of Chaos 23.10.2014 09:44 # +2
и, поскольку это константы, имеет смысл использовать массив или карту, не рефлексируя на каждом логе (представляю, сколько ресурсов отъедает логирование).
и еще мне нравится логирование ошибок логирования. особенно веселыми бывают случаи, когда логгер не сумел инициализироваться, и это пытаются логировать им же.
someone 23.10.2014 11:20 # +1
> и, поскольку это константы, имеет смысл использовать массив или карту, не рефлексируя на каждом логе (представляю, сколько ресурсов отъедает логирование).
Этот код вызывается один раз при запуске сервера. А константы определены в java.sql.Connection. Если бы они были определены у нас, они были бы энумом. :)
> и еще мне нравится логирование ошибок логирования. особенно веселыми бывают случаи, когда логгер не сумел инициализироваться, и это пытаются логировать им же.
Это не ошибка логирования, а ошибка получения данных от JDBC-соединения. Ловится-то SQLException.
anonimb84a2f6fd141 23.10.2014 11:31 # −7
Lure Of Chaos 23.10.2014 12:16 # 0
http://docs.oracle.com/javase/6/docs/api/constant-values.html#java.sql.Connection.TRANSACTION_NONE
константы есть, а энум можно свой сварганить, кстати. и не надо никакой рефлексии каждый старт
roman-kashitsyn 23.10.2014 10:02 # 0
Lure Of Chaos 23.10.2014 10:08 # 0
а то придется городить автобоксинг-огород, брр.