Изменение аргументов в удаленном методе EJB

1

Существует множество статей, описывающих, как модификации аргументов метода EJB не передаются вызывающему. Обычно я разрешаю это, возвращая аргумент вызывающему, поэтому его можно переназначить переменной.

Моя проблема заключается в том, что ни одна из статей не описывает, что я должен делать в более сложных методах, где мне нужно внести изменения в аргументы и вернуть некоторое значение. Я мог бы сделать какой-то класс-оболочку, который содержит свойство для каждого аргумента и фактическое возвращаемое значение и возвращает обертку, но это кажется мне очень неуклюжим. Есть ли лучшие пути для этого?

Теги:
ejb

1 ответ

2
Лучший ответ

Других путей нет.

Представьте себе следующий метод:

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".

  • 0
    Я думаю, что я должен жить с этим. Я надеялся, что есть некоторая аннотация для аргумента, которая скажет «отправить этот аргумент обратно и заменить экземпляр на стороне вызывающего».
  • 0
    Я думаю, что до тех пор, пока вы покидаете JVM, это практически невозможно - или это слишком много проблем для слишком малых выгод.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню