powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как вызвать удалённый метод в EJB из GUI приложения?
25 сообщений из 69, страница 1 из 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
25 сообщений из 69, страница 1 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Как вызвать удалённый метод в EJB из GUI приложения?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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