Ich lese alles über die EJB-Transaktionen durch Online-Ressourcen und wenn ich es anwendete, funktioniert es nicht wie erklärt.EJB-Transaktion
Was ich versuche zu tun,
Ich habe eine stateless EJB-Methode, deren Transaktions Annotation ist
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
und ich versuche, eine Methode in einem anderen stateless EJB aufzurufen, deren Transaktions Anmerkung ist
@TransactionAttribute(TransactionAttributeType.REQUIRED).
Hier oben, was ich dachte, ist eine neue Transaktion in meiner Caller-Methode erstellt wird, deren Anmerkung ist
TransactionAttributeType.REQUIRES_NEW
und wenn ich rufe eine zweite Methode, deren Anmerkung wird
TransactionAttributeType.REQUIRED
die vorherige Transaktion trägt, aber in meinem Fall eine neue Transaktion in dem zweiten Verfahren hergestellt.
Kann mir jemand helfen, was hier los ist, danke im Voraus.
Ich habe meinen Code unten gepostet.
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);
}
}
}
Woher wissen Sie, dass neue Transaktion erstellt wird? Ändern Sie 'REQUIRED' für' MANDATORY' und prüfen Sie, ob eine Ausnahme ausgelöst wird. Wenn dies nicht der Fall ist, wird die Transaktion fortgesetzt. – Geinmachi