#java #glassfish-3
#java #glassfish-3
Вопрос:
Я использую последнюю версию Eclipse для разработки EJB 3 под Glassfish 3. Я создаю новый экземпляр сервера Glassfish в Eclipse, пишу простой EJB, развертываю и успешно.
Сейчас я пишу клиент, но он всегда выдает мне ошибку, подобную этой
java.lang.RuntimeException: Orb initialization erorr
at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:148)
at com.sun.enterprise.naming.impl.SerialContext.getORB(SerialContext.java:365)
at com.sun.enterprise.naming.impl.SerialContext.getProviderCacheKey(SerialContext.java:372)
at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:402)
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:347)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:504)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.client.Test.main(Test.java:22)
Caused by: java.lang.NullPointerException
at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:120)
... 8 more
Exception in thread "main" javax.naming.NamingException: Lookup failed for 'helloRemote' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is java.lang.RuntimeException: Orb initialization erorr]]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.client.Test.main(Test.java:22)
Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is java.lang.RuntimeException: Orb initialization erorr]
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:352)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:504)
... 3 more
Caused by: java.lang.RuntimeException: Orb initialization erorr
at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:148)
at com.sun.enterprise.naming.impl.SerialContext.getORB(SerialContext.java:365)
at com.sun.enterprise.naming.impl.SerialContext.getProviderCacheKey(SerialContext.java:372)
at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:402)
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:347)
... 4 more
Caused by: java.lang.NullPointerException
at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:120)
... 8 more
клиентский код выглядит следующим образом
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
InitialContext ic = new InitialContext(props);
HelloRemote remote = (HelloRemote) ic.lookup("helloRemote");
System.out.println(remote.echo("john"));
Вы знаете почему? это «com.sun.enterprise.naming.SerialInitContextFactory » отсутствует в пути к классу?
Исходный код находится здесь http://www.mediafire.com/file/278rc1tpip0rjku/EJBApp2.rar
Я ценю вашу помощь.
Комментарии:
1. У кого-то другого было то, что легко могло быть такой же проблемой на forums.java.net/node/794493 они заставили это работать
2. в моем случае не работает. та же ошибка
3. Смотрите Шаг 3 из часто задаваемых вопросов по EJB : Вам нужно
gf-client.jar
в вашемCLASSPATH
.
Ответ №1:
Чтобы решить эту проблему, вам просто нужно добавить внешний jar «appserv-rt.jar » в пути сборки клиента.
Вы можете найти его в папке …glassfishv3 glassfish библиотека
Или создайте пакет с этим jar и всеми его зависимостями, чтобы добавить его в BP
Это мой код
InitialContext ctx = new InitialContext();
HelloWorld helloWorldRemote = (HelloWorld) ctx.lookup("ejb/helloWorldBeanJndiName");
System.out.println(helloWorldRemote.sayHello());
Без файла jar я получил ту же ошибку, а с помощью консоли я получаю «Привет».
Комментарии:
1. Библиотека appserv-rt.jar решена моя проблема, «вызванная: java.lang.RuntimeException: ошибка инициализации Orb». Спасибо!
Ответ №2:
Судя по заданным вами свойствам, это должен быть автономный клиент.
Убедитесь, что вы включили gf-client.jar к вашему пути к классу, чтобы это сработало. (glassfishlibgf-client.jar )
Вам также не нужно устанавливать заданные вами свойства. Чтобы указать нелокальное расположение вашего сервера или альтернативный порт, какой бы вы ни установили:
prop.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
prop.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
Возможно, вы также захотите перейти к разделу «Как мне получить доступ к удаленному компоненту EJB из автономного Java-клиента?» на:
http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html#StandaloneRemoteEJB
Ответ №3:
Мне кажется, что вы пытаетесь установить соединение из приложения, которое не развернуто на вашем сервере, которое обрабатывает connnectionpool
Ответ №4:
У меня была похожая ошибка:
java.lang.RuntimeException: Orb initialization erorr at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:180)
которая была вызвана
java.lang.NullPointerException at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:152)
Моим решением было добавить jar, содержащий GlassFishORBFactoryImpl.class который реализует интерфейс GlassFishORBHelper.