На случай, если другие уже не достаточно ясно: вы делаете это неправильно!;)
Я согласен, что это может сбивать с толку, но единственный сеанс в EJB-сессионных компонентах сохраняется в прокси-компоненте, который вы получаете из InititalContext.
Различные компоненты, которые вы получаете из этогоконтекст не разделяют какой-либо общий сеанс.В EJB бины не хранятся в сеансе EJB, но они являются ЭТОМ сеансом.
Другими словами, InitialContext (ctx в вашем коде) НЕ является эквивалентностью EJB для HttpSession.
Возможно, еще хуже то, что в вашем коде пользователь является EJB-компонентом.Это НЕПРАВИЛЬНО.
Пользователь - существительное в вашем приложении.Они представлены сущностями JPA или простыми «нормальными» Java-бинами.EJB-компоненты предназначены для реализации в вашем приложении глаголов : служб, DAO, репозиториев и т. Д.
Предполагается, что состояние в сессионных компонентах с сохранением состояния будет удерживать данные модели во время бизнес-процесса (длякэширование, блокировка, резервирование и т. д.).Ни в коем случае это состояние не должно быть данными модели.
Мой совет: оставьте свой текущий «дизайн».Не пытайтесь это исправить, не пытайтесь оправдать это.Отпусти, удали свой код, не оглядывайся назад.Прочитайте несколько хороших книг о EJB и начните все сначала.
Удачи!