[Seasar-user:17064] S2Tx 処理結果を登録したい

溝口 [E-MAIL ADDRESS DELETED]
2009年 3月 17日 (火) 08:30:52 JST


いつもお世話になっています。

環境
S2remotingで、サーバーでWARM deployのサービスを起動して
います。customizer.diconでserviceにj2ee.requiredTxを設定して
トランザクションをかけています。
データベースアクセスにはS2Daoを使用しています。

今回、新たに発生した処理で、
ある複数件のレコードをデータベースへ登録するという物があり、
登録結果(エラーの場合理由)もデータベースに保存するという
物があります。

下のような感じの処理が書いてあります。
public class HogeServiceImpl implements HogeService{
  public LogDao logDao;
  public TargetDao targetDao;
  public TargetDxo targetDxo;

  public void exec(List<HogeArg> argList){
    Integer errorRowNumber = null;
    Integer errorId = null;
    for(int i=0;i<argList.size();i++){
      HogeArg hogeArg = argList.get(i);
      try{
        validateRecord(hogeArg);
        targetDao.insert(targetDxo.convert(hogeArg));
      }catch(ValidateException ve){
        errorId = ve.getErrorId;
        errorRowNumber = i;
        //ここどうする?
        break;
      }
    }

    LogEntity logEntity = new LogEntity();
    log.setRowCount(argList.size());
    log.setErrorRowNumber(errorRowNumber);
    log.setResult(errorId);
    logDao.insert(log);
  }
}

やりたいこと、validateRecordでValidateExceptionが発生した場合、
targetテーブルにインサートしたデータを消したい。
ログテーブルに書かれるデータは残したい。

このような場合、どの様にサービスを組むべきなのかご教示欲しく
mlに縋ってみました。

クライアントから見ると、Excelを取り込み、フォーマット形式
チェックを行い、ArgListに各Excelのcellの値を詰め、サーバーに
送る。
サーバーでは、argListと処理結果を登録する。サーバー側で
エラーがあった場合、処理結果のみを登録する。
クライアントで処理結果照会画面で、処理結果を照会する。


Seasar-user メーリングリストの案内