powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как вызвать удалённый метод в EJB из GUI приложения?
69 сообщений из 69, показаны все 3 страниц
Как вызвать удалённый метод в EJB из GUI приложения?
    #37665609
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть Enterprise приложение, которое состоит из WAR - вебмодуля и EJB-модуля.
В EJB-модуле есть Session Bean c удалённым интерфейсом:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
package NewSessionBeanR;
import javax.ejb.Stateless;
@Stateless
public class NewSessionBeanR implements NewSessionBeanRRemote {
    @Override
    public String businessMethodR() {
        return "Hello from EJB businessMethodR";
    }
}



(RMI3-war - название проекта)
Всё это работает на GlassFish3.
И есть у меня вот такой вот сервлет, который можно вызвать запросом через браузер: http://127.0.0.1:8888/RMI3-war/MyServlet.
На экране я вижу:
Servlet MyServlet at /RMI3-war dddd
Hello from EJB businessMethodR
То есть (!) удалённый (!) бизнес-метод из EJB-модуля вызывается!


Код сервлета:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
package web;

import NewSessionBeanR.NewSessionBeanRRemote;
import java.io.IOException;
import java.io.PrintWriter;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "MyServlet", urlPatterns = {"/MyServlet"})
public class MyServlet extends HttpServlet {
    @EJB
    private NewSessionBeanRRemote newSessionBeanR;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet MyServlet</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet MyServlet at " + request.getContextPath() + " dddd</h1>");
            out.println("<h3>");
            //out.println(newSessionBean2.businessMethod2());
            out.println(newSessionBeanR.businessMethodR());
            out.println("</h3>");
            out.println("</body>");
            out.println("</html>");
        } finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}




А как мне сделать то же самое из приложения с GUI? Например, из обычного Java-класса?
Как мне вызвать бизнес-метод EJB-модуля из Java-приложения, обладающего GUI?
Тут вроде, понятно - и WAR и EJB находятся на GlassFish - на одном сервере - в одном месте. Соответственно они как-то там находят друг друга по именам, точнее WAR находит EJB по имени и как-то вызывает его метод.
А как быть, если у нас приложение, которое не на GlassFish?
Оно же должно знать host и port (socket) где находится GlassFish...
Если создать Enterprise Application CLient и вызвать в нём EJB-метод (воспользоваться вставкой кода), то получится вот это:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
package rmi3client;

import NewSessionBeanR.NewSessionBeanRRemote;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import javax.ejb.EJB;

public class Main {
    @EJB
    private static NewSessionBeanRRemote newSessionBeanR;

    //@Override
    public String helloWorld() {
        return "Hello, world! Hello Again!!!";
    }
    
    public static void main(String[] args) {
        System.out.println(newSessionBeanR.businessMethodR());
    }
}



В NetBeans это как-то работает. То есть System.out.println(newSessionBeanR.businessMethodR()); выводит строку "Hello from EJB businessMethodR". А из консоли 'java -jar RMI3-client.jar' вываливает исключения!
Вот и вопрос:
Этому приложению надо же знать сокет сервера, чтоб вызвать удалённый метод на сервере GlassFish, а где тут сокет? А нету тут нигде сокета! Нету метода, который бы просил сокет в качестве параметра. Есть просто:
Код: sql
1.
2.
    @EJB
    private static NewSessionBeanRRemote newSessionBeanR;


Какая-то анотация @EJB и всё...

Вот такая проблема.

Если клиент - браузер, то понятно. А если клиент - хост где-то в сети, то не понятно как вызвать удалённый метод на сервере приложений.
Может кто-нибудь помочь в этом вопросе, а то я запутался?
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37665620
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот и выросло поколение, которое пишет EJB и даже не знает что такое JNDI. Sun/Oracle своего добились.
http://wiki.netbeans.org/CreatingEJB3UsingNetbeansAndGlassfish
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37665635
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСоответственно они как-то там находят друг друга по именам, точнее WAR находит EJB по имени и как-то вызывает его метод.

тебе надо разобраться как оно "находит"
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37665737
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автортебе надо разобраться как оно "находит"
Через JNDI... да?
http://wiki.netbeans.org/CreatingEJB3UsingNetbeansAndGlassfish Creating a Java Stand-Alone Client

As mentioned above, you cannot use the @EJB annotation out of a Glassfish server environment, therefore in a Stand-Alone application you must use the JNDI. Below following an example of how to call a EJB from a Java Stand-Alone client.


http://www.javable.com/columns/serv_side/workshop/10/ch5/
Кажется понимаю идею. Что-то типа DNS.


Надо понять где тут сокеты зарыты. Тогда мне понятно станет, а так пока не понятно.


авторBy default, the appserv-rt.jar brings a jndi.properties file, but I will show you how to create one. Why? Because when you are running the client in the machine different than the app server, you must override this file.

Кажется что-то понимаю. Есть файл, в котором как раз прописаны сокеты. Надо его найти.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37665769
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FAQ хотя бы прочитайте. Куча вопросов и ответов по вашей теме.
http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html

На счет сокетов. Когда создаётся InitialContext(), то там прописывается URL к JNDI через properties. Но если использовать на клиенте либы именно из GlassFish, то там всё по-умолчанию уже прописано для сервера. В том числе URL с портами.
Об этом тоже есть в FAQ
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37666935
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почитал FAQ и http://wiki.netbeans.org/CreatingEJB3UsingNetbeansAndGlassfish
Нашёл готовый проект http://forum.sources.ru/index.php?showtopic=339968.
Почему-то он работает, а мой проект не работает.
И то с оговоркой - работает только из под NetBeans'а, а из командной строки не работает.
Пробовал запускать так:
java -classpath "C:\Program Files\glassfish-3.1.1\glassfish\modules" -jar "D:\Tasks\Java\MyRMI\ForumExample\ClientEJB\ClientEJB\dist\ClientEJB.jar"

java -classpath $GLASSFISH_HOME/glassfish/lib/gf-client.jar D:\Tasks\Java\MyRMI\ForumExample\ClientEJB\ClientEJB\dist\ClientEJB.jar

java -cp "C:\Program Files\glassfish-3.1.1\glassfish\modules\glassfish-naming.jar" -jar D:\Tasks\Java\MyRMI\ForumExample\ClientEJB\ClientEJB\dist\ClientEJB.jar

java -cp "C:\Program Files\glassfish-3.1.1\glassfish\modules\gf-client.jar;C:\Program Files\glassfish-3.1.1\glassfish\lib\javaee.jar;C:\Program Files\glassfish-3.1.1\glassfish\lib\appserv-rt.jar;C:\Program Files\glassfish-3.1.1\glassfish\lib\jndi-properties.jar" -jar D:\Tasks\Java\MyRMI\ForumExample\ClientEJB\ClientEJB\dist\ClientEJB.jar

Вылазиет вот это:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
Exception in thread "main" java.lang.NoClassDefFoundError: org/jvnet/hk2/component/HabitatFactory
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(Unknown Source)
	at java.security.SecureClassLoader.defineClass(Unknown Source)
	at java.net.URLClassLoader.defineClass(Unknown Source)
	at java.net.URLClassLoader.access$000(Unknown Source)
	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.ClassLoader.loadClassInternal(Unknown Source)
	at com.sun.enterprise.naming.impl.SerialInitContextFactory.<init>(SerialInitContextFactory.java:232)
	at com.sun.enterprise.naming.SerialInitContextFactory.<init>(SerialInitContextFactory.java:62)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at java.lang.Class.newInstance0(Unknown Source)
	at java.lang.Class.newInstance(Unknown Source)
	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 clientejb.ClientEJB.main(ClientEJB.java:26)
Caused by: java.lang.ClassNotFoundException: org.jvnet.hk2.component.HabitatFactory
	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.ClassLoader.loadClassInternal(Unknown Source)
	... 25 more



Ну, ладно...

Скопировал код найденного проекта под чистую в свой проект.
Не работает!
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/corba/ee/spi/folb/GroupInfoServiceObserver
	at com.sun.enterprise.naming.SerialInitContextFactory.<init>(SerialInitContextFactory.java:62)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at java.lang.Class.newInstance0(Class.java:355)
	at java.lang.Class.newInstance(Class.java:308)
	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)
	at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
	at javax.naming.InitialContext.init(InitialContext.java:223)
	at javax.naming.InitialContext.<init>(InitialContext.java:197)
	at ejbclient2.EJBClient2.main(EJBClient2.java:74)
Caused by: java.lang.ClassNotFoundException: com.sun.corba.ee.spi.folb.GroupInfoServiceObserver
	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
	... 12 more
Java Result: 1


Включил в библиотеки каталоги C:\Program Files\glassfish-3.1.1\glassfish\modules и C:\Program Files\glassfish-3.1.1\glassfish\lib
Включил в библиотеки файлы appserv-rt.jar и javaee.jar.
Я так понимаю, раз код один и тот же, то проблема именно в подключаемых библиотеках.


