Чтобы найти удаленный интерфейс сессионного компонента с несколькими интерфейсами Remote Business (например, com.acme.FooBusiness1
, com.acme.FooBusiness2
), вам нужно найти имя, полученное из комбинации глобального имени JNDI целевого ejb (mappedName()
в @Stateless
) и конкретный удаленный бизнес-интерфейс, разделенные знаком «#»:
InitialContext ic = new InitialContext();
FooBusiness1 bean1 = (FooBusiness1) ic.lookup("FooEJB#com.acme.FooBusiness1");
FooBusiness2 bean2 = (FooBusiness2) ic.lookup("FooEJB#com.acme.FooBusiness2");
В типичном случае, когда бин имеет только один удаленный бизнес-интерфейс, эта полностью квалифицированная форма не требуется. В этом случае имя JNDI компонента может быть использовано напрямую:
FooBusiness bean = (FooBusiness) ic.lookup("FooEJB");
Это была теоретическая часть. Сейчас на практике. В вашем случае, насколько я вижу, вы обращаетесь к EJB из Weblogic, поэтому я бы предпочел использовать конструктор no-arg InitialContext()
(и использовать файл конфигурации jndi.properties
для других сред), но это всего лишь сторона нота. Затем вам нужно поискать com.foo.HelloWorld
, Remote Interface, а не com.foo.HelloWorldBean
, реализацию:
InitialContext ic = new InitialContext();
(HelloWorld) ic.lookup("HelloWorld#com.foo.HelloWorld");
И если у вашего компонента есть только один Удаленный бизнес-интерфейс, это должно работать:
(HelloWorld) ic.lookup("HelloWorld");