jboss игнорирует require_new после перезапуска

Я использую jboss и cmt и видел странное поведение при использовании require_new в методе ejb, который я зацикливал на другом bean-компоненте для вставки некоторых записей. Я вижу, что периодически после перезапуска jboss операции в методе не фиксируются в db после завершения метода. Итак, я попытался использовать TransactionSynchronizationRegistry и обнаружил, что когда данные не зафиксированы, я на самом деле не получаю новая транзакция каждый раз, когда метод вводится. Кто-нибудь, кто слышал о jboss, действующем таким образом? Я использую ejb, jboss, jpa, Hibernate, CMT.

1 ответ

Решение

Итак, я наконец-то решил эту проблему. Я использовал этот отличный пост в блоге

http://piotrnowicki.com/2011/11/am-i-in-the-same-transaction-am-i-using-the-same-persistencecontext/

чтобы убедиться, что я действительно был в той же транзакции после ввода аннотированного метода REQUIRES_NEW. Итак, я понял, что JBoss периодически игнорировал аннотацию и по умолчанию вместо этого потребовал REQUIRED. Это было потому, что несколько классов реализовали один и тот же интерфейс. Так что я упростил его, так что теперь у меня есть один интерфейс, аннотированный @Local и один реализующий класс, в котором есть аннотированный метод REQUIRES_NEW. Я понимаю, что в данном случае это был наш код, который был неправильным, так что это не совсем ошибка в Jboss-способе обработки транзакций. Но действительно странно, что в журналах не так много предупреждений о том, что существует состояние гонки. Я мог бы перезапустить Jboss и получить другое поведение, чем до перезапуска. Я думаю, что это странно. Я не нашел много информации о том, что это может быть проблемой после поиска в Google, поэтому я надеюсь, что этот ответ может сэкономить время для кого-то еще.

Редактировать: Речь идет не о нескольких реализующих классах, а об объявлении всех методов в аннотированном интерфейсе @Local, иначе JBoss может игнорировать атрибуты

Другие вопросы по тегам