Я прочитал все о транзакциях EJB через интернет-ресурсы, и когда я его применил, он не работает, как объяснено.EJB Transaction
То, что я пытаюсь сделать, это
У меня есть лица без метода EJB, чья сделка аннотация
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
и я пытаюсь вызвать метод в другом безгосударственного EJB, чья сделка аннотация
@TransactionAttribute(TransactionAttributeType.REQUIRED).
Вот в сверх того, что я думал, что новая сделка создается в моем методе Caller которого аннотации
TransactionAttributeType.REQUIRES_NEW
и когда я называю второй метод, для которого аннотации
TransactionAttributeType.REQUIRED
предыдущая транзакция продолжается, но в моем случае новая транзакция создается во втором методе.
Кто-нибудь может мне помочь, что происходит здесь, спасибо заранее.
Я разместил свой код ниже.
EOutboundHandler.java
@Stateless
@EJB(name = "EOutboundHandler")
public class EOutboundHandler {
@EJB
private EData eData;
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public void Process() {
while (ProcessRequests()) {
}
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
private boolean ProcessRequests() {
EQueue eQueue = eData.searchEQ();
}
}
EData.java
@Stateless
@EJB(name="EData")
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class EData {
@PersistenceContext(unitName=EDataConstants.PERSISTANCE_UNIT_NAME)
private EntityManager em;
public EdiTxnQ searchEdiTxnQForSendMsg()
{
String searchSql =
"SELECT * FROM dbo.EQueue with (updlock, readpast) Where id = 1";
Query searchQuery = em.createNativeQuery(searchSql, EdiTxnQ.class);
List<EdiTxnQ> list = searchQuery.getResultList();
if (list.isEmpty())
{
return null;
}
else
{
return (EdiTxnQ)list.get(0);
}
}
}
Как вы знаете, что создана новая транзакция? Попробуйте изменить 'REQUIRED' для' MANDATORY' и проверить, не выбрано ли исключение. Если это не так, транзакция продолжается. – Geinmachi