Невозможно создать начальный контекст из клиента Swing - PullRequest
0 голосов
/ 17 октября 2019

Пожалуйста, смотрите код ниже:

try {
            //InitialContext ic = new InitialContext();
            Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY,  
             "com.sun.enterprise.naming.SerialInitContextFactory");
            Context ctx = new InitialContext(env);      

            MySessionRemote hb = (MySessionRemote) ctx.lookup("MySessionRemote");
            System.out.println(hb.getResult());
        } catch (NamingException ex) {
            ex.printStackTrace();
        }

Ошибка, которую я получаю из приложения Swing: :(javax.naming.NoInitialContextException) javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]

Я некоторое время не работал с Java, так что это может быть довольнопростой.

Обновление

Я использую версию 4.1 Glassfish. Я добавил ссылки на следующие jar-файлы внутри проекта NetBeans:

appserv-rt.jar
gf-client.jar
javaee.jar

Теперь я могу получить InitialContext. Тем не менее, я не могу искать bean-компонент, т.е. эта строка завершается ошибкой:

MySessionRemote hb = (MySessionRemote) ctx.lookup("ejb.MySessionRemote");

Исключением является NamingException, т.е. Lookup Failed. Я считаю, что имя бобов может быть неправильным. Вот бин:

пакет ejb;

import javax.annotation.Resource;
import javax.ejb.Remote;
@Resource(name = "MySessionRemote")
@Remote
public interface MySessionRemote {
    public String getResult();
}

Каким должно быть имя бина?

1 Ответ

0 голосов
/ 17 октября 2019

Какой сервер приложений вы используете? Например, при использовании Glassfish этот класс можно найти в файле glassfish-naming.jar. Этот JAR должен быть на вашем пути к классам. Я предполагаю, что другие серверы приложений имеют аналогичный файл JAR.

На самом деле, когда у вас есть этот JAR на вашем пути к классам, вы можете просто использовать конструктор no-args InitialContext, так как JAR уже содержит jndi.propertiesфайл со следующим содержимым:

java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory
java.naming.factory.url.pkgs=com.sun.enterprise.naming
# Required to add a javax.naming.spi.StateFactory for CosNaming that
# supports dynamic RMI-IIOP.
java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl
...