Я столкнулся с фрагментом кода, в котором класс реализации bean-компонента имеет аннотацию @TransactionManagement(TransactionManagementType.BEAN)
, в которой методы аннотируются с CMT @TransactionAttribute
. Действительно ли? Может ли EJB с сохранением BMT использовать аннотацию транзакций CMT? Каким будет поведение во время выполнения?Можно ли аннотировать метод с @TransactionAttribute в BMT EJB?
Хотя javadoc http://docs.oracle.com/javaee/6/api/javax/ejb/TransactionAttribute.html говорит, что «Он может быть указан только в случае, если используется транзакционная демаркация, управляемая контейнером». Указание на нее не вызывает ошибки компиляции. Означает ли это, что jvm просто игнорирует его во время выполнения?
@Stateless(mappedName = "Abc")
@Remote("AbcRemote.class")
@Local("AbcLocal.class")
@TransactionManagement(TransactionManagementType.BEAN)
public class AbcBean implements AbcLocal, AbcRemote{
@Resource
private UserTransaction utx;
@PersistenceUnit
private EntityManagerFactory emf;
@Override
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public Abc getAlpbabets(String name) {
EntityManager em = null;
try {
em = emf.createEntityManager();
}
catch (RuntimeException re) {
throw re;
}
finally {
}
}
}