Существует множество статей, описывающих, как модификации аргументов метода EJB не передаются вызывающему. Обычно я разрешаю это, возвращая аргумент вызывающему, поэтому его можно переназначить переменной.
Моя проблема заключается в том, что ни одна из статей не описывает, что я должен делать в более сложных методах, где мне нужно внести изменения в аргументы и вернуть некоторое значение. Я мог бы сделать какой-то класс-оболочку, который содержит свойство для каждого аргумента и фактическое возвращаемое значение и возвращает обертку, но это кажется мне очень неуклюжим. Есть ли лучшие пути для этого?
Других путей нет.
Представьте себе следующий метод:
Result doSomething(A arg1, B arg2, C arg3) {
...
}
Поскольку вы вызываете свой EJB с помощью удаленного подключения, клиент будет сериализовать arg1
, arg2
и arg3
. На данный момент они являются совершенно новым экземпляром, например arg1'
, arg2'
и arg3'
.
Вероятно, они даже не на одном JVM, и если это так, вы не должны полагаться на это (некоторые ссылки на контейнер EJB используют, когда они определяют, что вызывающий и вызываемый находятся в одном JVM).
Возврат Result
, с argN'
обновленный argN'
является единственным способом:
Result doSomething(A arg1, B arg2, C arg3) {
...
return new Result(arg1, arg2, arg3);
}
Затем контейнер будет сериализовать Result
и arg1'
, arg2'
и arg3'
, а вызывающий получит Result'
содержащий arg1"
, arg2"
и arg3"
.