У меня есть несколько сервлетов, которые вызывают удаленный сеанс EJB для управления запросами пользователя. В первый раз я создал новый менеджер для каждого метода следующим образом:
ManagerAdminRemote managerAdmin;
Context jndiContext = new javax.naming.InitialContext();
Object ref = jndiContext.lookup("ManagerAdmin/remote");
managerAdmin = (ManagerAdminRemote) PortableRemoteObject.narrow(ref, ManagerAdminRemote.class);
Чтобы избежать этого повторения, я реализовал метод init
следующим образом:
public void init(ServletConfig config) throws ServletException {
super.init(config);
try {
Context jndiContext = new javax.naming.InitialContext();
Object ref = jndiContext.lookup("ManagerAdmin/remote");
managerAdmin = (ManagerAdminRemote) PortableRemoteObject.narrow(ref, ManagerAdminRemote.class);
} catch (NamingException e) {
e.printStackTrace();
}
}
С managerAdmin
, объявленным как атрибут класса.
Сессионный компонент ManagerAdmin
не имеет состояния.
Я использую JBoss 5, и я увидел, что init()
вызывается при первом вызове сервлета. Но я также заметил, что все пользователи используют одни и те же объекты, объявленные как атрибут класса. Так, например, разные пользователи будут использовать один и тот же managerAdmin
.
Пока я не столкнулся с какой-либо проблемой, но я спрашиваю: может ли это совместное использование привести к каким-либо проблемам? Задержки? Или, поскольку менеджеры не имеют гражданства, это нормально?
Заранее спасибо.