PartnerConnection
そのため、SalesForce クラウド プラットフォームに DML 操作を提供するクラス ( ) を生成しました。SalesForce またはコードを実行しているシステムとの接続の問題が原因で、長期にわたる統合プロセスが失敗するという問題がありました。
この問題を解決するために、PartnerConnection
クラスを an と名付けて拡張しましたAdvancedPartnerConnection
。のメソッドをオーバーライドし、 try/catch/retryロジックでラップするAdvancedPartnerConnection
だけです。PartnerConnection
@Override
public QueryResult query(String queryString) throws ConnectionException{
int attempt = 0;
ConnectionException lastException = null;
while(true){
if(attempt < maxAttempts){ //maxAttempts constant
if(lastException != null){
try {
//exponentially increase wait times
Long sleepTime =(long) Math.pow(sleepBase, attempt) * 300;
Thread.sleep(sleepTime);
} catch (InterruptedException e1) {
// something bad has happen, throw the connection exception
throw lastException;
}
}
attempt ++;
try{
//call super class method
return super.query(queryString);
}catch(ConnectionException e){
lastException = e;
}
}else{
throw lastException;
}
}
}
私はこれをいくつかのスーパー クラス メソッドに実装しましたが、唯一の違いは、呼び出されるメソッドとそのパラメーターです。すべてのメソッドで一貫性を保ちたいので、再試行ロジックのいずれかを変更することにした場合、それは本当に苦痛になりました。
再試行ロジックを別のクラスまたはメソッドに抽出して、関数呼び出しを渡す方法を誰かが持っていますか? 私は.NETでこのようなことをしましたが、Javaでそれを行う方法がわかりません.