代码之家  ›  专栏  ›  技术社区  ›  Lior

在J2EE服务器中,在两个不同的应用程序之间匹配两个对象实例的最佳方法是什么?

  •  0
  • Lior  · 技术社区  · 16 年前

    我有一个J2ee应用程序,我基本上想要两个对象,由两个独立的servlet创建来直接通信,我需要这些存在保持稳定,即在会话期间彼此“了解”。

    顺序大致如下:

    1. 客户机将请求发送到Servlet#1,后者创建对象a
    2. 客户机将第二个请求(在第一个返回之后)发送到servlet#2,后者创建对象B。
    3. 客户机现在继续向需要再次找到B的对象A发送请求。

    将它们绑定到JNDI并不能完全解决问题,因为对象B需要与其原始的servlet(servlet#2)通信,后者在请求之间不保持稳定。

    有什么想法吗?


    是的,我承认问题描述有点模糊。但这不是一个非常简单的应用程序。

    我的最终目标是为我的应用程序创建一种“语义调试器”,而不是简单地调试java语句的java调试器。

    调试的应用程序基本上是一个servlet。我的工具与之相连。 这两个servlet需要不断地、直接地相互通信。

    我目前的想法是建立一个有状态的会话bean来促进这种通信(从来没有做过,仍然在努力建立它)。

    但是,如果有什么想法可以更好地实现这一点,我将不胜感激。

    2 回复  |  直到 13 年前
        1
  •  1
  •   Vladimir Dyuzhev    16 年前

    是什么阻止了你使用会话?您不需要JNDI,只需将对象放入一个预定义的名称下的会话。如果通信对象是应用程序范围的,则使用Singleton。

    P、 在我看来,你在做一些奇怪的事情,而解决方案其实可能更简单。你能描述一下任务,而不是提议的实施吗?什么是“语义调试器”?

        2
  •  0
  •   Joshdan    16 年前

    老实说:我不完全理解你想达到什么目的。 你能试着解释一下你想解决的问题而不是解决方案吗?

    不要在servlet中存储任何信息。

    编辑:

    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);
        }
      }
    } 
    

    这有帮助吗?