2013-06-20 4 views
2

Я прочитал пару вопросов здесь относительно OptimisticLockException с JPA, используемым в сессионном компоненте без состояния. Это брошено, но не там, где я этого ожидаю.Как поймать OptimisticLockException в JPA

Вот код, где я ожидаю, чтобы получить исключение:

  try 
      { 
       productFacade.edit(product); 
      } 
      catch(Exception { 
       return "lock"; 
      } 

productFacade генерируются с NetBeans и является EJB с локальным интерфейсом, об этом, это реализует AbstractFacade абстрактного класс. Насколько я понимаю, это связано с транзакциями в JPA. Поскольку исключение вызывается после того, как метод, содержащий этот фрагмент кода, остается, а не после вызова edit(). Где я должен обрабатывать исключение?

Кроме того, мне понадобится механизм транзакции позже, потому что мне нужно будет обновить несколько продуктов (или нет, если некоторые заблокированы). Я нашел несколько примеров кода, но это оставляет мне интересно, как мне работать с транзакциями?

+0

Можете ли вы добавить больше кода, не отображается какой-либо соответствующий код, как управляются транзакции, выполняет ли следующий метод в рамках одной и той же транзакции и т. Д. –

+0

Я использую транзакции JTA и Контейнера. Я попытался переключиться на транзакции с контролируемым бином и управлять своими собственными транзакциями, но это действительно не помогло. Как проверить, выполняется ли следующий метод в рамках одной транзакции? –

+0

Как уже упоминалось, обновите сообщение соответствующим кодом, помогите всем. –

ответ

4

Ошибка блокировки не будет выдана до совершения транзакции. Таким образом, вам нужно будет обрабатывать его за пределами SessionBean или использовать транзакцию, управляемую контейнером.

Или вы можете просто вызвать flush() на вашем JPA EntityManager, тогда будет сброшена ошибка.

+0

Я использую транзакции, управляемые контейнером. Где я могу уловить исключение из сеансового компонента, на клиенте? С транзакциями, управляемыми контейнерами, когда действительно начинаются и заканчиваются транзакции? Если я сделаю несколько слияний в одном методе, они будут считаться транзакцией после завершения метода? –