0

基本的に、2 つの別個のサーブレットによって作成された 2 つのオブジェクトが直接通信する J2ee アプリケーションがあり、これらのインスタンスが安定している必要があります。つまり、セッション中にお互いを「認識する」必要があります。

シーケンスはおおよそ次のとおりです。

  1. クライアントは、オブジェクト A を作成するサーブレット #1 にリクエストを送信します。
  2. クライアントは、オブジェクト B を作成するサーブレット #2 に 2 番目の要求を (最初の要求が返された後に) 送信します。
  3. オブジェクト B が JNDI を使用して A を見つけ、2 つのオブジェクトが対話します。
  4. クライアントはオブジェクト A にリクエストを送信し続け、オブジェクト A は B を再度検索する必要があります。

これら 2 つのインスタンスがセッション全体でそれぞれを認識していることを確認するにはどうすればよいですか? それらを JNDI にバインドしても問題が完全に解決されるわけではありません。オブジェクト B は元のサーブレット (サーブレット #2) と通信する必要があり、リクエスト全体で安定していないからです。

何か案は?

前もって感謝します。


はい、問題の説明が少し曖昧であることは認めます。しかし、それは非常に単純なアプリケーションではありません。それでも、私はそれをよりよく尋ねようとします:

私の最終目標は、Javaステートメントを単にデバッグするJavaデバッガとは対照的に、アプリケーション用の一種の「セマンティックデバッガ」を作成することです。

デバッグされるアプリケーションは、基本的にサーブレットです。私のツールが接続するもの。このツールは、デバッグ プロセスを制御する別のサーブレットを介してアプリケーションへの接続を維持します。これら 2 つのサーブレットは、常に相互に直接通信する必要があります。

私の現在の考えは、この通信を容易にするステートフル セッション Bean をセットアップすることです (まだセットアップに苦労しています)。

しかし、これをより良く達成する方法についての考えをいただければ幸いです。

4

2 に答える 2

1

そして、何があなたがセッションを使用するのを妨げますか?JNDIは必要ありません。オブジェクトを、事前定義された名前でセッションに配置するだけです。通信オブジェクトがアプリケーション全体の場合は、シングルトンを使用します。

PS解決策は実際にはもっと簡単かもしれませんが、あなたは奇妙なことをしているように見えます。提案された実装ではなく、タスクを説明できますか?とにかく「セマンティックデバッガ」とは何ですか?

于 2008-10-31T17:58:47.020 に答える
0

正直に言うと、あなたが達成しようとしていることを完全には理解していません。解決策ではなく、解決しようとしている問題を説明してみてください。

これらのオブジェクトは何に依存していますか? それらはユーザー固有のものですか?次に、それらをセッションに入れると、セッションから再度取得できます (request.getSession().getAttribute("A"))。

それらはすべてのユーザーに対してグローバルですか? その場合、それらをスプリング構成に入れて、そこから取り出します。

サーブレット内に情報を保存しないでください。

編集:わかりました、セッションに値を保存することが私が理解していることから、この問題を解決するための最良の方法です(「Java-Pseudo-Code」で):

public class BusinessServlet {

protected void doGet(HttpServletRequest req, HttpServletResponse res)  {
  HttpSession session = req.getSession(true);
  BusinessCode business = session.getAttribute("A");
  if (business == null) {       
    business = new BusinessCode();
    session.setAttribute("A", business);
  }

  DebugObject debug = session.getAttribute("B");
  if (debug == null) {       
    debug = new DebugObject();
    session.setAttribute("B", debug);
  }

  business.doSomeWork(debug); 
  }
} 

public class DebugServlet {
  protected void doGet(HttpServletRequest req, HttpServletResponse res)  {
    HttpSession session = req.getSession(true);
    DebugObject debug = session.getAttribute("B");
    if (debug != null) {
      debug.printDebugMessages(res);
    }
  }
} 

これは役に立ちますか?

于 2008-10-31T09:52:16.743 に答える