5

在我们的企业应用程序中,有服务层(EJB3.0,包括业务逻辑和数据库访问)和Web 层(Servlet/JSP)。JBoss AS 7 在分布式机器中部署了分离的耳朵和战争。

服务层包含有状态无状态EJB。

我们有用于方法调用的 EJB 拦截器。对于从Web层登录的用户,用户信息保存在HttpSession中(用户验证只需通过在 DB 中查询他的帐户和密码来处理)。

现在性能调优需要知道哪个用户调用了这些 EJB 方法、用户信息、日期信息等。这些将被提取并记录或存储在数据库中以供我们使用。

现在我的问题是:

如何区分 EJB 层的调用者信息

EJB 拦截器可以获取 EJB 方法的参数以及何时调用它。但我们不知道是谁打电话给它的。

我们知道将 EJB 层与 Web 层结合起来很难看。所以我们不会将 HttpSession/HttpRequest 传递给 EJB 层,即使这可能有助于从 Session/Request 对象中获取我们需要的内容。

而且有太多的 EJB 方法,我们无法将 TuningInfo(包括请求信息、用户信息等)作为参数从 Web 传递给每个 EJB 方法。

是否可以在 EJB 层中获取调用者的信息?

提前致谢。

4

1 回答 1

1

如果 Web 层和 EJB 层在同一个 JVM 上,则可以通过线程本地传递用户信息。 http://javacodesamples.wordpress.com/2012/07/11/understanding-the-concept-behind-threadlocal/

于 2012-10-17T21:28:22.397 回答