Я нахожусь в процессе переноса приложения EJB 2 на EJB 3 (и как приятно удалить все эти дескрипторы развертывания!). Раньше он работал на Weblogic, а теперь работает на Glassfish.
Задача выполняется очень гладко, но одна вещь меня настораживает: текущий код очень тщательно следит за тем, чтобы EJBObject.remove() вызывалась для компонента, когда он выполнил свою работу, а у других разработчиков остались (к сожалению, очень смутные) воспоминания о «плохих вещах». происходит, когда это не было сделано.
Однако в EJB3 класс реализации не реализует EJBObject, поэтому метод remove() не вызывается. И я понимаю, что на самом деле нет никакого смысла вызывать это для сеансовых компонентов без сохранения состояния, поскольку они, ну, не имеют состояния.
Могли ли эти «плохие вещи» быть специфичными для веблогики? Если нет, то что еще? Должен ли я избегать полной легкости EJB3 и оставить удаленный интерфейс, который расширяет EJBObject? Или просто списать это на культовое программирование и удалить все эти предложения try/finally?
Я склоняюсь к последнему, но чувствую себя не очень комфортно с ним.
EJBObject, возвращает ли контейнер прямую ссылку локального компонента на локального клиента? Если это так, есть опасность, что клиент может присвоить значениеnullтому же самому, и экземпляры пула исчезнут из пулов SLSB. Если клиентские вызовы маршрутизируются через прокси, как в EJB 2.1, что это за тип прокси? - person lupchiazoem   schedule 03.08.2018nullне приведет к его исчезновению из пула. Под «исчезновением» я подразумеваю, что он будет готов к сборке мусора во время выполнения. Я разместил вопрос @ stackoverflow.com/questions/51657404/. Я прошу вас поделиться своими знаниями там. - person lupchiazoem   schedule 05.08.2018null(сразу после получения ссылки), этот объект будет готов для GC. Разве это не так? - person lupchiazoem   schedule 07.08.2018