Есть у меня ещё 1 проект:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
            try {
            Properties prop = new Properties();
            prop.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
            prop.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
            prop.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
            InitialContext context = new InitialContext(prop);
            HelloRemote h = (HelloRemote)context.lookup("java:global/MyEnterpriseApplication/MyEnterpriseApplication-ejb/Hello");
            System.out.println(h.GetGreeting());
            
            //NewSessionBeanR h = (NewSessionBeanR)context.lookup("java:global/MyEnterpriseApplication/MyEnterpriseApplication-ejb/Hello");
            //NewSessionBeanR h = (NewSessionBeanR)context.lookup("java:global/RMI3-ejb/NewSessionBeanRRemote");
            //NewSessionBeanR h = (NewSessionBeanR)context.lookup("java:global/RMI3-ejb/NewSessionBeanR");
            //NewSessionBeanR h = (NewSessionBeanR) context.lookup("NewSessionBeanR.NewSessionBeanRRemote");
            
            //System.out.println(h.businessMethodR());
        } catch (Exception ex) {
            System.out.println("Exception: " + ex.toString());
        }





Там вот такие исключения:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
Feb 17, 2012 12:33:01 PM com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyClient
INFO: Cannot find javadb client jar file, derby jdbc driver will not be available by default.
Feb 17, 2012 12:33:03 PM com.sun.enterprise.iiop.security.SecurityMechanismSelector postConstruct
SEVERE: IIOP1005: An exception has occured in the ejb security initialization.
org.jvnet.hk2.component.ComponentException: injection failed on org.glassfish.api.invocation.InvocationManagerImpl.invHandlers with class [Lorg.glassfish.api.invocation.ComponentInvocationHandler;
	at org.jvnet.hk2.component.InjectionManager.error_injectionException(InjectionManager.java:277)
	at org.jvnet.hk2.component.InjectionManager.inject(InjectionManager.java:159)
	at org.jvnet.hk2.component.InjectionManager.inject(InjectionManager.java:91)
	at com.sun.hk2.component.AbstractCreatorImpl.inject(AbstractCreatorImpl.java:126)
	at com.sun.hk2.component.ConstructorCreator.initialize(ConstructorCreator.java:91)
	at com.sun.hk2.component.AbstractCreatorImpl.get(AbstractCreatorImpl.java:82)
	at com.sun.hk2.component.SingletonInhabitant.get(SingletonInhabitant.java:67)
	at com.sun.hk2.component.EventPublishingInhabitant.get(EventPublishingInhabitant.java:139)
	at com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:76)
	at org.jvnet.hk2.component.Habitat.getByContract(Habitat.java:1042)
	at org.jvnet.hk2.component.Habitat.getComponent(Habitat.java:777)
	at com.sun.enterprise.iiop.security.SecurityMechanismSelector.postConstruct(SecurityMechanismSelector.java:166)
	at com.sun.hk2.component.AbstractCreatorImpl.inject(AbstractCreatorImpl.java:131)
	at com.sun.hk2.component.ConstructorCreator.initialize(ConstructorCreator.java:91)
	at com.sun.hk2.component.AbstractCreatorImpl.get(AbstractCreatorImpl.java:82)
	at com.sun.hk2.component.SingletonInhabitant.get(SingletonInhabitant.java:67)
	at com.sun.hk2.component.EventPublishingInhabitant.get(EventPublishingInhabitant.java:139)
	at com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:76)
	at org.jvnet.hk2.component.Habitat.getBy(Habitat.java:1048)
	at org.jvnet.hk2.component.Habitat.getByType(Habitat.java:1029)
	at com.sun.hk2.component.InjectInjectionResolver.getComponentInjectValue(InjectInjectionResolver.java:159)
	at com.sun.hk2.component.InjectInjectionResolver.getValue(InjectInjectionResolver.java:90)
	at org.jvnet.hk2.component.InjectionManager.inject(InjectionManager.java:141)
	at org.jvnet.hk2.component.InjectionManager.inject(InjectionManager.java:91)
	at com.sun.hk2.component.AbstractCreatorImpl.inject(AbstractCreatorImpl.java:126)
	at com.sun.hk2.component.ConstructorCreator.initialize(ConstructorCreator.java:91)
	at com.sun.hk2.component.AbstractCreatorImpl.get(AbstractCreatorImpl.java:82)
	at com.sun.hk2.component.SingletonInhabitant.get(SingletonInhabitant.java:67)
	at com.sun.hk2.component.EventPublishingInhabitant.get(EventPublishingInhabitant.java:139)
	at com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:76)
	at org.jvnet.hk2.component.Habitat.getBy(Habitat.java:1048)
	at org.jvnet.hk2.component.Habitat.getByType(Habitat.java:1029)
	at org.jvnet.hk2.component.Habitat.getComponent(Habitat.java:779)
	at com.sun.enterprise.iiop.security.Lookups._getSecurityContextUtil(Lookups.java:97)
	at com.sun.enterprise.iiop.security.Lookups.getSecurityContextUtil(Lookups.java:92)
	at com.sun.enterprise.iiop.security.SecClientRequestInterceptor.<init>(SecClientRequestInterceptor.java:119)
	at com.sun.enterprise.security.appclient.AppclientIIOPInterceptorFactory.getClientInterceptorInstance(AppclientIIOPInterceptorFactory.java:127)
	at com.sun.enterprise.security.appclient.AppclientIIOPInterceptorFactory.createClientRequestInterceptor(AppclientIIOPInterceptorFactory.java:96)
	at org.glassfish.enterprise.iiop.impl.GlassFishORBInitializer.post_init(GlassFishORBInitializer.java:132)
	at com.sun.corba.ee.impl.interceptors.PIHandlerImpl.postInitORBInitializers(PIHandlerImpl.java:915)
	at com.sun.corba.ee.impl.interceptors.PIHandlerImpl.initialize(PIHandlerImpl.java:265)
	at com.sun.corba.ee.impl.orb.ORBImpl.postInit(ORBImpl.java:643)
	at com.sun.corba.ee.impl.orb.ORBImpl.set_parameters(ORBImpl.java:704)
	at com.sun.corba.ee.impl.orb.ORBImpl.setParameters(ORBImpl.java:691)
	at com.sun.corba.ee.spi.osgi.ORBFactory.initialize(ORBFactory.java:107)
	at org.glassfish.enterprise.iiop.impl.GlassFishORBManager.initORB(GlassFishORBManager.java:581)
	at org.glassfish.enterprise.iiop.impl.GlassFishORBManager.getORB(GlassFishORBManager.java:263)
	at org.glassfish.enterprise.iiop.impl.GlassFishORBFactoryImpl.createORB(GlassFishORBFactoryImpl.java:93)
	at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:152)
	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 rmiclient.RMIClient.main(RMIClient.java:117)
Caused by: org.jvnet.hk2.component.ComponentException: Failed to create class com.sun.enterprise.resource.pool.PoolManagerImpl
	at com.sun.hk2.component.ConstructorCreator.create(ConstructorCreator.java:71)
	at com.sun.hk2.component.AbstractCreatorImpl.get(AbstractCreatorImpl.java:80)
	at com.sun.hk2.component.SingletonInhabitant.get(SingletonInhabitant.java:67)
	at com.sun.hk2.component.EventPublishingInhabitant.get(EventPublishingInhabitant.java:139)
	at com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:76)
	at org.jvnet.hk2.component.Habitat$5.get(Habitat.java:701)
	at java.util.AbstractList$Itr.next(AbstractList.java:345)
	at java.util.AbstractCollection.toArray(AbstractCollection.java:171)
	at com.sun.hk2.component.InjectInjectionResolver.getArrayInjectValue(InjectInjectionResolver.java:113)
	at com.sun.hk2.component.InjectInjectionResolver.getValue(InjectInjectionResolver.java:81)
	at org.jvnet.hk2.component.InjectionManager.inject(InjectionManager.java:141)
	... 55 more
Caused by: java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/resource/ResourceException
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
	at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
	at java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
	at java.lang.Class.getConstructor0(Class.java:2699)
	at java.lang.Class.newInstance0(Class.java:326)
	at java.lang.Class.newInstance(Class.java:308)
	at com.sun.hk2.component.ConstructorCreator.create(ConstructorCreator.java:65)
	... 65 more
Exception in thread "main" java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/ejb/RemoveException
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
	at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
	at java.lang.Class.privateGetPublicMethods(Class.java:2547)
	at java.lang.Class.privateGetPublicMethods(Class.java:2557)
	at java.lang.Class.privateGetPublicMethods(Class.java:2557)
	at java.lang.Class.getMethods(Class.java:1410)
	at com.sun.corba.ee.impl.presentation.rmi.IDLTypesUtil.validateRemoteInterface(IDLTypesUtil.java:96)
	at com.sun.corba.ee.impl.presentation.rmi.IDLNameTranslatorImpl.<init>(IDLNameTranslatorImpl.java:226)
	at com.sun.corba.ee.impl.presentation.rmi.IDLNameTranslatorImpl.<init>(IDLNameTranslatorImpl.java:65)
	at com.sun.corba.ee.impl.presentation.rmi.IDLNameTranslatorImpl$2.run(IDLNameTranslatorImpl.java:169)
	at com.sun.corba.ee.impl.presentation.rmi.IDLNameTranslatorImpl$2.run(IDLNameTranslatorImpl.java:167)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.corba.ee.impl.presentation.rmi.IDLNameTranslatorImpl.get(IDLNameTranslatorImpl.java:166)
	at com.sun.corba.ee.impl.presentation.rmi.PresentationManagerImpl$ClassDataImpl.<init>(PresentationManagerImpl.java:153)
	at com.sun.corba.ee.impl.presentation.rmi.PresentationManagerImpl$1.lookup(PresentationManagerImpl.java:103)
	at com.sun.corba.ee.impl.presentation.rmi.PresentationManagerImpl$1.lookup(PresentationManagerImpl.java:100)
	at com.sun.corba.ee.spi.orbutil.misc.WeakCache.get(WeakCache.java:114)
	at com.sun.corba.ee.impl.presentation.rmi.PresentationManagerImpl.getClassData(PresentationManagerImpl.java:131)
	at com.sun.corba.ee.impl.presentation.rmi.StubFactoryFactoryDynamicBase.createStubFactory(StubFactoryFactoryDynamicBase.java:91)
	at com.sun.corba.ee.impl.util.Utility.loadStub(Utility.java:835)
	at com.sun.corba.ee.impl.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:252)
	at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:137)
	at com.sun.ejb.EJBUtils.lookupRemote30BusinessObject(EJBUtils.java:406)
	at com.sun.ejb.containers.RemoteBusinessObjectFactory.getObjectInstance(RemoteBusinessObjectFactory.java:75)
	at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
	at com.sun.enterprise.naming.impl.SerialContext.getObjectInstance(SerialContext.java:556)
	at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:514)
	at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at rmiclient.RMIClient.main(RMIClient.java:117)
