2013-04-03 4 views
8

Eclipse、Tomcat7およびJerseyの実装で、MySQLに接続して、非常に簡単なREST Webサービスを開発しています。 ジャージーのドキュメントを見ると、すべてのリクエストがルートリソースクラスの新しいオブジェクトを作成することがわかります。しかし、すべてのリクエストが独立しているかどうかはわかりません。たとえば、1つのリクエストが長時間待たなければならない場合、サーバーはnormalyのリクエストを受け入れますか?ジャージ・レスト・サービスへの同時リクエスト

問題は次のとおりです。 2つのメインクラスがあり、1つのクラスは注釈付きのジャージ(Proxy.java)を実装し、BD(Notificator.java)に接続する他のクラスはこのクラスのインスタンスが1つしかありませんSingleton)を使用して1つのConnectionオブジェクトのみを使用します。ジャージーを実装するクラスはこのクラスを使用します。したがって、リクエストの1つがブロックされている場合、同じ(Notificator.java)インスタンスを使用しているため、他のリクエストが実行されるかどうかはわかりません。

関係は、(Proxy.java)のN個のインスタンスは、MySQLへの1つの接続を持つ唯一の(Notificator.java)魔法使いを使用します。

+0

なぜDBに接続するのは1つだけですか? –

+0

私はそれを簡単にし、同意の問題を避けるためにそれをしました。 –

答えて

3

ジャージーをサーブレットの上に開発されています。着信要求ごとに新しいスレッドがあります。単一の使用可能な接続オブジェクトの競合があるため、コードではすべてのスレッドのボトルネックが発生しています。複数のリクエストがある場合は、1つのリクエストだけがその接続を使用し、他のリクエストは待機する必要があります。待ち時間が長すぎない場合は問題ありません。しかし、waitがHTTP REQUEST TIMEOUT以上の場合、他のリクエストはTIMED OUTに終わる可能性があります。

ビジネス要求/合併症のために接続が単一のボトルネックになっている可能性があることをご理解ください。したがって、すべての要求を同時に処理することができず、さまざまな理由があるような場合は、Webサービスを非同期として作成する必要があります。非同期Webサービスは、SUBMIT REQUEST-> REQUEST ACCEPTED(非同期に処理されます)のモデルで動作し、JOBが完了しなくなるまで、ポーリング - >クライアントポールのためにJOB URLを返します。

希望すると助かります!

+0

「着信リクエストごとに新しいスレッドがあります」という重要なポイントです!本当にありがとう。私はコネクションを1つしか使用しないのでボトルネックがあることを知っていますが、通常2〜3回の同時リクエストがありますので、tahtに問題はないと思います。しかし、私は "非同期Webサービス"を研究します。 –

0

てみデータベース接続プーリング、ここではこれに関する詳細:

http://en.wikipedia.org/wiki/Connection_pool

How to establish a connection pool in JDBC?

+0

thxですが、最終的に私の先生は接続プールが実装するのが難しいと私に言ったので、同意問題を避けるためにNotificatorクラスのキーワード "syncronized"を使用しました。ジャージーへのすべての呼び出しが独立して実行されることもわかりました。したがって、このうちの1つがブロックを呼び出すと、他のブロックは正常に実行されます。 –

+0

'synchronized'キーワードを使用すると、他の呼び出しをブロックします。それがOKならOKです。 – Vitaly

+0

私は他の呼び出しをブロックしますが、リソースが利用可能になると、彼らは目を覚ましますか?それは私の先生が私に説明したものです。そしてこれは私のために働く。 –

関連する問題