0

春のサービスから、クライアントを介して外部システムを呼び出したいとしましょう。その呼び出しが失敗した場合 (チェックされていない例外がスローされた場合)、ログに記録し、DB の注文ステータスを更新し、ロールバックされるトランザクションの例外を再スローします。 ..

以下のサンプル コードがアンチパターンと見なされていることは知っていますが、これを実現するためのより良い方法は考えられません...何かコメントはありますか?

public class Service {

@Autowired(required = true)
private Client client;

@Autowired(required = true)
private DAO d;

@Transactional
@Override
public void register(String id) {

     try{
      client.invoke(id);//throws Client unchecked exception
     }
     catch (ClientException e){
         LOG.error (e);
         d.updateStatus(id,"failed");
         throw e;
      }
 }
}
4

1 に答える 1

0

トランザクションをロールバックするためだけに例外をスローする場合は、例外を消費して setRollbackOnly を呼び出す必要があります。

  TransactionInterceptor.currentTransactionStatus().setRollbackOnly();
于 2013-03-08T11:10:09.930 に答える