Java Result: 1



Что не так-то?
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37667021
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не находит все библиотеки что используются. Надо найти и подключить. Можно в нетбинсе в том проекте что запускается открыть ветку либрариес и посмотреть что там подключено.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37667042
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, да. Это да. Но он не работает из командной строки сам по себе почему-то, хотя и тащит 50 МБайт библиотек.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37667246
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С библиотеками, кажется разобрался. Но всё же...
Если выполнить файл из командной строки:
java -jar D:\Tasks\Java\MyRMI\EJBClient\dist\EJBClient.jar
То получается вот такое:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/corba/ee/spi/folb/GroupInfoServiceObserver
	at com.sun.enterprise.naming.SerialInitContextFactory.<init>(SerialInitContextFactory.java:62)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at java.lang.Class.newInstance0(Unknown Source)
	at java.lang.Class.newInstance(Unknown Source)
	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 rmiclient.RMIClient.main(RMIClient.java:116)
Caused by: java.lang.ClassNotFoundException: com.sun.corba.ee.spi.folb.GroupInfoServiceObserver
	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.ClassLoader.loadClassInternal(Unknown Source)
	... 12 more



Читал где-то, что надо куда-то приткнуть Classpath... но что с ним делать и куда вписывать не понятно. По идее у меня и так все библиотеки лежат рядом с JAR'ником - какой ещё Classpath?
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37667261
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в факе описано
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37667397
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То что там написано я читал:

Включить $GLASSFISH_HOME/glassfish/lib/gf-client.jar в клиентский classpath.
Предполагается, что классы приложения лежат в /home/user1/myclasses и главный клиентский класс называется acme.MyClient.
java -classpath $GLASSFISH_HOME/glassfish/lib/gf-client.jar:/home/user1/myclasses acme.MyClient
Отметьте для себя, что классы Java EE 6 API автоматически включаются в gf-client.jar, поэтому нет необходимости явно добавлять javaee.jar и в classpath. gf-client.jar ссылается на многие другие .jars из дирректории, в которую был установлен GlassFish, поэтому лучше ссылаться на него из установочной дирректории, чем копировать его и все другие .jars в другие места.
Помните, что gf-client.jar находится в $GLASSFISH_HOME/modules/gf-client.jar в GlassFish v3.

Я пробовал так:

java -classpath $GLASSFISH_HOME/glassfish/lib/gf-client.jar:D:\Tasks\Java\MyRMI\EJBClient\dist EJBClient.jar

java -classpath $GLASSFISH_HOME/glassfish/lib/gf-client.jar:D:\Tasks\Java\MyRMI\EJBClient\src\rmiclient RMIClient.java

java -classpath $GLASSFISH_HOME/glassfish/lib/gf-client.jar -jar D:\Tasks\Java\MyRMI\EJBClient\dist\EJBClient.jar

java -classpath C:\Program Files\glassfish-3.1.1\glassfish\lib\gf-client.jar -jar D:\Tasks\Java\MyRMI\EJBClient\dist\EJBClient.jar


Создал переменную окружения CLASSPATH=C:\Program Files\glassfish-3.1.1\glassfish\lib\gf-client.jar
И ничего не работает!


Хотя, стоп! Пересобрал...
И начало работать вот так:
Label1
Label2
Exception: javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]

Код:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
        System.out.println("Label1");
        try {
            Properties prop = new Properties();
            System.out.println("Label2");
            prop.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
            prop.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
            prop.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
            InitialContext context = new InitialContext(prop);
            System.out.println("Label3");
            //HelloRemote h = (HelloRemote)context.lookup("java:global/MyEnterpriseApplication/MyEnterpriseApplication-ejb/Hello");
            NewSessionBeanR h = (NewSessionBeanR)context.lookup("java:global/RMI3/RMI3-ejb/NewSessionBeanR");
            System.out.println("Label4");
            //System.out.println(h.GetGreeting());
            System.out.println(h.businessMethodR());
            System.out.println("Label5");
        } catch (Exception ex) {
            System.out.println("Exception: " + ex.toString());
        }



По крайней мере приложение запустилось!
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37667411
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000,

Да сколько можно Вам одно и то же талдычить, что ClassNotFoundException выбрасывается тогда, когда не найдет необходимый класс.
Вы ей-богу, как глухонемой. Прошу прощения за эмоциональность.
Начиная с 3-го сообщения у Вас постоянно падает это исключение, неужели трудно сделать соответствующие выводы?
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37667484
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczВот и выросло поколение, которое пишет EJB и даже не знает что такое JNDI. Sun/Oracle своего добились.
http://wiki.netbeans.org/CreatingEJB3UsingNetbeansAndGlassfish угу (
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37667837
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне не понятно как это так - в NetBeans работает, а само по себе нет.
Начал подключать библиотеки из GlassFish Folder\modules и дошёл до этого:
Код: sql
1.
2.
3.
4.
Label1
Label2
Label3
Exception: javax.naming.NamingException: Lookup failed for 'java:global/MyEnterpriseApplication/MyEnterpriseApplication-ejb/Hello' in SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=localhost, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=localhost, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is java.lang.NullPointerException]]


В NetBeans это работает, а в консоли нет.
Если добавить тупо все библиотеки, то не собирается, приходится как-то это вылавливать...
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37667844
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
catch (Exception ex) {
            System.out.println("Exception: " + ex.toString());
}


Патамушта ex.printStackTrace() надо использовать. Тогда станет ясно откуда NullPointerException.
Рано вы за EJB взялись. Вам бы с Java разобраться.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37667951
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
        System.out.println("Label1");
        try {
            Properties prop = new Properties();
            System.out.println("Label2");
            prop.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
            prop.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
            prop.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
            InitialContext context = new InitialContext(prop);
            System.out.println("Label3");
            HelloRemote h = (HelloRemote)context.lookup("java:global/MyEnterpriseApplication/MyEnterpriseApplication-ejb/Hello");
            //NewSessionBeanR h = (NewSessionBeanR)context.lookup("java:global/RMI3/RMI3-ejb/NewSessionBeanR");
            System.out.println("Label4");
            System.out.println(h.GetGreeting());
            //System.out.println(h.businessMethodR());
            System.out.println("Label5");
        } catch (Exception ex) {
            ex.printStackTrace();
            System.out.println("Exception: " + ex.toString());
        }



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
java.lang.NullPointerException
	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(Unknown Source)
	at rmiclient.RMIClient.main(RMIClient.java:112)
javax.naming.NamingException: Lookup failed for 'java:global/MyEnterpriseApplication/MyEnterpriseApplication-ejb/Hello' in SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=localhost, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=localhost, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is java.lang.NullPointerException]]
	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(Unknown Source)
	at rmiclient.RMIClient.main(RMIClient.java:112)
Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=localhost, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is java.lang.NullPointerException]
	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.NullPointerException
	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



Рано или не рано, но мне надо разобраться. А с Java обычными приложениями для меня всё понятно более менее.

Я пока не могу понять почему в NetBeans работает нормально, а в консоли ошибки. Наверное, библиотеки .jar в NetBeans'е все есть, а когда я запускаю из консоли, то приложение их не находит.

Может быть вот этого не хватает:
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)

Попробую поискать на jarvana.com

Хотя com.sun.enterprise.naming.impl.SerialContext - это glassfish-naming.jar, который подключен.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37667958
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Смотрю я на это и вижу:
Unable to acquire SerialContextProvider for SerialContext

Что-то не так с SerialContextProvider for SerialContext...
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37668003
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если на пальцах объяснять, то примерно так.

За жизненным циклом компонентов и injection зависимостей отвечает контейнер. У тебя есть аннотация @EJB и контейнер такую аннотацию должен обработать. В Java EE есть три вида контейнеров:
1. EJB контейнер - разруливает зависимости EJB
2. Web контейнер - разруливает зависимости у web компонентов
3. Application контейнер (это как раз твой случай), разруливает зависимости у клиентских классов.

Application контейнер зависит от поставщика, поэтому нужно смотреть документацию именно по серверу. NetBeans вся магию настройки Application контейнера берет на себя.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37668037
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vas0Если на пальцах объяснять, то примерно так.

За жизненным циклом компонентов и injection зависимостей отвечает контейнер. У тебя есть аннотация @EJB и контейнер такую аннотацию должен обработать. В Java EE есть три вида контейнеров:
1. EJB контейнер - разруливает зависимости EJB
2. Web контейнер - разруливает зависимости у web компонентов
3. Application контейнер (это как раз твой случай), разруливает зависимости у клиентских классов.

