2017-01-02 12 views
0

私は、複数のサーブレットコールをたくさん作成するアプリケーションを持っています。特定のサーブレットXの処理が完了するまで、どのサーブレットのインスタンスもY、Zが呼び出されないことを確認するにはどうすればよいですか。一度に1つのサーブレット(インスタンスではない)だけが呼び出されるようにする方法を教えてください。

SingleThreadModelまたは同期は、サーブレットごとに1つのスレッドしか呼び出されないようにします。しかし、それは複数のサーブレットでは動作しない可能性があります。

+1

各サーブレットは、アプリケーションコンテキストキーにフラグを追加でき、このプロパティをチェックするフィルタを持つことができます。 –

+0

サーブレットYを使用する他のすべてのページを使用する前に、サーブレットXを使用する特定のHTTPリクエストを*誰かが*行う必要があるのはなぜですか?それは意味をなさない。 – Andreas

+0

私は、クッキーをクリアしてセッションを一掃するシナリオを持っています。私はサーブレットを使用してクッキーをクリアしていますが、別のサーブレットがそれを持っていないことを確認したいと思います。 – Ajay

答えて

0

サーバーコールごとにコールバックメカニズムを使用します。最初のサーバコールが成功すると、2番目に電話をかけることができます。

+0

私はそれをどのように実装しましたか? function successCallback(応答){ if(条件){ 別のサーブレットを呼び出します。 } 作品 – Ajay

0

独自のロックを定義して、手動同期を実装できます。例については

セマフォとして使用する静的オブジェクトを宣言します。

public static final Object MY_LOCK = new Object(); 

、あなたはあなたがそのようにそれを使用することができます同期したい:あなたが同じロックを使用することができます

public void someMethod() { 
    synchronized(MY_LOCK) { 
     // do stuff that may not be called at same time 
    } 
} 

public void someOtherMethod() { 
    synchronized(MY_LOCK) { 
     // do other stuff that may not be called at same time 
    } 
} 

をそのように別のメソッド(またはあなたのケースではサーブレット)で。

+1

私は、あなたがそれをしたいと思う理由を想像するのは難しいと言わなければなりません。それは実現可能ですが、非常に珍しいです。 – Thomas

関連する問題