Может ли быть важно вызвать remove () для сеансового компонента EJB 3 без сохранения состояния? Возможно на weblogic? - PullRequest
1 голос
/ 05 мая 2010

Я нахожусь в процессе переноса приложения EJB 2 в EJB 3 (и что это за удовлетворительная задача - удалить все эти дескрипторы развертывания!). Раньше он работал на Weblogic и теперь работает на Glassfish.

Задача идет очень гладко, но меня беспокоит одна вещь: текущий код уделяет большое внимание обеспечению того, чтобы EJBObject.remove() вызывался в bean-компоненте, когда он выполнил свою работу, и у других разработчиков была (к сожалению, очень расплывчатая) память о "плохих вещах", происходящих, когда этого не было сделано.

Однако в EJB3 класс реализации не реализует EJBObject, поэтому нет метода remove() для вызова. И я понимаю, что в действительности нет никакого смысла вызывать его для сессионных компонентов без сохранения состояния, поскольку они, ну, в общем, не сохраняют состояния.

Могли ли эти "плохие вещи" быть привязаны к сети? Если нет, то что еще? Должен ли я избежать полной легкости EJB3 и сохранить удаленный интерфейс, расширяющий EJBObject? Или просто списать это как программирование грузового культа и удалить все эти предложения try / finally?

Я склоняюсь к последнему, но чувствую себя не очень комфортно с ним.

Ответы [ 2 ]

1 голос
/ 05 мая 2010

Я не знаком с реализацией WebLogic, но не могу себе представить, что это важно. Я ожидаю, что каждый вызов метода в оболочке SLSB будет выделять bean-компонент из пула перед вызовом метода и освобождать его после, так что remove () не будет ничего делать.

Я бы списал это на культовое программирование. Предположительно, кто-то однажды забыл вызвать remove для SFSB и обнаружил, что произошли плохие вещи, поэтому шаблон был распространен на все сессионные компоненты.

0 голосов
/ 15 июня 2010

Это верно. Вы не реализуете EJBObject в EJB 3, поэтому вы не можете вызвать метод remove (). На самом деле EJB 3 имеет внедрение зависимостей, которое работает с EntityManager.

В настоящее время я переносю приложения из EJB 2.1 в EJB 3, и я осознал, что могу решить эту проблему с помощью EntityManager

@ ресурсы частный EntityManager em;

и в методе удаления вы можете написать em.remove (yourObject);

Надеюсь, это поможет

...