在GAE上使用JDO,我使用了一個簡單的數據庫事務代碼塊,如下所示。如何從java.sql.SQLException重試/恢復:併發修改
什麼是從拋出的java.sql.SQLException中重試/恢復的好方法:併發修改?
private final Provider pmp; ...
PersistenceManager pm = pmp.get(); try { pm.currentTransaction()。begin();
MyObject myObject = pm.getObjectById(MyObject.class,id);
pm.currentTransaction()。commit();
}最後{
如果(pm.currentTransaction()isActive()。){ log.severe(this.getClass()的getName()+ 「捕獲數據庫異常。」); pm.currentTransaction()。rollback(); } }
感謝您建議仔細查看語義。 仔細觀察棧跟蹤和javadoc。 從commit()拋出異常,java.sql.exception嵌套在JDOCanRetryException的子類javax.jdo.JDODataStoreException中 http://db.apache.org/jdo/api23/apidocs/ javax/jdo/JDODataStoreException.html 現在是否有辦法捕獲此異常並重試該操作而不將所有變量導出到單個參數塊中? – Stevko 2010-02-03 00:00:53
我仍然覺得這個異常不應該拋出。您的序列化級別是否設置正確?你不能嘗試提交,直到currentTransaction()。isActive()? – sibidiba 2010-02-07 17:17:59