Метод EJB (с использованием СМТ), который обновляет объект, поставляемый:Позволить презентационный слой (JSF) обрабатывать бизнес-исключения из службы слоя (EJB)
@Override
@SuppressWarnings("unchecked")
public boolean update(Entity entity) throws OptimisticLockException {
// Code to merge the entity.
return true;
}
Это забросить javax.persistence.OptimisticLockException
, если обнаруживается одновременное обновление который должен обрабатываться именно вызывающим (управляемый компонент).
public void onRowEdit(RowEditEvent event) {
try {
service.update((Entity) event.getObject())
} catch(OptimisticLockException e) {
// Add a user-friendly faces message.
}
}
Но делать это делает дополнительную зависимость от javax.persistence
API на слой обязательной презентации, которая является дизайн запах приводит к жесткой муфтой.
В каком исключении оно должно быть обернуто так, чтобы проблема с плотным соединением могла быть опущена полностью? Или существует стандартный способ справиться с этим исключением, которое, в свою очередь, не приводит к принудительному выполнению зависимостей уровня сервиса на уровне презентации?
Кстати, я нашел неудобным, чтобы поймать это исключение в EJB (на самом уровне сервиса), а затем вернуть значение флага клиенту (JSF).
Это немного не по теме, и, возможно, я пойду с отдельным вопросом, если я не могу получить решение. У меня есть тестовое приложение, содержащее только перехватчик ('javax.interceptor.Interceptor') с конфигурациями, упомянутыми здесь и одним EJB. Я всегда получаю исключение при развертывании - 'java.lang.IllegalStateException: привязка перехватчика содержит имя класса перехватчика = com.example.MyInterceptor, который не определен как перехватчик'. Что может быть вероятной причиной с первого взгляда? – Tiny
См. Обновленный ответ для явной регистрации. Я думаю, GF4 не сделает этого, если нет '@ InterceptorBinding'. – BalusC
Это работает сейчас. Благодарю.(Я не ожидал явной регистрации перехватчика таким образом). – Tiny