- 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 делает.
        
        
и, поскольку это константы, имеет смысл использовать массив или карту, не рефлексируя на каждом логе (представляю, сколько ресурсов отъедает логирование).
и еще мне нравится логирование ошибок логирования. особенно веселыми бывают случаи, когда логгер не сумел инициализироваться, и это пытаются логировать им же.
> и, поскольку это константы, имеет смысл использовать массив или карту, не рефлексируя на каждом логе (представляю, сколько ресурсов отъедает логирование).
Этот код вызывается один раз при запуске сервера. А константы определены в java.sql.Connection. Если бы они были определены у нас, они были бы энумом. :)
> и еще мне нравится логирование ошибок логирования. особенно веселыми бывают случаи, когда логгер не сумел инициализироваться, и это пытаются логировать им же.
Это не ошибка логирования, а ошибка получения данных от JDBC-соединения. Ловится-то SQLException.
http://docs.oracle.com/javase/6/docs/api/constant-values.html#java.sql.Connection.TRANSACTION_NONE
константы есть, а энум можно свой сварганить, кстати. и не надо никакой рефлексии каждый старт
а то придется городить автобоксинг-огород, брр.