Почему я получаю NameNotFoundExcpetion при использовании context.lookup(“java:comp/env/MyBean”)

StackOverflow https://stackoverflow.com/questions/653966

  •  19-08-2019
  •  | 
  •  

Вопрос

Почему я получаю исключение 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.

Это было полезно?

Решение

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

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

Учебное пособие от Sun здесь и Пример стеклянной рыбы здесь.

Другие советы

Я не уверен, верно ли это для Glassfish или нет, но в случае JBOSS, если вы включите DEBUG, вы можете заметить имя jndi, которое будет использоваться.

Например, во время развертывания сеансового компонента с именем DemoBean вы увидите следующий журнал в файле server.log:-

2009-07-24 09:08:18,747 ОТЛАДКА [org.jboss.ejb3.без состояния.StatelessDelegateWrapper] Создание jboss.j2ee:jar=SessionBeanDemo.jar ,имя=DemoBean,сервис =EJB3 2009-07-24 09:08:18,747 ОТЛАДКА [org.jboss.ejb3.ProxyDeployer] нет объявленных удаленных привязок для :DemoBean 2009-07-24 09:08:18,747 ОТЛАДКА [org.jboss.ejb3.ProxyDeployer] для DemoBean есть удаленные интерфейсы 2009-07-24 09:08:18,747 ОТЛАДКА [org.jboss.ejb3.ProxyDeployer] удаленная привязка по умолчанию имеет jndiName Дембельский/удаленный

Затем в вашем клиентском коде вы можете посмотреть это следующим образом:-

        InitialContext ctx;
        try {
            ctx = new InitialContext();
            DemoBeanRemote demo = (DemoBeanRemote) ctx.lookup("DemoBean/remote");
            System.out.println(demo.sayHello());
        } catch (NamingException e) {
            e.printStackTrace();
        } 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top