Я не уверен, если это верно для Glassfish или нет, но в случае JBOSS, если вы включите DEBUG, вы можете заметить JNDI имя, которое будет использоваться.
Например, во время развертывания сессионного компонента под названием DemoBean, вы увидите следующий журнал в файле server.log: -
2009-07-24 09: 08: 18,747 DEBUG [org.jboss .ejb3.stateless.StatelessDelegateWrapper] Создание jboss.j2ee: jar = SessionBeanDemo.jar, name = DemoBean, service = EJB3 2009-07-24 09: 08: 18,747 DEBUG [org.jboss.ejb3.ProxyDeployer] нет объявленных удаленных привязок for: DemoBean 2009-07-24 09: 08: 18,747 DEBUG [org.jboss.ejb3.ProxyDeployer] есть удаленные интерфейсы для DemoBean 2009-07-24 09: 08: 18,747 DEBUG [org.jboss.ejb3.ProxyDeployer ] удаленное связывание по умолчанию имеет jndiName от DemoBean/remote
Затем в коде клиента вы можете посмотреть его, как это: -
InitialContext ctx;
try {
ctx = new InitialContext();
DemoBeanRemote demo = (DemoBeanRemote) ctx.lookup("DemoBean/remote");
System.out.println(demo.sayHello());
} catch (NamingException e) {
e.printStackTrace();
}
Спасибо. Если изменится сервер и контекст, не будет ли работать class.getName()? Я думаю, имя класса может измениться, и я мог бы затем сопоставить некоторый другой класс с моим кодом поиска, используя java: comp/env – blank
Я могу только предположить, что имя JNDI в вашем случае соответствует вашему полному имени bean-компонента. Я никогда не видел этого раньше. Проблема заключается в том, что компонент не развернут локально, поэтому ваш исходный текст по умолчанию не сможет его найти. – Robin
Если компонент развернут на другом сервере, JNDI для поиска будет иметь полную квалификацию, например «corbaname: iiop: someHost: 2809 # com/mycompany/accounting/MyBean». Использование ссылки изменит только дескриптор развертывания, и вам не нужно будет кодировать эту божественную строку. – Robin