2012-01-27 11 views
0

Oracle WebLogic 10.3上に、あらゆる種類のデータベースクエリを実行するWebサービス(Javaで)があります。最近私はストレステストを開始しました。それは反復テスト(WSを1000回連続して呼び出す)に合格しましたが、並行性テストの開始時に問題が発生するようになりました。最大2つの同時呼び出しを行うと、エラーが発生します。適切なテストを行うと、WSは同時呼び出しを処理できないように見えますが、明らかにそうではありません。エラーにはヌルポインタ例外、クローズされた接続やプリペアドステートメントなどが含まれていました。これに影響する可能性のある設定オプションは見つかりませんでしたが、このWLSの知識は非常に限られています。Oracle WebLogic 10.3 Webサービスの同時コールの問題

事前にお寄せいただきありがとうございます。

+0

あなたは間違って必ずそのWebLogicおよびないアプリのデータを共有しますか? –

+0

はい、私は同じ不運な結論に達しました。 Web Services Iを作成していたときに、WebLogicは同時呼び出しでプールを使用していましたが、そうではないようです。この間違いは、私のWebLogicに関する知識が限られていることが原因です。私はサービスがスレッドセーフなものになるように修正しましたが、現在は正常に動作しています。 – Xargos

答えて

0

ただ明確な答えがあります。

WLSで特定のWebサービス(この場合はSOAP/JAX-WSが使用された)を複数同時に呼び出すと、同じオブジェクトが使用されます(プールまたはキューは使用されません)。したがって、実装はスレッド安全。

EDIT:

明確にする: は、JDeveloperによって生成されたWebサービス実装クラスのクラス属性があるとします。 Webメソッドでこの属性を変更してから使用すると、メソッドが呼び出されたとき(つまりWSが呼び出されたとき)に同期の問題が発生します。最初にWebサービスの作成を開始したとき、私はWSコールごとにWebServiceオブジェクト全体が新たに作成されましたが、これは当てはまりません。

0

あなたが正しいとマークした回答は全く間違っています。

スレッドセーフであるためにWebサービスメソッドを作成しないでください。

weblogicのWebサービス実装はマルチスレッド化されています。

それは

「サーブレットはマルチスレッドされている。サーブレットベースのアプリケーションが適切にこれを認識して対処する必要があります。コードの大部分が同期されている場合は、アプリケーションを効率的にシングルスレッドになり、スループットが大幅に低下しサーブレットのようなものです。 "

http://www.ibm.com/developerworks/websphere/library/bestpractices/avoiding_or_minimizing_synchronization_in_servlets.html

WS内のコード、あなたは何をすべきかによって、同期したいかもしれません。

Does it make sense to synchronize web-service method?

+0

これは実際の質問に答えることができないという事実を無視して、私はあなたが私が話していたことを理解できなかったと思います。私はこの問題の専門家からは遠いので、私はそれを見ているだけです。 JDeveloperによって生成されたWebService実装クラスにclass属性があり、それがwebメソッドで変更されると、メソッドがコールされる(WSがコールされる)際に同期の問題が発生します。それはルーキーミスですが、私はこの質問を年に一度行ってきました。私は答えを編集します。 – Xargos

関連する問題