在我们的企业应用程序中,有服务层(EJB3.0包括业务逻辑和数据库访问)和 Web层(Servlet / JSP)。 在分布式机器中,JBoss AS 7中部署了分离的耳朵和战争。
服务层包含有状态和无状态 EJB。
我们有方法调用的EJB拦截器。对于从 Web 层登录的用户,用户信息保存在 HttpSession 中(用户验证只需通过查询他的帐户和DB中的密码进行处理)。
现在,性能调优需要知道哪个用户调用了这些EJB方法,用户信息,日期信息等等 被提取并记录或存储在DB中以用于我们的任何大小。
现在我的问题是:
如何区分EJB层中的调用者信息 ?
EJB拦截器可以获取EJB方法的参数以及何时调用它。但我们不知道是谁打过电话。
我们知道将EJB层与Web层结合起来很难看。所以我们不会将HttpSession / HttpRequest传递给EJB层,即使这可能有助于从Session / Request对象中获取我们需要的东西。
有很多EJB方法我们无法将TuningInfo(包括请求信息,用户信息等)作为参数从web传递到每个EJB方法。
是否可以在EJB层中获取调用者的信息?
提前致谢。
答案 0 :(得分:1)
如果Web层和EJB层位于同一JVM上,则可以通过本地线程传递用户信息。 http://javacodesamples.wordpress.com/2012/07/11/understanding-the-concept-behind-threadlocal/