如何将调用者的信息从Web层传递到EJB层?

bra*_*vin 5 jboss java-ee ejb-3.0

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

服务层包含状态 EJB 和无状态 EJB.

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

现在,性能调优需要知道哪个用户调用了这些EJB方法,用户信息,日期信息等.这些将被提取并记录或存储在DB中以用于我们的anylize.

现在我的问题是:

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

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

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

并且有很多EJB方法我们无法将TuningInfo(包括请求信息,用户信息等)作为参数从web传递到每个EJB方法.

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

提前致谢.

Cri*_*ris 1

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