Java EE: как получить доступ к локальному EJB из веб-модуля?

Я создал локальный EJB, к которому хочу получить доступ из веб-модуля на той же виртуальной машине. Мой код выглядит так:

@EJB
private UserBeanLocal userBean;

public UsuarioManagedBean() {
     InitialContext c = new InitialContext();
     userBean = (UserBeanLocal) c.lookup("java:global/UsersApp/Users-ejb/UserBean!biz.users.beans.UserBeanLocal");
}

public List<User> getUsers() {
    users = this.userBean.listUsers();
    return users;
}

И это прекрасно работает. Однако кто-то сказал мне, что мне не нужно выполнять поиск, если я работаю с локальным компонентом, мне нужно только сделать инъекцию следующим образом:

@EJB
private UserBeanLocal userBean;

public UsuarioManagedBean() {

}

public List<User> getUsers() {
    users = this.userBean.listUsers();
    return users;
}

Но если я попробую это, я получу нулевое исключение для this.userBean. Человек, который посоветовал мне, работает с JBoss, и я использую стеклянную рыбу. Я делаю что-то неправильно?


person Lucia    schedule 27.06.2011    source источник
comment
Какую версию JEE и Glassfish вы используете? JEE5 поддерживает внедрение зависимостей (DI), поэтому, если вы используете более старую версию, это не сработает. То же самое с Jboss, есть определенные ограничения, при которых DI не будет работать в jboss-4.2.3, но будет нормально в jboss 5.   -  person rajasaur    schedule 27.06.2011


Ответы (2)


Аннотация @EJB работает только с классами, управляемыми сервером приложений, такими как сервлеты, mdbs и другие ejbs. Я предполагаю, что UsuarioManagedBean - это pojo и, следовательно, NPE, потому что ресурс никогда не внедряется.

person Kal    schedule 27.06.2011

@Lucia выглядит так, будто UsuarioManagedBean — это POJO. @Кал прав. Вы не можете внедрить ejb в pojo. Если вы действительно хотите внедрить в pojo, рассмотрите возможность использования CDI.

Используя CDI, ваш код будет выглядеть так, как показано ниже @Inject private UserBeanLocal userBean;

Пожалуйста, опубликуйте более подробную информацию, например версию jvm, версию Glassfish и т. д.

person kiran.kumar M    schedule 27.06.2011
comment
Спасибо Киран, на самом деле UsuarioManagedBean — это pojo. - person Lucia; 27.06.2011