2012-01-26 1 views
0

私は外部Webサービスを呼び出すいくつかのラクダルートを持っています。私はこのWebサービスのセッションプールを管理し、ラクダのルートには1つ必要です。 - 管理/例や のためにJDBCを使用してDBのセッションデータを永続化 - あなたが話をしている場合などCamelでオブジェクトプールを実装する良い方法は何ですか

+0

「Webサービスセッション」については、実際には何を参照していますか? CXFを使用すると、JAX-WS/JAXBを使用していると思います。つまり、JAX-WSクライアント・プロキシを処理し、可能な限り共有する必要があります。セッションをプールすることはできません。これは、SOAPおよびREST WebServicesの場合は存在しないためです。 –

+0

wsdlには、signin(セッション番号を返す)とsignoutという2つの操作があります。私はサインイン/サインアウトへの呼び出しを制限するようにプールされた "セッション"を維持する必要があります – redben

+0

WebServiceのセッションは、いくつかのSessionIDによって表されます。私はWebServiceがクライアントをどのように識別できるかを他の方法で知らない。ですから、基本的にWebServiceのレスポンス(またはその一部)をログイン操作にプールする必要があります。このレスポンスは、WebService側でセッションタイムアウトが発生しなくなりました。 –

答えて

1

あなたのセッションはいくつかのSessionIDで表されます。あなたは/ poolを保存する必要があります。あなたは基本的にWebServiceレスポンス(またはその一部)をプールする必要があります。ログイン操作によって返されます。このレスポンスは、WebService側でセッションタイムアウトが発生しなくなりました。

WebServiceセッションがサーバー側の有効期間で、開かれたセッションを回復する場合は、たとえば次のようにします。クライアント側でクラッシュしたり、複数のクライアント間で開かれたセッションをDBで共有したい場合は、DBを使用します。

クライアントが1つだけの場合、または各クライアントが独自の小さなキャッシュを持っていても問題ない場合は、インメモリプールを使用します。 subalternativeとして、Ehcache/Terracottaによってクライアント/複数のアプリケーション間でこのプールを共有することを考えるかもしれません。ところで、これらのキャッシュを使用すると、プールコンテンツの内容をディスクにダンプすることができます。これは、DBのすぐれた代替手段です。

0

のためのapache-コモンズ・プールを使用して、静的またはシングルトンプールを実装する :「より安全」である

JDBC接続プーリングを使用する場合は、DBCPまたはC3P0を使用することをお勧めします。 POJOオブジェクトのプールについて話している場合は、Spring object pooling

+0

実際には、各操作呼び出しのセッションを開いたり閉じたりしないように、リモートWebサービスセッションを開いたままにしておく必要があります。私は最初にdb(JDBCを使用して)セッションオブジェクトを保持すると思って、プールのオブジェクトファクトリがオープンおよびクローズメソッド(makeObject/destroyObject)を呼び出すことを処理するapache-commonsプール(Beanの静的プロパティとして) )をリモートWebサービス上に作成します。この(静的な)アプローチを使ってもいいと思いますか? – redben

関連する問題