У меня есть следующий фрагмент класса, из которого я хотел бы удалить повторяющийся код ведения журнала и перенести его в Interceptor с помощью AOP CDI.Перехват Исключения для регистрации с AOP на CDI в Java EE 7
/**
* Javadoc omitted
*/
public abstract class JpaDao<T extends LongIdentifiable> implements
GenericDao<T> {
@Override
@Transactional
public Long persist(T type) throws GeneralPersistenceException {
if (type == null) {
throw new GeneralPersistenceException("Can't persist null");
}
try {
entityManager.persist(type);
return type.getId();
} catch (PersistenceException e) {
String message = "Failed to persist an entity";
logger.error(message, e);
throw new GeneralPersistenceException(message, e);
}
}
@Override
@Transactional
public T merge(T type) throws GeneralPersistenceException {
if (type == null) {
throw new GeneralPersistenceException("Can't merge null");
}
try {
T mergedType = entityManager.merge(type);
return mergedType;
} catch (PersistenceException e) {
String message = "Failed to merge an entity";
logger.error(message, e);
throw new GeneralPersistenceException(message, e);
}
}
}
Обратите внимание на фрагмент кода ниже, который повторяется в persist
е merge
методы
} catch (PersistenceException e) {
String message = "Failed to persist an entity";
logger.error(message, e);
throw new GeneralPersistenceException(message, e);
}
кандидат код, чтобы заменить фрагмент кода выше, является следующее:
} catch (PersistenceException e) {
throw new GeneralPersistenceException("Failed to persist an entity", e);
}
Другими словами, Мне бы хотелось, чтобы каждый раз, когда вызывается GeneralPersistenceException
, записывается сообщение журнала. Мое исключение:
public class GeneralPersistenceException extends Exception {
private static final long serialVersionUID = -6057737927996676949L;
public GeneralPersistenceException() {
}
public GeneralPersistenceException(String message) {
super(message);
}
public GeneralPersistenceException(String message, Throwable cause) {
super(message, cause);
}
public GeneralPersistenceException(Throwable cause) {
super(cause);
}
}
Как вы могли видеть, в Exception есть только конструкторы. Учитывая этот сценарий, у меня есть следующие вопросы:
- Лучшая стратегия, чтобы решить эту проблему, в совместимом приложении Java EE 7, использует АОП с CDI?
- В случае, если это АОП, следует ли перехватить
GeneralPersistenceException
? - Возможно ли перехватить конструкторы
GeneralPersistenceException
или только методы (которые еще не существуют)? - Есть ли что-то уже для этой цели, и я изобретаю колесо?
Заранее спасибо.
Возможно, что Exception Control от DeltaSpike - это то, что вы ищете? http://deltaspike.apache.org/documentation/core.html#ExceptionControl –
Это хорошая альтернатива, но это не то, что я ищу. Я действительно хочу предоставить такую обработку исключений, используя AOP CDI или все, что уже предоставлено спецификацией Java EE. –
Ваш вопрос: «Что-то уже реализовано для этой цели, и я изобретаю колесо?» Я просто указал на существующее колесо для вас. –