предоставление EJB JNDI

Я создал и EJB с удаленным интерфейсом:

@Stateless
public class TestSessionBean implements TestSessionRemote 
{

    public void businessMethod() 
    {
            System.out.println ("***businessMethod");
    }
}

Я могу получить к нему доступ из другого компонента (например, сервлета), работающего на сервере, через:

ic = new InitialContext();
ic.lookup("myEJB");

Я использую netBeans 6.5.1 и Glassfish v2.

Как я могу это сделать?

Спасибо, Идо


person iddober    schedule 24.03.2009    source источник


Ответы (1)


на самом деле ejb3 использует соглашение об именах по умолчанию, которое я не нашел, как обойти.

Имя вашего bean-компонента будет примерно таким: TestSessionBean#package.TestSessionBean

Чтобы получить доступ к удаленному сервису, вы можете сделать что-то вроде этого

InitialContext ctx = new InitialContext();
ctx.lookup(interfaceClass.getSimpleName()+"#"+interfaceClass.getName());

где interfaceClass — это класс вашего удаленного интерфейса.

обратите внимание, что вы не определили удаленный интерфейс (или локальный, если на то пошло) для этого веб-сервера. вы не сможете получить доступ к ejb из другого контекста.

Что касается изменения имени, то я не думаю, что это возможно с помощью аннотаций. хотя не уверен

person Nuno Furtado    schedule 24.03.2009
comment
Извините, что воскресил это почти месяц спустя. В Glassfish v2 вы можете сделать @Stateless(mappedName=fooBean), а затем вы сможете искать с помощью fooBean. Это зависит от поставщика и не является переносимым. Однако будьте осторожны, потому что в Glassfish 3 (EJB 3.1) это несколько изменилось. Вы по-прежнему можете использовать mappedName с поиском в удаленном интерфейсе, но теперь существует стандартизированная настройка именования java:global. Если вы еще недостаточно запутались. - person Jim; 13.04.2011