我们有以下设置:
我们可以更改Jboss端的所有服务方法以接受客户端标识符作为参数。那么我们需要更改服务中的每个可能的方法调用来传输这个标识符,这对我来说听起来太麻烦了。
首先我想到类似于ThreadLocal变量的东西......我猜在Java EE世界中是禁止的。
你们知道“传输”客户端标识符的任何优雅解决方案吗?我认为JAAS做了类似的事情,来自“外部”世界的每个呼叫都被过滤,用户凭证应用于每个呼叫。一旦呼叫进入“Jboss服务世界”,所有后续方法调用都具有呼叫者标识。
我希望我的应用程序尽可能“与客户端无关”,它应该只是“注入”正确的配置(如持久化上下文),具体取决于哪个客户端称为服务。逻辑将是相同的,只是它使用的资源是不同的(某种拦截器架构)。
我有点迷茫。任何帮助都非常感谢。欢呼声 烫发
答案 0 :(得分:0)
从@AroundInvoke拦截器,您应该能够通过检查InvocationContext.getContextData()的内容来检测Web服务,该内容根据JAX-WS规范与webservice上下文共享。你仍然需要在内部传播它。
Java EE中的ThreadLocal并不一定是坏的,只要你记得自己清理:
tl.set(something);
try {
deepMethodCallHierarchy();
} finally {
tl.remove();
}
(当然,明确传递上下文可能是最干净的。)