を強制終了する方法CXF webservice内通話呼び出し可能オブジェクトの今後の取消

StackOverflow https://stackoverflow.com/questions/1120783

質問

編集

この問いは少数の繰り返し現在までにどの学年の方でもお気軽に見通しの修正はあ背景情報の歴史とも試されます。


を使用していCompletionServiceとExecutorServiceは、呼び出し可能オブジェクトは、同時に複数の機能をいくつかの異なるwebサービスを通じてCXF発生するコードの..これらのサービスと異なる情報に向けてシングルセットの情報を使用していった。のサービスが失敗する対応のための長期間の時間は、例外がスローされた場合には,延命をお待ち合わせたセットの情報です。

こんに走行の全てのサービスの電話が同時に数分後によう"終了の通話となり、好ましくはログの中から、最もあてはまるもんでっかいずれかからの呼び出し可能オブジェクトまたはを投入することにより、詳細なります。

こちらは一部の高度の簡単なコードを明らかになっている既:

private Callable<List<Feature>> getXXXFeatures(final WiwsPortType port, 
final String accessionCode) {
    return new Callable<List<Feature>>() {
        @Override
        public List<Feature> call() throws Exception {
            List<Feature> features = new ArrayList<Feature>();
            //getXXXFeatures are methods of the WS Proxy
            //that can take anywhere from second to never to return
            for (RawFeature raw : port.getXXXFeatures(accessionCode)) {
                Feature ft = convertFeature(raw);
                features.add(ft);
            }
            if (Thread.currentThread().isInterrupted())
                log.error("XXX was interrupted");
            return features;
        }
    };
}

このコードが同時に開始しまWS話の場合

WiwsPortType port = new Wiws().getWiws();
List<Future<List<Feature>>> ftList = new ArrayList<Future<List<Feature>>>();
//Counting wrapper around CompletionService, 
    //so I could implement ccs.hasRemaining()
CountingCompletionService<List<Feature>> ccs = 
        new CountingCompletionService<List<Feature>>(threadpool);
ftList.add(ccs.submit(getXXXFeatures(port, accessionCode)));
ftList.add(ccs.submit(getYYYFeatures(port accessionCode)));
ftList.add(ccs.submit(getZZZFeatures(port, accessionCode)));

List<Feature> allFeatures = new ArrayList<Feature>();
while (ccs.hasRemaining()) {
            //Low for testing, eventually a little more lenient
    Future<List<Feature>> polled = ccs.poll(5, TimeUnit.SECONDS);
    if (polled != null)
        allFeatures.addAll(polled.get());
    else {
        //Still jobs remaining, but unresponsive: Cancel them all
        int jobsCanceled = 0;
        for (Future<List<Feature>> job : ftList)
            if (job.cancel(true))
                jobsCanceled++;
        log.error("Canceled {} feature jobs because they took too long",
                        jobsCanceled);
        break;
    }
}

の問題なんとこのコードは、Callablesなう場を待ってます。getXXXFeatures(...)を返し、何とか走れるようになってきた.としてからご覧いただけます if (Thread.currentThread().isInterrupted()) log.error("XXX was interrupted"); 算の割り込みフラグ 設定後のポートです。getFeaturesを返しますが、これは後に利用可能になりますWebservice電話が完了し、通常ではなく、もって中断した時はという。

誰でもできるので教えてないということのようにできますの走行CXF Webservice電話また、一定期間後、登録情報私の利用していますか?

ではティム-

役に立ちましたか?

解決

編集3 新しい答えです。

見てこれらのオプション:

  • ポスト問題のApache CXFとしての機能の要求
  • 固定ACXF自分なも特徴です。
  • 見のためのオプションのための非同期WSコの支援内のApache CXF
  • 検討の異なるWSプロバイダ(JAX-WS?)
  • なおWS電話を用いてRESTful APIを利用の場合はサービスに対応していますので(例:平HTTP要求パラメータ)
  • のためのüber専門家のみ使用真のスレッド/スレッドグループおよび殺のスレッドと便利に。

他のヒント

CXFのドキュメントは、HttpURLConnectionの上の読み取りタイムアウトを設定するためのいくつかの命令を持っています: http://cwiki.apache.org/CXF20DOC/クライアントのhttp輸送-含む-SSL-support.htmlする

これはおそらくあなたのニーズを満たすでしょう。サーバーが時間内に応答しない場合、例外が発生し、呼び出し可能では例外になるだろう。 (代わりにハングアップすることがあるバグがあることを除いては、2.2.2またはそれが今ちょうどSNAPSHOTSでいた場合に固定された場合。私は覚えていないことができます。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top