Application контейнер зависит от поставщика, поэтому нужно смотреть документацию именно по серверу. NetBeans вся магию настройки Application контейнера берет на себя.

да нет в нетбинсе магии. При старте он в класспат указывает все библиотеки. Библиотеки можно посмотреть в дереве проекта в ветке либрариес. Как подключать библиотеки для запуска (в командной строке ключём, в переменной класспат или в манифесте жара) можно посмотреть в факе.

это уже раз пять сказали. Нет смысла повторять.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37668054
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1024,

Не совсем так. Проблема ведь не в том что не все jar указаны. Грубого говоря, нужно получить stub`ы и запустить Application Client Container и уже "внутри" него свое приложение. Вот превое что нашел.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37668249
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vas0, спасибо за ссылочку.
http://blogs.steeplesoft.com/2011/02/java-ees-buried-treasure-the-application-client-container/

Внимательно всё почитал.
Там создаётся Enterprise приложение. EJB-модуль, который затем deploy'тся на сервер. Потом создаётся Enterprise Client, который и есть ACC - application client container.
Потом создаётся session bean и business method с удалённым интерфейсом. У меня это есть. Проблема с клиентом. Потом Enterprise Client deploy'тся, причём ручками из командной строки, на сервер. Если честно, не понял зачем. После того как клиетн был за'deploy'ен браузер обращается по адресу http://localhost:8080/EnterpriseApplication/ApplicationClient. Проходит пара минут в первый раз и как-то через JWS клиент запускается самостоятельно. Вот это я не понял. Как это происходит.
После этого описываются XML и в конце говорится, что теперь вы знаете официальный путь что делать в случае, если этот клиент должен быть на удалённом хосте.
So next time you need to access an EJB deployed to a remote application server, you know the official, portable way to get to it.
В этих XML что-то я ничего такого не увидел - не увидел официального пути как это сделать.
Сейчас попробую.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37668266
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создал вот такое приложение:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class Main {
    @EJB
    private static HelloRemote hello;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        myJFrame myfr=new myJFrame();
        myfr.setLocationRelativeTo(null);
        myfr.setVisible(true);
        String sst=hello.GetGreeting();
        myfr.set_jlabel(sst);
    }
}



Создал отдельный класс myJFrame, который просто рисует окошко с одним jLabel'ом и у которого есть метод установки текста jLabel'а.


Немного повозившись с командной строкой, я за'deploy'л своё приложение так:
asadmin deploy --retrieve G:\Java\MyRMI\ForumExample\EJBClientEnterprise\dist\localdir\ --force G:\Java\MyRMI\ForumExample\EJBClientEnterprise\dist\EJBClientEnterprise.ear


Получилось.


Но при попытке вызова приложения java -jar G:\Java\MyRMI\ForumExample\EJBClientEnterprise\dist\localdir\EJBClientEnterpriseClient.jar
у меня получается вот это:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
java.lang.NoClassDefFoundError: org/glassfish/appclient/client/acc/UserError
Caused by: java.lang.ClassNotFoundException: org.glassfish.appclient.client.acc.UserError
	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)
Could not find the main class: org.glassfish.appclient.client.AppClientFacade. Program will exit.
Exception in thread "main" 



Если зайти на http://127.0.0.1:8888/EJBClientEnterprise/EJBClientEnterpriseClient.jar то браузер предлагает его скачать...
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37668274
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поколдовал ещё...
За'deploy'ил из NetBeans'а.

Только не кидайтесь в меня камнями, но у меня та же проблема...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Exception in thread "main" java.lang.NoClassDefFoundError: ejb/HelloRemote
	at ejbcliententerprise.Main.main(Main.java:29)
Caused by: java.lang.ClassNotFoundException: ejb.HelloRemote
	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)
	... 1 more


Я знаю, что класс не найден ejb/HelloRemote, который находится в проекте Lib, но что с этим делать? Я подкладывал его в ту же дирректорию, где и исполняемый jar'ник, но результат такой же.
По крайней мере приложение стартует и я хотя бы окошко вижу - JFrame.
Но в JLabel ничего нету!
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37668279
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эх, наверное я в тот раз напутал - скачал не то.
За'deploy'ил всё ещё раз из NetBeans'а и зашёл сюда:
http://127.0.0.1:8888/MyEnterpriseApplication/EJBClientEnterprise

EJBClientEnterprise находится в составе с MyEnterpriseApplication.
Браузер предложил скачать JNLP файл. Ладно. Я скачал. Положил его рядом с jar'ником и ничего...

В NetBeans'е опять всё работает.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37668291
GregTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000,

Я никогда не работал с Glassfish. Но общий подход такой.
Наше ejb приложение условно должно состоять из 2 частей, это интерфейсов и их реализаций. Пакую наши интерфейсы в один jar.
Потом пакуюем нашу реализацию с интерфейсами в другой jar. Деплоем второй jar на сервер.

Теперь первый jar(c интерфейсами) подключаем к нашему десктоп приложению, а также подключаем клиентские библиотеки нашего сервера. В Jboss этот файл назывался jboss-client-all.jar.

Теперь про ваш случай. У вас явно нет в classpath нужных библиотек, внимательно прочитайте в документации к серверу приложения что нужно тащить на клиента.

Ещё одна важная деталь версии jar c интерфейсами должны совпадать с версией на сервере и клиенте.

P.S JNLP - это Java Web Start
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37668343
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лазию по всему Internet'у. Везде все советуют указывать classpath. Например, тут: http://forum.vingrad.ru/forum/topic-308037/view-all.html

У меня теперь есть 2 работающих из под NetBeans проекта.
Пробую так:

java -classpath "C:\Program Files\glassfish-3.1.1\glassfish\lib\gf-client.jar" -jar "G:\Java\MyRMI\EJBClient\dist\EJBClient.jar"

java -classpath "C:\Program Files\glassfish-3.1.1\glassfish\lib\gf-client.jar" -jar "G:\Java\MyRMI\ForumExample\MyEnterpriseApplication\MyEnterpriseApplication\build\EJBClientEnterprise.jar"

Ошибки все те же самые.

Или что-то не так опять я делаю? Или надо как-то по-другому этот classpath задавать?
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37668457
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё, я в тупике.
Код: sql
1.
java -classpath "C:\Program Files\glassfish-3.1.1\glassfish\lib\gf-client.jar" -jar "G:\Java\MyRMI\ForumExample\MyEnterpriseApplication\MyEnterpriseApplication\build\EJBClientEnterprise.jar"


Пришёл к одному и тому же и в Enterprise Application и в обычном Stand Alone Application:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
java.lang.NullPointerException
	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(Unknown Source)
	at ejbcliententerprise.Main.main(Main.java:54)
javax.naming.NamingException: Lookup failed for 'java:global/MyEnterpriseApplication/MyEnterpriseApplication-ejb/Hello' in SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=127.0.0.1, 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={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=127.0.0.1, 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.NullPointerException]]
	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(Unknown Source)
	at ejbcliententerprise.Main.main(Main.java:54)
Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=127.0.0.1, 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.NullPointerException]
	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.NullPointerException
	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


Ошибка одинаковая.
Выхода из неё не вижу.

Задам вопрос по-другому:
Хоть кто-нибудь когда-нибудь создавал подобные приложения? Они работают? И если создавал и работают, то на чём? На Glassfish?
Я перепробовал всё classpath задавал как переменную окружения, вставлял в командную строку, подключал и отключал библиотеки в куче разных комбинаций - облазил весь Internet и нигде я не увидел, чтоб кто-то решил это и написал, что у него получилось.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37668463
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GregTk
А вот вы говорите по JBoss. А на JBoss вы делали это - удалённый GUI, который вызывает метод EJB на JBoss'е?
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37668480
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OFF/2
авторИх там почти 200. Вы после каждой убранной библиотеки будете проводить полнообъемное тестирование?
хорошо при статике.exe в виндах. При загрузке Ось проверяет сама все зависимости и выдаёт что не хватает (Handle.dll). Правда тоже по одной, а не списком :)
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37668524
GregTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000,

Делал для версии Jboss 4.2.3 и Jboss 5.1, всё отлично работало. Как там в JBoss 6.0 незнаю, но там я уверен тоже самое.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37668574
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000,

ты должен перечислить в ключе ВСЕ библиотеки. И всё.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37668606
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В смысле ВСЕ?

Вот как я перечислял:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
java -classpath "C:\Program Files\glassfish-3.1.1\glassfish\lib\gf-client.jar" -jar "G:\Java\MyRMI\ForumExample\MyEnterpriseApplication\MyEnterpriseApplication\build\EJBClientEnterprise.jar"

java -classpath "C:\Program Files\glassfish-3.1.1\glassfish\lib\gf-client.jar; C:\Program Files\glassfish-3.1.1\glassfish\lib\appserv-rt.jar; C:\Program Files\glassfish-3.1.1\glassfish\lib\javaee.jar; C:\Program Files\glassfish-3.1.1\glassfish\lib\jndi-properties.jar; C:\Program Files\glassfish-3.1.1\glassfish\lib\glassfish-naming.jar" -jar "G:\Java\MyRMI\ForumExample\MyEnterpriseApplication\MyEnterpriseApplication\build\EJBClientEnterprise.jar"

java -cp "C:\Program Files\glassfish-3.1.1\glassfish\lib\gf-client.jar; C:\Program Files\glassfish-3.1.1\glassfish\lib\appserv-rt.jar; C:\Program Files\glassfish-3.1.1\glassfish\lib\javaee.jar; C:\Program Files\glassfish-3.1.1\glassfish\lib\jndi-properties.jar; C:\Program Files\glassfish-3.1.1\glassfish\lib\glassfish-naming.jar" -jar "G:\Java\MyRMI\ForumExample\MyEnterpriseApplication\MyEnterpriseApplication\build\EJBClientEnterprise.jar"


java -cp "C:\Program Files\glassfish-3.1.1\glassfish\lib\gf-client.jar; C:\Program Files\glassfish-3.1.1\glassfish\lib\appserv-rt.jar; C:\Program Files\glassfish-3.1.1\glassfish\lib\javaee.jar; C:\Program Files\glassfish-3.1.1\glassfish\lib\jndi-properties.jar; C:\Program Files\glassfish-3.1.1\glassfish\lib\glassfish-naming.jar" -jar G:\Java\MyRMI\EJBClient\dist\EJBClient.jar



Результат одинаковый во всех случаях. Ведь так же надо перечислять или как-то по-другому?
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37668657
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000,

Я когда то запускал на GlassFish, чисто в целях эксперимента.
Код: java
1.
2.
3.
4.
public class Application {
    @EJB
    private static HelloWorld service;
}

Фактически в этом коде у тебя кто - то, должен сделать injection. И вместо интерфейса у тебя должно должна здесь появиться работающая заглушка, которая будет отвечать за взаимодействие с сервером. Вообщем то насколько я понимаю, модификацией class path ты эту проблему никогда не решишь.

Фактически тебе нужно:
1 получить стабы, они генерируються при деплое приложения.
2 запустить Application Client Container
3 запуситить свое приложение.

В той ссылке которую я приводил, была же последовательность команд (примерно так я и делал)
asadmin deploy --retrieve localdir/ --force dist/EnterpriseApplication.ear
asadmin get-client-stubs --appname EnterpriseApplication localdir
appclient -jar localdir/EnterpriseApplicationClient.jar
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37668780
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vas0
Спасибо ВАМ ОГРОМНОЕ!!!
Кажется что-то получается!!!

Выполнил вот эти 3 команды:
Код: sql
1.
2.
3.
asadmin deploy --retrieve D:\Java\MyEJB\Enterprise1 --force D:\Java\MyEJB\Enterprise1\Enterprise1\dist\Enterprise1.ear
asadmin get-client-stubs --appname Enterprise1 D:\Java\MyEJB\Enterprise1
appclient -jar D:\Java\MyEJB\Enterprise1\Enterprise1Client.jar



Я распечатал эту инструкцию и ещё раз внимательно всё по ней сделал.

Почему-то в предыдущий раз asadmin запросил у меня пароль на доступ к GlassFish. А я его не знал. И перепробовал всякие варианты - admin, adminadmin, 1, asadmin... но ничего не помогало!
Потом я зашёл в админпанель GlassFish'а и сменил пароль там. Команда выполнилась, но с исключениями какими-то и после этого у меня что-то с GlassFish'ем началось - NetBeans перестал с ним дружить.

Я переставил GlassFish.

Потом я решил сделать это под VirtualBox'ом, предварительно сделав snapshot.
Вроде получилось, но мне надо это осознать - как получилось.

А откуда Enterprise-клиент будет знать с каким сервером ему соединяться?
Наверное, надо указать дополнительные параметры команды asadmin, такие как host и port?
Получается, что asadmin "настраивает" Enterprise Application Client'ов?
Это такая скажем так "жёсткая" настройка получается.

Надо будет на каждом клиенте выполнять эти команды каждый раз, когда необходимо настроить на соединение с определённым сервером.

А на Linux'овых клиентах надо будет аналогичный действия проводить?

А в той ссылке http://blogs.steeplesoft.com/2011/02/java-ees-buried-treasure-the-application-client-container/
Что там автор имел ввиду, когда говорилось "Хватит GUI! Дайте мне XML!"? Это он о чём вообще? Про Maven какой-то... Я посмотрел у себя - в своих проектах - нет у меня ничего подобного - у меня довольно-таки компактые Minifest'ы.

Наверное, завтра попробую переделать это под удалённый сервер. А то сегодня я уже целый день за компом сижу... очень сильно устал.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37668945
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000,

Так и не понял получилось у тебя что-нибудь или нет. Главное чтобы был прогресс. Кто в Java в EJB разобрался, тот в цирке не смеется.

Я тут попробовал небольшой пример накидать, такой же как у тебя. После того как задеплоишь приложение появятся стабы ({glassfish.home}\domains\domain1\generated\xml\j2ee-apps\TestEAR\TestEARClient.jar)

Ну и запуск "appclient -client TestEARClient.jar"
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37669044
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЯ тут попробовал небольшой пример накидать, такой же как у тебя. После того как задеплоишь приложение появятся стабы ({glassfish.home}\domains\domain1\generated\xml\j2ee-apps\TestEAR\TestEARClient.jar)
А проект сам где?
Ну, ладно.
Я думаю у меня получилось. просто своим глазам уже не верю.

Прилагаю картинку ещё одну.

Кстати, в {glassfish.home}\domains\domain1\generated\xml тоже что-то есть, но stub у меня лежит рядом с проектом, так как в deploy-команде я указывал D:\Java\MyEJB\Enterprise1, то так stub у меня и лежит.

А если мне надо будет, например, перенастроить моё приложение на работу с другим сервером, то опять генерировать stub'ы в командной строке?
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37669082
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000,

Все, увидил что у тебя все заработало. Поздраляю.

Параметры для работы с удаленным сервером (host и port) задаются при запуске "appclient ...", а не при генерации stub-ов "asadmin ...". У меня GlassFish достачно древний и "appclient -help" не работает и даже заведен такой дефект , но дефект вроде как уже давно исправлен.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37669491
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, да. Вроде работает, но только ваше приложение у меня почему-то не запустилось - вывалили вот такие ошибки:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(Unknown Source)
	at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: Lserver/HelloWorld;
	at java.lang.Class.getDeclaredFields0(Native Method)
	at java.lang.Class.privateGetDeclaredFields(Unknown Source)
	at java.lang.Class.getDeclaredField(Unknown Source)
	at com.sun.enterprise.deployment.util.DefaultDOLVisitor.acceptWithCL(DefaultDOLVisitor.java:354)
	at com.sun.enterprise.deployment.util.EjbBundleValidator.accept(EjbBundleValidator.java:192)
	at com.sun.enterprise.deployment.ApplicationClientDescriptor.visit(ApplicationClientDescriptor.java:662)
	at com.sun.enterprise.deployment.archivist.AppClientArchivist.validate(AppClientArchivist.java:183)
	at org.glassfish.appclient.client.acc.FacadeLaunchable.validateDescriptor(FacadeLaunchable.java:181)
	at org.glassfish.appclient.client.acc.AppClientContainer.completePreparation(AppClientContainer.java:358)
	at org.glassfish.appclient.client.acc.AppClientContainer.prepare(AppClientContainer.java:319)
	at org.glassfish.appclient.client.AppClientFacade.prepareACC(AppClientFacade.java:278)
	at org.glassfish.appclient.client.acc.agent.AppClientContainerAgent.premain(AppClientContainerAgent.java:82)
	... 6 more
Caused by: java.lang.ClassNotFoundException: server.HelloWorld
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at org.glassfish.appclient.client.acc.ACCClassLoader.findClass(ACCClassLoader.java:212)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	... 18 more
Exception in thread "main" 

FATAL ERROR in native method: processing of -javaagent failed
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37669624
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000,

Браво!
Снова ClassNotFoundException! И, как обычно, никаких предположений :))
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37669829
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большой Синий Кит
Ну, в данном случае у меня был только .ear'ник. Действительно, у меня нет идей почему возникли эти исключения. Я вижу только, что не найден класс server.HelloWorld. И всё.
Видимо, ClassNotFoundException - это болезнь какая-то.

Сейчас мне надо поупражняться заливать это на удалённый GlassFish Server. И вызывать удалённый метод на удалённом сервере, а не на localhost. Принципиально это ничем, по идее, не отличается, но надо попробовать.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37669831
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000Большой Синий Кит

Видимо, ClassNotFoundException - это болезнь какая-то.


тебе несколько раз объяснили что такое ClassNotFoundException но ты настырно занимаешься чем-то другим.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37669835
GregTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1024,

+1
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37670140
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тебе несколько раз объяснили что такое ClassNotFoundException но ты настырно занимаешься чем-то другим.
Это Класс не найден. Всё понятно. Подключить его надо через classpath. Но у меня не подключалось. В данном случае у меня был ear'ник от vas0, но почему там ClassNotFoundException я не знаю.


У меня другая проблема.
Надо за'deploy'ть на удалённый GlassFish.
Deploy'ю так:
Код: sql
1.
asadmin --host 172.16.1.250 deploy --retrieve D:\Tasks\Java\Stubs\Enterprise1 --force D:\Tasks\Java\MyEJB\Enterprise1\EnterpriseApplication1\dist\EnterpriseApplication1.ear



Перед этим на удалённом сервере надо выполнить:
Код: sql
1.
asadmin enable-secure-admin


И перезапустить сервер.

Но после выполнения команды:
appclient -jar D:\Tasks\Java\Stubs\Enterprise1\EnterpriseApplication1Client.jar
Вываливается вот это:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
org.omg.CORBA.COMM_FAILURE: FINE: IOP00410001: Connection failure: socketType: IIOP_CLEAR_TEXT; hostname: localhost; port: 3700  vmcid: OMG  minor code: 1  completed: No
	at sun.reflect.GeneratedConstructorAccessor30.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:248)
	at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:95)
	at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.handleFullLogging(WrapperGenerator.java:387)
	at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.access$400(WrapperGenerator.java:107)
	at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator$2.invoke(WrapperGenerator.java:511)
	at com.sun.corba.ee.spi.orbutil.proxy.CompositeInvocationHandlerImpl.invoke(CompositeInvocationHandlerImpl.java:99)
	at $Proxy34.connectFailure(Unknown Source)
	at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:257)
	at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:270)
	at com.sun.corba.ee.impl.transport.SocketOrChannelContactInfoImpl.createConnection(SocketOrChannelContactInfoImpl.java:129)
	at com.sun.corba.ee.impl.protocol.CorbaClientRequestDispatcherImpl.beginRequest(CorbaClientRequestDispatcherImpl.java:223)
	at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.request(CorbaClientDelegateImpl.java:228)
	at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.is_a(CorbaClientDelegateImpl.java:393)
	at org.omg.CORBA.portable.ObjectImpl._is_a(Unknown Source)
	at org.omg.CosNaming.NamingContextHelper.narrow(Unknown Source)
	at com.sun.enterprise.naming.impl.SerialContext$ProviderCacheKey.getNameService(SerialContext.java:1241)
	at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:411)
	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(Unknown Source)
	at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:173)
	at com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl$EjbReferenceProxy.create(ComponentEnvManagerImpl.java:1106)
	at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:776)
	at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:744)
	at com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:172)
	at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:498)
	at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
	at javax.naming.InitialContext.lookup(Unknown Source)
	at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:599)
	at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:470)
	at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectClass(InjectionManagerImpl.java:213)
	at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectClass(InjectionManagerImpl.java:205)
	at org.glassfish.appclient.client.acc.AppClientContainer$ClientMainClassSetting.getClientMainClass(AppClientContainer.java:625)
	at org.glassfish.appclient.client.acc.AppClientContainer.getMainMethod(AppClientContainer.java:517)
	at org.glassfish.appclient.client.acc.AppClientContainer.completePreparation(AppClientContainer.java:411)
	at org.glassfish.appclient.client.acc.AppClientContainer.prepare(AppClientContainer.java:319)
	at org.glassfish.appclient.client.AppClientFacade.prepareACC(AppClientFacade.java:278)
	at org.glassfish.appclient.client.acc.agent.AppClientContainerAgent.premain(AppClientContainerAgent.java:82)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(Unknown Source)
	at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(Unknown Source)
Caused by: java.lang.RuntimeException: java.net.ConnectException: Connection refused: connect
	at org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory.createSocket(IIOPSSLSocketFactory.java:339)
	at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:242)
	... 37 more
Caused by: java.net.ConnectException: Connection refused: connect
	at sun.nio.ch.Net.connect(Native Method)
	at sun.nio.ch.SocketChannelImpl.connect(Unknown Source)
	at com.sun.corba.ee.impl.orbutil.ORBUtility.openSocketChannel(ORBUtility.java:110)
	at org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory.createSocket(IIOPSSLSocketFactory.java:324)
	... 38 more
com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Remote ejb-ref name=applicationclient1.Main/sessionBean,Remote 3.x interface =SessionBean.SessionBeanRemote,ejb-link=EnterpriseApplication1-ejb.jar#SessionBean,lookup=,mappedName=,jndi-name=java:global/EnterpriseApplication1/EnterpriseApplication1-ejb/SessionBean!SessionBean.SessionBeanRemote,refType=Session into class applicationclient1.Main: Lookup failed for 'java:comp/env/applicationclient1.Main/sessionBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl}
	at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:703)
	at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:470)
	at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectClass(InjectionManagerImpl.java:213)
	at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectClass(InjectionManagerImpl.java:205)
	at org.glassfish.appclient.client.acc.AppClientContainer$ClientMainClassSetting.getClientMainClass(AppClientContainer.java:625)
	at org.glassfish.appclient.client.acc.AppClientContainer.getMainMethod(AppClientContainer.java:517)
	at org.glassfish.appclient.client.acc.AppClientContainer.completePreparation(AppClientContainer.java:411)
	at org.glassfish.appclient.client.acc.AppClientContainer.prepare(AppClientContainer.java:319)
	at org.glassfish.appclient.client.AppClientFacade.prepareACC(AppClientFacade.java:278)
	at org.glassfish.appclient.client.acc.agent.AppClientContainerAgent.premain(AppClientContainerAgent.java:82)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(Unknown Source)
	at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(Unknown Source)
Caused by: javax.naming.NamingException: Lookup failed for 'java:comp/env/applicationclient1.Main/sessionBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=applicationclient1.Main/sessionBean,Remote 3.x interface =SessionBean.SessionBeanRemote,ejb-link=EnterpriseApplication1-ejb.jar#SessionBean,lookup=,mappedName=,jndi-name=java:global/EnterpriseApplication1/EnterpriseApplication1-ejb/SessionBean!SessionBean.SessionBeanRemote,refType=Session' .  Actual (possibly internal) Remote JNDI name used for lookup is 'java:global/EnterpriseApplication1/EnterpriseApplication1-ejb/SessionBean!SessionBean.SessionBeanRemote' [Root exception is javax.naming.NamingException: Lookup failed for 'java:global/EnterpriseApplication1/EnterpriseApplication1-ejb/SessionBean!SessionBean.SessionBeanRemote' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is org.omg.CORBA.COMM_FAILURE: FINE: IOP00410001: Connection failure: socketType: IIOP_CLEAR_TEXT; hostname: localhost; port: 3700  vmcid: OMG  minor code: 1  completed: No]]]]
	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(Unknown Source)
	at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:599)
	... 15 more
Caused by: javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=applicationclient1.Main/sessionBean,Remote 3.x interface =SessionBean.SessionBeanRemote,ejb-link=EnterpriseApplication1-ejb.jar#SessionBean,lookup=,mappedName=,jndi-name=java:global/EnterpriseApplication1/EnterpriseApplication1-ejb/SessionBean!SessionBean.SessionBeanRemote,refType=Session' .  Actual (possibly internal) Remote JNDI name used for lookup is 'java:global/EnterpriseApplication1/EnterpriseApplication1-ejb/SessionBean!SessionBean.SessionBeanRemote' [Root exception is javax.naming.NamingException: Lookup failed for 'java:global/EnterpriseApplication1/EnterpriseApplication1-ejb/SessionBean!SessionBean.SessionBeanRemote' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is org.omg.CORBA.COMM_FAILURE: FINE: IOP00410001: Connection failure: socketType: IIOP_CLEAR_TEXT; hostname: localhost; port: 3700  vmcid: OMG  minor code: 1  completed: No]]]
	at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:178)
	at com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl$EjbReferenceProxy.create(ComponentEnvManagerImpl.java:1106)
	at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:776)
	at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:744)
	at com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:172)
	at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:498)
	... 18 more
Caused by: javax.naming.NamingException: Lookup failed for 'java:global/EnterpriseApplication1/EnterpriseApplication1-ejb/SessionBean!SessionBean.SessionBeanRemote' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is org.omg.CORBA.COMM_FAILURE: FINE: IOP00410001: Connection failure: socketType: IIOP_CLEAR_TEXT; hostname: localhost; port: 3700  vmcid: OMG  minor code: 1  completed: No]]
	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(Unknown Source)
	at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:173)
	... 23 more
Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is org.omg.CORBA.COMM_FAILURE: FINE: IOP00410001: Connection failure: socketType: IIOP_CLEAR_TEXT; hostname: localhost; port: 3700  vmcid: OMG  minor code: 1  completed: No]
	at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:352)
	at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:504)
	... 26 more
Caused by: org.omg.CORBA.COMM_FAILURE: FINE: IOP00410001: Connection failure: socketType: IIOP_CLEAR_TEXT; hostname: localhost; port: 3700  vmcid: OMG  minor code: 1  completed: No
	at sun.reflect.GeneratedConstructorAccessor30.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:248)
	at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:95)
	at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.handleFullLogging(WrapperGenerator.java:387)
	at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.access$400(WrapperGenerator.java:107)
	at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator$2.invoke(WrapperGenerator.java:511)
	at com.sun.corba.ee.spi.orbutil.proxy.CompositeInvocationHandlerImpl.invoke(CompositeInvocationHandlerImpl.java:99)
	at $Proxy34.connectFailure(Unknown Source)
	at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:257)
	at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:270)
	at com.sun.corba.ee.impl.transport.SocketOrChannelContactInfoImpl.createConnection(SocketOrChannelContactInfoImpl.java:129)
	at com.sun.corba.ee.impl.protocol.CorbaClientRequestDispatcherImpl.beginRequest(CorbaClientRequestDispatcherImpl.java:223)
	at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.request(CorbaClientDelegateImpl.java:228)
	at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.is_a(CorbaClientDelegateImpl.java:393)
	at org.omg.CORBA.portable.ObjectImpl._is_a(Unknown Source)
	at org.omg.CosNaming.NamingContextHelper.narrow(Unknown Source)
	at com.sun.enterprise.naming.impl.SerialContext$ProviderCacheKey.getNameService(SerialContext.java:1241)
	at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:411)
	at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:347)
	... 27 more
Caused by: java.lang.RuntimeException: java.net.ConnectException: Connection refused: connect
	at org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory.createSocket(IIOPSSLSocketFactory.java:339)
	at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:242)
	... 37 more
Caused by: java.net.ConnectException: Connection refused: connect
	at sun.nio.ch.Net.connect(Native Method)
	at sun.nio.ch.SocketChannelImpl.connect(Unknown Source)
	at com.sun.corba.ee.impl.orbutil.ORBUtility.openSocketChannel(ORBUtility.java:110)
	at org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory.createSocket(IIOPSSLSocketFactory.java:324)
	... 38 more



Зачем он к localhost'у пытается-то присоединиться? Вот в чём вопрос! Он по идее должен соединяться с тем у кого stub'ы взяты.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37670231
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет тут никаких вопросов. Пока не подключишь ВСЕ библиотеки работать не будет.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37670281
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1024
авторнет тут никаких вопросов. Пока не подключишь ВСЕ библиотеки работать не будет.
Извини, по-моему это не в тему.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class Main {
    @EJB
    private static SessionBeanRemote sessionBean;

    public static void main(String[] args) {
        NewJFrame jf=new NewJFrame();
        jf.set_jlabel(sessionBean.retHello());
        jf.setLocationRelativeTo(null);
        jf.setVisible(true);
    }
}


Я создал другой проект - Enterprise Application, а не обычный Java Class.
Библиотеки тут не причём в данном случае. С localhost всё работает.
Почему-то моё Enterprise Application хочет только с localhost работать, а я хочу, чтоб он соединялся с 172.16.1.250.
А явно это нигде не задаётся.
Я думал, что при скачке stub'ов он сам привяжется к серверу, но нет. Надо думать как теперь клиента с сервером соединить.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37670287
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000Библиотеки тут не причём в данном случае. С localhost всё работает.
Почему-то моё Enterprise Application хочет только с localhost работать, а я хочу, чтоб он соединялся с 172.16.1.250.

В свойства InitialContext адрес передается или нет?
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37670346
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторВ свойства InitialContext адрес передается или нет?
В случае с обычным Java-классом вроде как да, но у меня он не пашет из-за того, что я не могу подключить ВСЕ библиотеки - не знаю набора ВСЕХ библиотек.
( http://www.sql.ru/forum/actualthread.aspx?tid=919879)
А в случае с Enterprise приложением тоже что ли InitialContext надо задавать?
Попробую...
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37670383
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000А в случае с Enterprise приложением тоже что ли InitialContext надо задавать?

Да что же вы всё в одну кучу мешаете? У вас проблема в толстом клиенте? Причем здесь Enterprise приложение (aka JEE модуль)?
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37670419
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, да. В толстом клиенте.
Просто раньше толстый клиент был обычным Java приложением, а теперь он стал Enterprise J2EE модулем.
И вот этот толстый клиент в виде Enterprise J2EE модуля не соединяется с сервером приложений в Glassfish с EJB-модулем.
А как заставить этого J2EE клиента соединиться не с localhost а с чем нибудь другим? Вот это пока вопрос!
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37670434
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczNiky4000А в случае с Enterprise приложением тоже что ли InitialContext надо задавать?

Да что же вы всё в одну кучу мешаете? У вас проблема в толстом клиенте? Причем здесь Enterprise приложение (aka JEE модуль)?

У человека проблема вообще с ява. Он ничего в ней не понимает, а лезет сразу в создание ежб бинов.


Niky4000Просто раньше толстый клиент был обычным Java приложением, а теперь он стал Enterprise J2EE модулем.

Надо записать! :))
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37670444
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vas0Кто в Java в EJB разобрался, тот в цирке не смеется.
похоже ты прав.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37670452
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У человека проблема вообще с ява. Он ничего в ней не понимает, а лезет сразу в создание ежб бинов.
Ну, ёлки... началось. Нет у меня никаких проблем.
Надо записать! :))
Просто позавчера толстый клиент был Java-классом, а вчера стал Enterprise-приложением.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37670467
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000Почему-то моё Enterprise Application хочет только с localhost работать, а я хочу, чтоб он соединялся с 172.16.1.250
Код: java
1.
2.
props.setProperty(Context.PROVIDER_URL, "jnp://172.16.1.250:1099");
new InitialContext(props).lookup(...);


не?
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37670477
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000Просто позавчера толстый клиент был Java-классом, а вчера стал Enterprise-приложением.

И это тоже записать! :)
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37670500
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000Ну, ёлки... началось. Нет у меня никаких проблем.

Вас очень сложно понять.
Толстый клиент, это приложение, в котором JVM работает на стороне клиента и, зачастую, используется некоторый GUI фреймверк Swing.
Толстый клиент не является JEE модулем, потому что он работает независимо от JEE контейнера.
JEE модуль это war или ejb-jar, который развернут на JEE сервере.
Постарайтесь придерживатся этой терминологии.

То что контейнер подставляет в поля значения реальных бинов, называется IoC, DI, CDI. CDI работает только в JEE модуле.
В толстом контейнере используется подход, известный как Service Locator. Создаётся InitialContext и через него получается доступ к удаленным службам сервера. Сам контекст одинаково работает как на сервере, так и на клиенте, с той лишь разницей, что у EJB бывают локальные интерфейсы, которые удаленно использовать нельзя.

Теперь по поводу вашей проблемы с IP. Если создавать InitialContext черед дефолтный конструктор, с использованием библиотек сервера приложений, то в этом случае данные библиотеки пытаются вычитать конфигурацию из настроек сервера приложений. (Как это конкретно реализовано в GlassFish - не знаю)

При создании InitialContext можно переопределять дефолтные значения, как выше указал grasoff.net.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37670515
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netNiky4000Почему-то моё Enterprise Application хочет только с localhost работать, а я хочу, чтоб он соединялся с 172.16.1.250
Код: java
1.
2.
props.setProperty(Context.PROVIDER_URL, "jnp://172.16.1.250:1099");
new InitialContext(props).lookup(...);


не?

Странно, но для GlassFish во многих примерах пишут, что нужно использовать "org.omg.CORBA.ORBInitialHost" для указания адреса. В том числе об этом написано в примере, ссылку на который уже привели выше.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37670564
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000Я создал другой проект - Enterprise Application, а не обычный Java Class.
Библиотеки тут не причём в данном случае. С localhost всё работает.
Почему-то моё Enterprise Application хочет только с localhost работать, а я хочу, чтоб он соединялся с 172.16.1.250.
А явно это нигде не задаётся.
Я думал, что при скачке stub'ов он сам привяжется к серверу, но нет. Надо думать как теперь клиента с сервером соединить. Попробуй "appclient -jar D:\Tasks\Java\Stubs\Enterprise1\EnterpriseApplication1Client.jar -targetserver 172.16.1.250"
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37670583
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczнужно использовать "org.omg.CORBA.ORBInitialHost" для указания адресаахнуда
я просто к тому, что надо каким-то образом указать урл )
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37670621
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netя просто к тому, что надо каким-то образом указать урл )
Да. Я что-то тупанул на этот счет в начале. Ведь у удаленноего клиента не может быть ссылки на настройки сервера, поэтому URL в том или ином виде нужно указывать в любом случае.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37672566
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vas0
СПАСИБО! ЕЩЁ РАЗОК ОГРОМНОЕ!!!
Всё получилось!!!
Вот смертельная тройка команд:
Код: sql
1.
2.
3.
asadmin deploy E:\Java\stubs\ear\EnterpriseApplication1.ear --host 172.16.1.192
asadmin get-client-stubs --appname EnterpriseApplication1 E:\Java\stubs --host 172.16.1.192
appclient -targetserver 172.16.1.192 -jar E:\Java\stubs\EnterpriseApplication1Client.jar


Первая deploy'ит EAR'ник!
Вторая получает STUB'ы!
А третья! Третья - самая убийственная команда - связывает клиента с удалённым GlassFish!


А ещё вопросик:
А может ли сервер инициировать что-то у клиентов по событиям сервера?
Например, по таймеру?
Или в случае, если условный "администратор" послал некое сообщение на сервер, которое сервер должен "раздать" всем клиентам, то есть сервер "инициирует" некие события у клиентов - сервер как бы возбуждает что-то у клиентов?
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37672705
GregTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000,

Тихий ужас, в jboss такого не было
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37672706
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000А может ли сервер инициировать что-то у клиентов по событиям сервера?
Например, по таймеру?
Или в случае, если условный "администратор" послал некое сообщение на сервер, которое сервер должен "раздать" всем клиентам, то есть сервер "инициирует" некие события у клиентов - сервер как бы возбуждает что-то у клиентов?Первый вариант - JMS. Создаешь тему (Topic), клиенты подписчики (Subscribers). Сервер генерирует сообщения, клиенты его получают и обрабатывают. Здесь тебе только клиентского потребителя сообщений (Consumer) нужно написать, а дальше только правильно все сконфигурировать.

Второй варинт JMХ. В JMХ, вроде бы, есть модель оповещения, возможно она может подойти, но я не уверен.

Последний вариант, это придумать собственный протокол на уровне: Sockets, RMI и всю реализацию писать самому.
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37672717
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GregTkjboss такого не былода в глассфише тоже без этого можно объодиться
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37673146
GregTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.net,

как то не заметно, вон как ТС мучается :)
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37675973
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GregTkgrasoff.net,

как то не заметно, вон как ТС мучается :)всё от того, что люди мало читают
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37676310
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
grasoff.netда в глассфише тоже без этого можно объодиться
может немного поздно, но... вот что мне думается.
Проблема в формировании InitialContext на стороне клиента. Например, для Weblogic-а все просто. Нужно клиенту подсунуть weblogic.jar, который содержит все необходимое (является самодостаточным), но он и весит около 50 метров.
В глассфише перемудрили с ленивыми загрузками. В мануалах сказано, что клиенту для работы с аквариумом нужен лишь gf-client.jar (18 метров). НО! gf-client.jar начинает подгружать себе другие зависимости по ходу выполения. Подгружает он их как-то "не по пацански", что ли: ищет джарники в относительных путях как они лежат на GlassFish сервере.

Поэтому, лично я нашел для себя простой (да избыточный, но моя ситуация позволяет) способ: я скопировал джарники с сервера на клиент (~40 метров) из glassfish\modules\. Список прилагается - как получил, уже не помню ;)

На клиенте получаем контекст:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
InitialContext ic = new InitialContext();
        HelloRemote bean = null;
        try {
            bean = (HelloRemote)ic.lookup("Test-HelloRemote"); // из @Stateless(MappedName = "Test-HelloRemote")
            return bean.getSomeStuff();
        } catch (NamingException e) {
            Tools.showError(e);
        }


В клиенте есть HelloRemote интерфейс.
В Application.ear нет клиента вообще.
Запускаем клиент:
javaw -splash:./conf/Splash.jpg -classpath ./modules/gf-client.jar;./MyClient.jar -Dorg.omg.CORBA.ORBInitialHost=<hostName> com.client.swing.Main

Если нужно JAAS, то в classpath отдельно прописывается security.jar (gf-client.jar на него не ссылается)
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37694702
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А ещё вопросик у меня 1 есть в эту тему:

Утилита, которая запускает EnterpriseClient'а - это appclient.
Она идёт в составе GlassFish'а.
А отдельно её где можно взять?
Или её из GlassFish'а нужно "вынуть"?
Ну, не ставить же GlassFish всем клиентам из-за appclient'а...
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37827989
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я вспомнил про эту тему.
Хочу сказать, что у меня наконец-то получилось сделать это - запустить удалённого клиента, который бы вызывал удалённые процедуры удалённых EJB-модулей.
Рассказываю как это делается, может кому пригодится.
GlassFish 3.1.2 NetBeans 7.1.2 Java 1.7
Необходимо включить в проект следующие библиотеки:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
C:\Program Files\glassfish-3.1.2\glassfish\lib\gf-client.jar
C:\Program Files\glassfish-3.1.2\glassfish\lib\install\applications\__cp_jdbc_ra\ => "__cp_jdbc_ra.jar"
C:\Program Files\glassfish-3.1.2\glassfish\lib\install\applications\__ds_jdbc_ra\ => "__ds_jdbc_ra.jar"
C:\Program Files\glassfish-3.1.2\glassfish\lib\install\applications\__dm_jdbc_ra\ => "__dm_jdbc_ra.jar"
C:\Program Files\glassfish-3.1.2\glassfish\lib\install\applications\jmsra\ => "imqjmsra.jar"
C:\Program Files\glassfish-3.1.2\glassfish\lib\install\applications\__xa_jdbc_ra\ => "__xa_jdbc_ra.jar"
C:\Program Files\glassfish-3.1.2\glassfish\lib\install\applications\jaxr-ra\ => "jaxr-ra.jar"
C:\Program Files\glassfish-3.1.2\javadb\lib\ => "derby.jar" "derbyclient.jar" "derbynet.jar" "derbytools.jar" "derbyrun.jar"
C:\Program Files\glassfish-3.1.2\mq\lib\ => "imq.jar" "imqadmin.jar" "imqutil.jar" "fscontext.jar"
C:\Program Files\glassfish-3.1.2\glassfish\modules\endorsed\ => "jaxb-api-osgi.jar" "javax.annotation.jar" "webservices-api-osgi.jar"
C:\Program Files\glassfish-3.1.2\glassfish\modules\ => "tools.jar" "auto-depends.jar" "config.jar" "config-types.jar" "hk2.jar" "hk2-core.jar" "osgi-adapter.jar" "grizzly-comet.jar" "grizzly-config.jar" "grizzly-framework.jar" "grizzly-http.jar" "grizzly-http-ajp.jar" "grizzly-http-servlet.jar" "grizzly-lzma.jar" "grizzly-portunif.jar" "grizzly-rcm.jar" "grizzly-utils.jar" "grizzly-websockets.jar" "javax.mail.jar" "pkg-client.jar" "jaxb-osgi.jar" "jaxws-eclipselink-plugin.jar" "activation.jar" "javax.el-api.jar" "javax.servlet-api.jar" "javax.servlet.jsp-api.jar" "javax.servlet.jsp.jstl-api.jar" "jaxr-api-osgi.jar" "jaxrpc-api-osgi.jar" "endorsed\jaxb-api-osgi.jar" "stax-api.jar" "junit.jar" "stax2-api.jar" "woodstox-core-asl.jar" "javax.persistence.jar" "org.eclipse.persistence.antlr.jar" "org.eclipse.persistence.asm.jar" "org.eclipse.persistence.core.jar" "org.eclipse.persistence.jpa.jar" "org.eclipse.persistence.jpa.modelgen.jar" "org.eclipse.persistence.moxy.jar" "org.eclipse.persistence.oracle.jar" "bean-validator.jar" "javax.faces.jar" "glassfish-corba-asm.jar" "glassfish-corba-codegen.jar" "glassfish-corba-csiv2-idl.jar" "glassfish-corba-internal-api.jar" "glassfish-corba-newtimer.jar" "glassfish-corba-omgapi.jar" "glassfish-corba-orb.jar" "glassfish-corba-orbgeneric.jar" "management-api.jar" "gmbal.jar" "ha-api.jar" "auto-depends.jar" "class-model.jar" "config.jar" "config-types.jar" "hk2.jar" "hk2-core.jar" "asm-all-repackaged.jar" "bean-validator.jar" "admin-core.jar" "admin-util.jar" "config-api.jar" "javax.management.j2ee.jar" "monitoring-core.jar" "acc-config.jar" "gf-client-module.jar" "gms-bootstrap.jar" "amx-core.jar" "amx-j2ee.jar" "annotation-framework.jar" "common-util.jar" "container-common.jar" "glassfish-api.jar" "glassfish-ee-api.jar" "glassfish-naming.jar" "internal-api.jar" "scattered-archive-api.jar" "simple-glassfish-api.jar" "stats77.jar" "connectors-inbound-runtime.jar" "connectors-internal-api.jar" "connectors-runtime.jar" "javax.resource.jar" "work-management.jar" "glassfish.jar" "kernel.jar" "logging.jar" "deployment-common.jar" "deployment-javaee-core.jar" "dol.jar" "javax.enterprise.deploy.jar" "ejb-container.jar" "ejb-internal-api.jar" "gf-ejb-connector.jar" "javax.ejb.jar" "j-interop-repackaged.jar" "ldapbp-repackaged.jar" "libpam4j-repackaged.jar" "flashlight-framework.jar" "endorsed\javax.annotation.jar" "javax.jms.jar" "jms-core.jar" "orb-connector.jar" "orb-iiop.jar" "eclipselink-wrapper.pom" "jpa-connector.jar" "persistence-common.jar" "cmp-internal-api.jar" "appclient.security.jar" "ejb.security.jar" "jaspic.provider.framework.jar" "javax.security.auth.message.jar" "javax.security.jacc.jar" "security.jar" "ssl-impl.jar" "websecurity.jar" "webservices.security.jar" "javax.transaction.jar" "jta.jar" "jts.jar" "transaction-internal-api.jar" "war-util.jar" "web-cli.jar" "web-core.jar" "web-glue.jar" "web-gui-plugin-common.jar" "web-naming.jar" "web-embed-api.jar" "jsr109-impl.jar" "webservices-connector.jar" "endorsed\webservices-api-osgi.jar" "webservices-extra-jdk-packages.jar" "webservices-osgi.jar" "javax.el.jar" "javax.servlet.jsp.jar" "tiger-types.jar" "mimepull.jar" "shoal-gms-api.jar" "aixporting-repackaged.jar"



А клиент в простейшем случае выглядит примерно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
package testclient;

import SessionBeans.EMDebugSessionBeanRemote;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.InitialContext;
import javax.naming.NamingException;


public class TestClient {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            Properties properties = new Properties();

            properties.setProperty("java.naming.factory.initial",
                    "com.sun.enterprise.naming.SerialInitContextFactory");

            properties.setProperty(
                    "org.omg.CORBA.ORBInitialHost",
                    "172.16.1.192");

            properties.setProperty(
                    "org.omg.CORBA.ORBInitialPort",
                    "3700");

            InitialContext initialContext = new InitialContext(properties);
            
            
            EMDebugSessionBeanRemote EMDebugSessionBean=(EMDebugSessionBeanRemote) initialContext.lookup("EMDebugSessionBean");
            
            String hello=EMDebugSessionBean.retHello();
            
            System.out.println(hello);
            
        } catch (NamingException ex) {
            Logger.getLogger(TestClient.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        
    }
}
...
Рейтинг: 0 / 0
Как вызвать удалённый метод в EJB из GUI приложения?
    #37827996
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Удалённый интерфейс должен обязательно лежать в отдельном проекте.
...
Рейтинг: 0 / 0
69 сообщений из 69, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Как вызвать удалённый метод в EJB из GUI приложения?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]