私は、オンラインリソースを通じてEJBトランザクションに関するすべてを読みました。私がそれを適用したとき、説明どおりに動作していません。私がやろうとしている何EJBトランザクション
は、私はそのトランザクション注釈
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
あるステートレスEJBメソッドを持っていると私は、トランザクション別のステートレスEJBでメソッドを呼び出すためにしようとしている
です注釈は、ここで私は新しいトランザクションでは、その注釈
である私の発信者の方法で作成されたと思ったものを上記で@TransactionAttribute(TransactionAttributeType.REQUIRED).
です
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);
}
}
}
新しいトランザクションが作成されたことをどのように知っていますか? 'MANDATORY'に対して' REQUIRED'を変更し、例外がスローされたかどうかを調べてください。そうでない場合、トランザクションは実行されます。 – Geinmachi