Почему я получаю NameNotFoundExcpetion при использовании context.lookup ("java: comp / env / MyBean") - PullRequest
1 голос
/ 17 марта 2009

Почему я получаю исключение NameNotFoundException при использовании context.lookup("java:comp/env/MyBean"), но не при использовании context.lookup(MyBean.class.getName())?

В сообщении об ошибке «Объект не связан с java: comp / env / MyBean» Как связать имя и почему class.getName() все еще работает? Зачем мне использовать java: comp / env?

Я использую Netbeans 6.5, Glassfish 2.1.

Ответы [ 2 ]

2 голосов
/ 17 марта 2009

Префикс java: comp / env используется для того, что называется ссылкой на ресурс. Это абстракция между ресурсом, который вы ищете, и фактическим именем JNDI ресурса. Это позволяет вам изменять местоположение базового ресурса (то есть другого сервера и контекста), не влияя на ваш код поиска.

Я использовал его только в WAS, но идея в том, что вы создаете ссылку на существующий ресурс (JMS, JDBC, EJB ...) для каждого модуля, которому требуется доступ к ресурсу. Это часть вашей конфигурации развертывания.

Урок от Sun здесь и Пример Glassfish здесь.

0 голосов
/ 25 июля 2009

Я не уверен, верно ли это для 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] нет объявленных удаленных привязок для: 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();
        } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...