在我正在进行的项目中,我们需要在ejb调用中添加一些额外的参数。 我们不会将这些参数作为常规ejb接口参数放置,因为我们已经有很多接口并且更改大部分接口会很麻烦(加上它与逻辑无关,这些是一些额外的参数被保存在数据库中,称之为副作用。)
所以到目前为止,我们使用weblogic作为我们的应用程序服务器(10.3.4,Java 6,JavaEE 5),我们为此问题找到的解决方案是创建一个包装器ejb,它将接受真正的方法目标,它的参数当然还有其他参数。 然后,包装器将在事务上存储其他参数,创建新的初始上下文并查找目标ejb。
包装器ejb函数如下所示:
public Object invokeWithAdditionalParameters (MethodSignature methodSignature, Object[] args, SomeAdditionalParameter p) {
transaction.putResource("additionalParam", p);
InitialContext ctx = new InitialContext();
Object service = ctx.lookup(methodSignature.buildLookupName());
return methodSignature.getMethod().invoke(service, args);
}
MethodSignature保存我们想要调用的目标ejb方法。
我不知道这个解决方案是否可以接受,是否应该缓存我们的InitialContexts,因为我们已经在服务器中,并且不需要对jndi树进行昂贵的网络调用,但也许我和#39;我错了......
谢谢你, 阿维亚德。