我有两个servlet A& B. 在B我打算有一个方法isAvailable(),A将调用它来检查状态。如果此方法返回true,那么我将把对象传递给B。
在做一些阅读时,我看到了几个非常熟悉的选项。带有远程EJB,RMI或简单HTTP的JNDI(不知道你最后怎么做)
你们觉得怎么样?还有其他选择吗?
答案 0 :(得分:0)
您的servlet是否在同一个应用程序服务器中运行?如果是这样,您可能希望使用Spring将B注入A,以便可以直接调用该方法。
即使servlet在不同的容器中运行,你也可以将它们(再次使用Spring)公开为Remote
个对象,同样将B注入A(除了这意味着Spring容器将注入一个代理远程对象)。这在代码中没有占用空间(即它全部由配置文件定义,而Spring会为您处理所有事情)
答案 1 :(得分:0)
为什么不利用您的基础架构已经在谈论HTTP的事实?
因此,servlet A可以在特定路径上执行HTTP GET来检查状态(发送回一个对象或检查HTTP响应代码 - 然而后一种方法似乎是对状态代码的误用),以及PUT / POST对象,如果需要。我注意到您正在运行多个主机,这将适用于您的方案。
可以使用标准Java或通过XML等表示来序列化对象 - 可能使用XStream进行序列化。
在我看来,这是一种非常直接的方式来利用您拥有的基础设施。
答案 2 :(得分:0)
看起来Servlet B中的isAvailable()方法访问存储在Servlet中的某种“全局”数据。你能否将这个对象提取到一个单独的Singleton,然后可用于两个Servlet?
答案 3 :(得分:0)
主主机上有一个Servlet A实例,而且每个主机上有许多Servlet B都有自己的tomcat实例。
您可以使用java.net.URLConnection
以编程方式触发HTTP请求。您可以找到here一个简单的教程。
让A向B发出一个HTTP请求,并在B中有一个servlet,它监听这些请求并相应地返回响应。这可以是一个简单的response.getWriter().write("ok");
左右。您甚至可以返回XML字符串等。在A中,您可以从InputStream
的{{1}}中读取此值。