gpt4 book ai didi

java - 如何识别请求中 EJB 的客户端或调用者?

转载 作者:行者123 更新时间:2023-12-02 05:21:29 25 4
gpt4 key购买 nike

我有一个系统,其中多个(20 个左右)Web 应用程序服务器(托管一个网站)与相同的 2 - 4 个 EJB 服务器(通过 VIP)进行通信。我想知道是否可以识别哪一个应用服务器生成了特定请求。

例如:网站 example.com 的工作方式是向 20 个应用服务器中的任意一个发送 HTTP 请求来处理该请求。这些服务器(内部)被命名为 app01app20。确保具有相同 session ID 的所有请求都将路由到同一应用程序服务器,从而使我们能够在逻辑上跟踪来自单个用户的所有请求。某些请求需要一些无法直接获得的额外数据,为此,在另一个由 3 台服务器组成的集群上有一个 EJB (2.1) 应用程序,名为 ejb01ejb03。与 EJB 服务器的连接是通过 VIP (ejb00) 建立的,它将请求以循环方式路由到三个 EJB 服务器。

在 EJB 服务器的日志记录(我们使用 Apache Log4J)中,如果我能够识别请求源自 20 个应用程序服务器中的哪一个,那就太好了。另一种方法是分别检查每个服务器上的日志 - 但我没有一个很好的方法来 grep 通过 20 个不同盒子上的日志。

我的问题是:这在标准 EJB 中可能吗?如果没有其他事情的话,我愿意做一些非标准的事情,但它必须可靠并且可以在我的系统上工作。我们将 Weblogic 11g 用于 Web 应用程序和 EJB 服务器。

我看到过将调用者的身份作为参数传递的建议,但这意味着 20 多个 EJB 方法中的每一个都需要一个额外的参数,而且相当笨重。

有什么解决办法吗?

最佳答案

没有标准的解决方案。 JSR 149中有一个提案,但已被撤回。向远程方法添加额外的参数可能是您的最佳选择。如果您使用 RMI 远程,则可以编写一个 ORB 拦截器来在客户端添加自定义上下文,在服务器端接收它,并在服务器上的方法调用周围设置一个本地线程。

WebSphere Application Server 有一个名为 work areas 的非标准解决方案,它确实适用于远程 EJB。

我对WebLogic不熟悉,所以不知道他们是否有类似的解决方案。搜索类似术语会发现 WorkContextMap看起来很相似,但我不知道它是否适用于远程 EJB,因为我能找到的所有示例都适用于 Web 服务。

关于java - 如何识别请求中 EJB 的客户端或调用者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26476324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com