有很多文章描述了如何不将EJB方法参数的修改传递给调用者。我通常通过将参数返回给调用者来解决这个问题,因此可以将其重新赋值给变量。
我的问题是,没有一篇文章似乎描述了我应该在更复杂的方法中做什么,我需要修改参数并返回一些值。我可以创建一些包含每个参数的属性和实际返回值的包装类,并返回包装器,但这对我来说似乎非常笨拙。有没有更好的方法来实现这一目标?
答案 0 :(得分:2)
没有别的办法。
想象一下以下方法:
Result doSomething(A arg1, B arg2, C arg3) {
...
}
因为您使用远程连接调用EJB,所以客户端将序列化arg1
,arg2
和arg3
。此时,它们是全新的实例,例如arg1'
,arg2'
和arg3'
。
它们甚至可能不在同一个JVM上,如果是,那么你不应该依赖它(某些EJB容器在确定调用者和被调用者在同一个JVM中时使用引用)。
返回Result
,更新那些argN'
是唯一的方法:
Result doSomething(A arg1, B arg2, C arg3) {
...
return new Result(arg1, arg2, arg3);
}
然后容器将序列化Result
,arg1'
,arg2'
和arg3'
,并且来电者将收到包含Result'
的{{1}}, arg1"
和arg2"
。