在我们的企业应用程序中有 服务层 (EJB3.0 包括业务逻辑和数据库访问)和 网络层 (小服务程序/JSP)。
JBoss AS 7 在分布式机器中部署了分离的ear和war。
服务层包含 有状态 和 无国籍 EJB。
我们有用于方法调用的 EJB 拦截器。对于从 登录的用户网站层用户信息保存在 HttpSession (用户验证只是通过在数据库中查询他的帐户和密码来处理)。
现在性能调优需要知道哪个用户调用了那些 EJB 方法、用户信息、日期信息等。这些将
提取并记录或存储在数据库中以供我们使用。
现在我的问题是:
如何区分EJB层中调用者的信息 ?
EJB 拦截器可以获取 EJB 方法的参数和调用时间。但我们不知道是谁打来的。
我们知道将 EJB 层与 Web 层结合起来很丑陋。所以我们不会将 HttpSession/HttpRequest 传递给 EJB 层,即使这可能有助于从 Session/Request 对象中获取我们需要的东西。
并且有太多的 EJB 方法,我们无法将 TuningInfo(包括请求信息、用户信息等)作为参数从 Web 传递到每个 EJB 方法。
是否可以在 EJB 层中获取调用者的信息?
提前致谢。
最佳答案
如果Web 层和EJB 层在同一个JVM 上,则可以通过线程本地传递用户信息。
http://javacodesamples.wordpress.com/2012/07/11/understanding-the-concept-behind-threadlocal/
关于jakarta-ee - 如何将调用者的信息从 Web 层传递到 EJB 层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12865733/