Я нахожусь в процессе переноса приложения EJB 2 на EJB 3 (и как приятно удалить все эти дескрипторы развертывания!). Раньше он работал на Weblogic, а теперь работает на Glassfish.
Задача выполняется очень гладко, но одна вещь меня настораживает: текущий код очень тщательно следит за тем, чтобы EJBObject.remove() вызывалась для компонента, когда он выполнил свою работу, а у других разработчиков остались (к сожалению, очень смутные) воспоминания о "плохих вещах". происходит, когда это не было сделано.
Однако в EJB3 класс реализации не реализует EJBObject, поэтому метод remove() не вызывается. И я понимаю, что на самом деле нет никакого смысла вызывать это для сеансовых компонентов без сохранения состояния, поскольку они, ну, не имеют состояния.
Могли ли эти "плохие вещи" быть специфичными для веблогики? Если нет, то что еще? Должен ли я избегать полной легкости EJB3 и оставить удаленный интерфейс, который расширяет EJBObject? Или просто списать это на культовое программирование и удалить все эти предложения try/finally?
Я склоняюсь к последнему, но чувствую себя не очень комфортно с ним.