■質問日: |
2003/06/03 |
■最終更新日: |
2007/06/13 |
■質問内容: |
「最終更新日時」「最終更新ユーザID」を、SELECT文及び更新時のキー項目に含めることにより排他制御を行っていますが、排他エラーであることを感知するにはどのようにすればいいでしょうか? |
■回答内容: |
例外のエラーメッセージを取得して、そのエラーメッセージがWDCの排他エラーと同じかどうかで判断します。 (WDCの排他エラーはjp.co.tenartni.data.Msg. ERROR_RESOLVING[]で定義されています。) |
■添付資料: |
サンプルコード (HtmlForm継承クラスに組み込んだ場合の例) public HtmlForm execute(・・・) throws Exception { try { ・・・ return super.execute(requestParamNames, requestParamValues); } catch (DataHandleException ex) { ・・・ // 排他エラーが発生したか? if (exclusiveUpdateErrorOccured(ex)) { this.addErrorMessage("他の人により更新・削除が行われています。ひとつ前の画面に戻ってから再操作してください。"); return this; } ・・・ } } ・・・ /** * 排他制御エラーか(他の人によって更新/削除されていたか). */ private boolean exclusiveUpdateErrorOccured(Exception ex) { boolean exclusiveUpdateError = false; Exception e = ex; int size = jp.co.tenartni.data.Msg.ERROR_RESOLVING.length; while (e instanceof WWBException) { String errmsg = e.getLocalizedMessage(); //System.out.println("errmsg="+errmsg); for (int i=0; i // WDCの排他エラーのメッセージと同じか? if (errmsg.equals(jp.co.tenartni.data.Msg.ERROR_RESOLVING[i])) { exclusiveUpdateError = true; break; } } if (exclusiveUpdateError) break; e = ((WWBException)e).getException(); } return exclusiveUpdateError; } |