Как определить имя во время поиска контекста сессионного компонента с сохранением состояния? - PullRequest
0 голосов
/ 21 июня 2019

Я устанавливаю сессионный компонент с сохранением состояния и хочу вызвать его с context.lookup (name), но не знаю, как правильно определить переменную name.

Я работаю с Intellij и какНасколько я знаю, нет способа автоматически сгенерировать этот путь по сравнению с NetBeans.Я пробовал несколько способов, используя указание, которое я нашел для этого имени: java: scope [/ app-name] / module-name / bean-name [! Полностью определенное-interface-name] Однако я всегда получаю следующую ошибку javax.naming.NamingException: не удалось выполнить поиск для "RememberEJB" в SerialContext [myEnv = {java.naming.factory.initial = com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs = com.sun.enterprise.naming} [Исключением корня является javax.naming.NameNotFoundException: RememberEJB не найдено]

Ниже приведенометод, который вызывает функцию:

public Response getRememberedPost() {
    try {
        javax.naming.Context context = new InitialContext(); // Could also be InitialContext context = new InitialContext();
        RememberBean rememberBean = (RememberBean) context.lookup("RememberEJB");
        return Response.ok(rememberBean).build();
    }
    catch (NamingException e) {
        e.printStackTrace();
        return Response.noContent().build();
    }
}

Я ожидаю, что переменная имени должна быть чем-то вроде «java: global / project-name / folder-for-beans / RememberEJB! src.Beans.RememberLocal», ноэто все равно дает ту же ошибку.

Ответы [ 2 ]

0 голосов
/ 23 июня 2019

Я попробовал ответ, данный Ахмедом Раджем, но он все еще не работал должным образом. В конце концов я нашел правильное имя, посмотрев журнал сервера при запуске, который показал JNDI-имя моего компонента с состоянием. В моем случае это имя показано ниже.

 RememberBean rememberBean = (RememberBean) context.lookup("java:global/DistributedGlassfish_ear_exploded/ejb/RememberEJB!Beans.RememberBean");

Это было очень близко к тому, что я пробовал раньше, я только не ожидал, что '_ear_exploded' также должен быть включен.

0 голосов
/ 22 июня 2019

Ниже вы можете обратиться к учебному пособию по Java EE :

Доступ к локальным корпоративным компонентам с использованием представления без интерфейса
Клиентский доступ к корпоративному компоненту, которыйпредоставляет локальное представление без интерфейса с помощью внедрения зависимостей или поиска JNDI.

  • Чтобы получить ссылку на представление без интерфейса корпоративного компонента с помощью внедрения зависимостей, используйтеjavax.ejb.EJB аннотация и указание класса реализации корпоративного компонента:

    @EJB    
    ExampleBean exampleBean;
    
  • Чтобы получить ссылку на представление без интерфейса для корпоративного компонента посредством поиска JNDI, используйте javax.naming.Метод поиска интерфейса .InitialContext:

    ExampleBean exampleBean = (ExampleBean)InitialContext.lookup("java:module/ExampleBean");
    

Итак, в вашем случае:

    RememberBean rememberBean = (RememberBean)context.lookup("java:module/RememberEJB");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...