3

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でそれを行う方法がわかりません.

4

1 に答える 1