我在另一个Glassfish服务器上的一个Glassfish服务器(前端)和一个EJB 3.1应用程序(后端)上有一个webapp。 webapp通过远程调用与EJB 3.1进行通信。
我想传递上下文数据(即用户数据),而不必将其定义为每个业务操作的输入参数。
我有一个想法,但不确定它是否会奏效:使用 ThreadLocal 来存储数据,但 ThreadLocal 只能在一台服务器上使用(意味着JVM) =>使用 InvocationContext 对象并创建拦截器以将用户数据添加到 ContextData 地图。
你怎么看?任何其他想法都非常欢迎! ; - )
更新
在第一次回答后,我用Google搜索了一下,发现了注释 @CallerPrincipal 。
如何在远程调用之前设置此对象?
答案 0 :(得分:2)
容器已经处理过了,所以你不必自己编写代码。
在您的EJB中,您可以访问EJBContext,它具有getCallerPrincipal()方法,可以为您提供呼叫者身份。