0
我要回滾上的工作絕對沒例外我的交易。但是現在我不想回滾我所做的所有動作。 例如,我的應用程序的請求被處理,並在多個數據庫上的幾個數據庫操作完成。如果發生異常時我想回滾我的數據庫之一的一切行動,只有2第二個數據庫上的操作。我怎樣才能做到這一點?我總是最後滾動bback整個交易...JTA如何不回滾任何東西?
我試過到目前爲止:
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public <Param> GenericResponseMsg executeRequest (Param myParam) {
entityManager1.persist(someEntity); // rollback
...
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void addFailedRequestToDatabase() {
entityManager2.persist(otherEntity); // do not rollback
...
}
我也試圖與
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
其註釋類,但這會導致以下例外:
Internal Exception: java.sql.SQLException: Connection can not be used while enlisted in another transaction
Error Code: 0
任何想法?我莫名其妙地卡住,不知道該怎麼辦了......
編輯: 這是你要的工作流程:
@Stateless
@Path("my/path")
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class MyRessource {
@EJB
private MyEJB myEjb;
@POST
@Path("method/Path")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public GenericResponseMsg doSomeStuff(Param param) throws Exception {
try {
return myEjb.executeRequest(param);
} catch(Throwable throwable) {
myEjb.addFailedRequestToDatabase();
throw throwable;
}
}
}
與REQUIRES_NEW測試應該工作,如果你正確地調用方法。這個測試如何看待更完整的流程?所有方法如何以及在哪裏被調用? – Gimby
看來,這是OpenEJB的一個問題。我直接在我的野蠻服務器上嘗試了我的代碼,並按預期工作。該錯誤只發生在openejb中 – Goldfish