公司最近全面轉用 Java, 現正對 EJB 的特性進行測試.
本人寫了一個簡單的 Session Facade 測試程式, 需要同時更新多個 Entity.try {
UpdateEntity_1();
UpdateEntity_2();
UpdateEntity_3();
UpdateEntity_4();
} catch (Exception e}
// Do something here
}基於設計上的要求, UpdateEntity_1 必須確定成功才可執行餘下的更新. 而 4 個 Entity 必須在同一 transaction 內完成.在內部測試時發現, 如果 UpdateEntity_1 出現 System Error (例如 Duplication Key - 只為了測試系統錯誤而強行加入的, 正常情況下程式會先測試了.), 並不會進入 catch 內, 而是直接執行其他的更新.查看 EJB 的書本發覺, System Error 是不能在 EJB 中截取, 而 container 只會把錯誤傳給 caller. 最大問題是在錯誤發生後, 並不會即時得知, 必須執行 flush() 或者是整個程或完結. 因此, 不能在 UpdateEntity_1 出現 System Error 後, 停止執行其他更新.
請問如何可以在更新 Entity_1 後, 即時測出 System Error 而避免進行其他更新? 而多個更新必須在同一個 transaction 中完成, 而確保資料的一致.謝謝大家幫忙.
本人寫了一個簡單的 Session Facade 測試程式, 需要同時更新多個 Entity.try {
UpdateEntity_1();
UpdateEntity_2();
UpdateEntity_3();
UpdateEntity_4();
} catch (Exception e}
// Do something here
}基於設計上的要求, UpdateEntity_1 必須確定成功才可執行餘下的更新. 而 4 個 Entity 必須在同一 transaction 內完成.在內部測試時發現, 如果 UpdateEntity_1 出現 System Error (例如 Duplication Key - 只為了測試系統錯誤而強行加入的, 正常情況下程式會先測試了.), 並不會進入 catch 內, 而是直接執行其他的更新.查看 EJB 的書本發覺, System Error 是不能在 EJB 中截取, 而 container 只會把錯誤傳給 caller. 最大問題是在錯誤發生後, 並不會即時得知, 必須執行 flush() 或者是整個程或完結. 因此, 不能在 UpdateEntity_1 出現 System Error 後, 停止執行其他更新.
請問如何可以在更新 Entity_1 後, 即時測出 System Error 而避免進行其他更新? 而多個更新必須在同一個 transaction 中完成, 而確保資料的一致.謝謝大家幫忙.
解决方案 »
- 播放器在服务器端
- primefaces中selectOneMenu转换器的问题,请教大侠
- 关于JSP的问题
- 请问Turbine的action中怎样取得JSP中的pageContext啊?谢谢啦,问了很久的啊!
- STRUTS框架不能创建FORMBEAN错误
- 关于一个ireport中变量的问题
- struts问题,怎么获值呢???
- 熟悉RosettaNet的高手请进!
- EJB的问题
- hibernate在hibernate.cfg.xml中只配置一个User.hbm.xml映射文件时没问题,但配置多个就报错
- DataInputStream关闭的问题
- nested exception is org.hibernate.MappingException: Named query not known:
UpdateEntity_1();
ReadEntity_1();
UpdateEntity_2();
ReadEntity_2();
UpdateEntity_3();
ReadEntity_3();
UpdateEntity_4();
ReadEntity_4();
} catch (Exception e}
// Do something here
} 每次 presist 完就嘗試 read 剛才的 object, 系統就會即時偵試之前的 presist 是否成功, 如有錯誤就會即時產生 exception.
但...感覺不太好, 要依靠之後的 statement 去偵測自己的錯誤.詢問了一些有經驗的人, 都是沒有進行偵試, 讓 container 先執行整個程序, 然後離開時才產生 exception, 由 caller 自己去截取 exception. 由於 container 進行 rollback 時, 不論是那裡出了問題, 都可以完全 rollback, 所以從 data 統一性的角度是不會出現問題的. 但就會執行了一些不必要的指令.請問大家有需要同時更新幾個 entity 的嗎? 大家如何進行測試當中的系統問題?