Проблема заключалась не в использовании менеджера сущностей с внедрением суперкласса, а в вызове другого метода EJB: например,
@Stateless
@LocalBean
public class MyBean extends MySuperBean
{
@EJB
com.example.project.MyOtherBean otherBean;
public boolean myService(String userName, MyEntity entity)
{
if(otherBean.checkAuthority(userName))
{
super.insert(entity);
}
}
}
Я использовал этот шаблон, когда OtherBean
не был компонентом, а checkAuthority
был статическим методом с использованием (не JTA) EntityManagerFactory
. Затем я изменил OtherBean
, чтобы расширить MySuperBean
тоже. Я думаю, что в этом случае, когда OtherBean
заканчивается checkAuthority
, JTA завершает транзакцию и MySuperBean
insert
не может найти транзакцию для сохранения сущности. Понятно, что EJB без состояния не позволяют другим EJB продолжать транзакцию.
Как Паскаль, я изначально думал, что внедрение не работает с наследованием, но эта проблема продолжалась, когда я напрямую вызывал em.persist()
в подклассе. После этого я наконец смог проверить другие возможные причины.
Спасибо за все комментарии.