7

OSBも実行している多数のweblogicノードで複製されたキャッシュを実行しています。キャッシュは、サーバーをスタートアップクラスとして開始します。オブジェクトの非常に単純なキャッシュがあり、ブール属性「使用可能」でオブジェクトが使用されているかどうかを追跡するだけです。

OSBから、同じクラスにJavaコールアウトを作成しています。このクラスは、オブジェクトを使用不可としてマークし、Thread.sleep(31000)を実行するプロセッサを使用して、キャッシュで「invoke」を呼び出します。これは、後で追加したいいくつかの長い処理のプレースホルダーです。

私がしたいのは、invoke()呼び出しに時間がかかりすぎる場合、プロセスがタイムアウトして、例外を返すかスローする必要があるということです。そのため、これをテストするために30000ミリ秒の要求タイムアウトを構成しようとしています。残念ながら、このタイムアウトを発生させる方法がわかりません。

私が試してみました:

  • プロセッサをPriorityProcessorでラップし、invoke()の前にsetRequestTimeout(30000)を呼び出します

  • キャッシュ構成の>要素に<request-timeout>30000 </request-timeout>を追加する<replicated-scheme/

  • キャッシュ構成の>要素に<tasktimeout>30000 </tasktimeout>を追加する<replicated-scheme/

  • キャッシュ構成の>要素に<guardian-timeout>30000 </guardian-timeout>を追加する<replicated-scheme/

  • tangosol-coherence-override.xmlを作成し、「type」がキャッシュ構成のサービス「name」と一致<init-paramする>要素にguardian-timeout>を追加します。<service

  • sleep()呼び出しをThread.sleep(310000)に変更して、すぐに使用できるデフォルトが5分後に起動するかどうかを確認します。

これらのいずれもタイムアウトにはなりません。プロセッサは、私が指示した時間だけスリープし、エラーなしで戻ります。

誰かが以前に似たようなことをしたことがあり、私にアドバイスを与えることができますか?よろしくお願いします。

ありがとう

ジェームズ

4

1 に答える 1

2

OK、それで私は答えを持っています、ティムミドルトンの助けを借りて。

基本的に、レプリケートされたキャッシュはタイムアウトをサポートしていません。とにかく、それは私のシステムにとって適切な選択ではなかったことがわかりました。

解決策は次のとおりです。

  1. <distributed-cacheキャッシュ構成で>スキームに切り替えます。
  2. >要素を1より大きい数でスキームに追加し<thread-countます(私は10を選択しましたが、サポートしたい同時インスタンスの数だけです)。
  3. PriorityProcessorを使用してEntryProcessorをラップし、invoke()を呼び出す前にsetRequestTimeoutMillis()でタイムアウトを設定します。(これは私が最初に試したものですが、結局のところ間違った種類のキャッシュを使用していることに注意してください)
于 2012-04-18T11:45:38.773 に答える