Я пытаюсь подключиться от автономного клиента swing (работающего в отдельной JVM на клиентской машине) к серверу Glassfish.
В настоящее время я использую следующие настройки из Netbeans, и все работает отлично:
System.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
System.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
System.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
System.setProperty("org.omg.CORBA.ORBInitialHost", "192.168.1.3");
System.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
InitialContext context = new InitialContext();
Но когда я пытаюсь запустить скомпилированный клиент с консоли, набрав "java -jar client.jar", я получаю следующую ошибку:
D:\workspace\gf-client\dist>java -jar gf-client.jar
17.08.2012 11:07:38 ch.client.core.ServerContext getInitialContext SCHWERWIEGEND: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.init(Unknown Source)
at javax.naming.InitialContext.<init>(Unknown Source)
at ch.lawsuite.core.ServerContext.getInitialContext(ServerContext.java:2 7)
at ch.client.core.remote.Facades.initialize(Facades.java:68)
at ch.client.core.Client.main(Client.java:57) Caused by: java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialIni tContextFactory
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.sun.naming.internal.VersionHelper12.loadClass(Unknown Source)
... 7 more Exception in thread "main" java.lang.NullPointerException
at ch.client.core.remote.Facades.initialize(Facades.java:69)
at ch.client.core.Client.main(Client.java:57)
Кто-нибудь полезная идея?
Большое спасибо за вашу помощь заранее!
Заглянув в файл MANIFEST.MF библиотеки gf-client.jar, я заметил, что на нем есть еще несколько других jar-libs. Чтобы запустить клиент за пределами платформы netbeans, мне пришлось скопировать все эти библиотеки в окончательную сборку собственного приложения. Тогда он работает отлично...: -)
Вам нужен интерфейс удаленного EJB, когда ваше клиентское приложение живет на одной JVM, отличной от той, где размещен модуль EJB. Другими словами:
ИЛИ
Давайте рассмотрим первый сценарий, в котором как клиентское приложение, так и модуль EJB живут на разных JVM на той же машине.
В соответствии с документацией автономные java-клиенты должны явно использовать глобальное имя JNDI для поиска удаленного EJB. Кроме того, Glassfish не требует каких-либо инициализации свойств для вызова конструктора InitialContext(). Таким образом, клиентское приложение может вызвать EJB, используя следующий фрагмент:
InitialContext context = new InitialContext();
_RemoteEjbInterface ejbBean = (_RemoteEjbInterface) context.lookup("java:global/DeployedEJBAppName/EjbImplClass!com.sam._RemoteEjbInterface");
Учетная запись для вышеуказанного шага (3), добавив эту запись в приложение-клиент POM:
<dependency>
<groupId>org.glassfish.main.appclient.client</groupId>
<artifactId>gf-client</artifactId>
<version>3.1.2</version>
<scope>system</scope>
<systemPath>C:/glassfish3/glassfish/lib/gf-client.jar</systemPath>
</dependency>
Учет этого шага (4) с помощью зависимости POM, указывающей на ваш remote_interface.jar в вашем локальном репозитории maven при условии, что вы его установили. Следуйте этому, чтобы узнать, как.
Ниже приведена другая документация для ссылки
Вам не хватает jar, содержащего класс com.sun.enterprise.naming.SerialInitialContextFactory в вашем пути к классам. Добавьте его в манифест вашей клиентской банки.