powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема вызова Session Bean (Java EE5)
16 сообщений из 16, страница 1 из 1
Проблема вызова Session Bean (Java EE5)
    #34381958
KBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Возникла такая проблема, при вызове сессионного бина, который управляет персистентными бинами (создает, удалет, редактирует), из клиентского приложения возникает NullPointerException. Очень нужна помощь...
Вот код (в нем даже не используются персистентные бины):

Код: plaintext
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.
 package  test;

 import  javax.ejb.EJB;
 import  org.cetco.request.RequestProcessorRemote;

 public   class  Client {

    @EJB
     private   static  RequestProcessorRemote requestProcessorBean;
   
    /** Creates a new instance of Client */
     public  Client(String[] args) {
    }
    
    /**
     * @param args the command line arguments
     */
     public   static   void  main(String[] args) {
        // TODO code application logic here
        System.out.println("Client Entry Point");
        Client client =  new  Client(args);
        client.test();
    }
    
     public   void  test() {
         try  {
            System.out.println("Start creating company");
            //requestProcessorBean = new RequestProcessorRemote();
            System.out.println(requestProcessorBean.sayHello("Test"));
        }  catch (Exception ex) {
            System.out.println("Exception " + ex.toString());
            ex.printStackTrace();
        }
    }    
}

вот код интерфейса:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 import  javax.ejb.Remote;


/**
 * This is the business interface for RequestProcessor enterprise bean.
 */
@Remote
 public   interface  RequestProcessorRemote {
     public  String sayHello(String name);
}

и код сессионного бина

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 import  javax.ejb.Stateless;

/**
 *
 * @author BN
 */
@Stateless
 public   class  RequestProcessorBean  implements  org.cetco.request.RequestProcessorRemote {
    
     public  String sayHello(String name) {
         return ("Hello"+name);
    }
}

и собственно ошибка:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
run-tool:
Client Entry Point
Start creating company
Exception java.lang.NullPointerException
java.lang.NullPointerException
        at cetco.Client.test(Client.java: 42 )
        at cetco.Client.main(Client.java: 35 )
        at sun.reflect.NativeMethodAccessorImpl.invoke0( Native  Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 39 )
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 25 )
        at java.lang.reflect.Method.invoke(Method.java: 597 )
        at com.sun.enterprise.util.Utility.invokeApplicationMain(Utility.java: 232 )
        at com.sun.enterprise.appclient.MainWithModuleSupport.<init>(MainWithModuleSupport.java: 329 )
        at com.sun.enterprise.appclient.Main.main(Main.java: 180 )
run-jar:
run-display-browser:
run:
BUILD SUCCESSFUL (total time:  43  seconds)

Очень нужна помощь!!!!
...
Рейтинг: 0 / 0
Проблема вызова Session Bean (Java EE5)
    #34382208
y3u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и толку с такого стектрейса, если эксцепшен в 42 строке, а в исходнике 35 строк...
К тому же, так EJB не тестируют таким образом, они так точно не будут работать. Их надо сначала задеплоить в контейнере, а потом через JNDI доставать и пользовать...
...
Рейтинг: 0 / 0
Проблема вызова Session Bean (Java EE5)
    #34382210
y3u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RTFM
http://java.sun.com/javaee/5/docs/tutorial/doc/
...
Рейтинг: 0 / 0
Проблема вызова Session Bean (Java EE5)
    #34382633
KBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
y3uRTFM
http://java.sun.com/javaee/5/docs/tutorial/doc/

Собственно по этому туториалу и изучаю...
IDE NetBeans 5.5. Среда вроде при запуске деплоит приложение, к тому же подобная ошибка возникает и при попытке запустить примеры из туториала что наводит на мысль, что проблема может быть и не в коде.

а эксепшн вылетает на строке:
Код: plaintext
1.
2.
3.
...
System.out.println(requestProcessorBean.sayHello("Test"));
...
...
Рейтинг: 0 / 0
Проблема вызова Session Bean (Java EE5)
    #34383089
y3u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KBoris y3uRTFM
http://java.sun.com/javaee/5/docs/tutorial/doc/

Собственно по этому туториалу и изучаю...
IDE NetBeans 5.5. Среда вроде при запуске деплоит приложение, к тому же подобная ошибка возникает и при попытке запустить примеры из туториала что наводит на мысль, что проблема может быть и не в коде.

а эксепшн вылетает на строке:
Код: plaintext
1.
2.
3.
...
System.out.println(requestProcessorBean.sayHello("Test"));
...


Ага, счаз... деплоит... А какой аппликейшен сервер используется? Глассфиш, джейбосс, или еще какой? Раз вылетает эксцепшен, значит нет экземпляра класса RequestProcessorRemote, т.е. requestProcessorBean попросту null. Посмотри что у тебя есть в JNDI, попробуй отлукапить ручками бин...
...
Рейтинг: 0 / 0
Проблема вызова Session Bean (Java EE5)
    #34383131
KBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В принципе я заставил этот код работать, прописав:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
...
            System.out.println("Start creating company");
            //requestProcessorBean = new RequestProcessorRemote();
           requestProcessorBean =  [b]new  RequestProcessorBean();[/b]
            
            System.out.println(requestProcessorBean.sayHello("Test"));
...

но остался вопрос, если я описываю requestProcessorBean так:
Код: plaintext
1.
2.
    @EJB
     private   static  RequestProcessorRemote requestProcessorBean;

что является интерфейсом, то почему я должен создавать экземпляр самого бина?

Кто знает, плиз, объясните...
...
Рейтинг: 0 / 0
Проблема вызова Session Bean (Java EE5)
    #34383133
KBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А сервер использую Sun Appication Server 9
...
Рейтинг: 0 / 0
Проблема вызова Session Bean (Java EE5)
    #34383282
Ekshibarov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KBorisВ принципе я заставил этот код работать, прописав:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
...
            System.out.println("Start creating company");
            //requestProcessorBean = new RequestProcessorRemote();
           requestProcessorBean =  [b]new  RequestProcessorBean();[/b]
            
            System.out.println(requestProcessorBean.sayHello("Test"));
...

но остался вопрос, если я описываю requestProcessorBean так:
Код: plaintext
1.
2.
    @EJB
     private   static  RequestProcessorRemote requestProcessorBean;

что является интерфейсом, то почему я должен создавать экземпляр самого бина?

Кто знает, плиз, объясните...

Код то вы заставили работать но не совсем так как нужно, здесь вы создали просто экземпляр класса RequestProcessorBean и вызвали его метод на клиенте, то есть запрос к серверу у вас вообще не совершался.

А вообще что бы произошел injection в поле описанное у вас:
Код: plaintext
1.
2.
    @EJB
     private   static  RequestProcessorRemote requestProcessorBean;
не обходимо запускать клиента с помощью утилитки appclient (точно не помню, но помоему так называется), которая поставляется в Sun app server.
...
Рейтинг: 0 / 0
Проблема вызова Session Bean (Java EE5)
    #34383308
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Использовать appclient НЕобязательно
2) Получать ссылку на удалённый интерфейс так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
     public   static  RequestProcessorRemote getRequestProcessorRemote()  throws  NamingException {
        
        Context ic =  new  InitialContext();
         return  (RequestProcessorRemote) ic.lookup("RequestProcessorRemote");
        
    }
...
requestProcessorBean = getRequestProcessorBean();
2) При запуске указать аргументы(для NetBeans в свойствах проекта -> Run -> VM Options)
Код: plaintext
-Dorg.omg.CORBA.ORBInitialHost=localhost -Dorg.omg.CORBA.ORBInitialPort= 3700 
если AppServer удалённый, localhost заменить на хост на котором работает AppServer
3) Добавить в CLASSPATH библиотеки AppServer'а(для NetBeans в свойствах проекта -> Libraries):
Код: plaintext
1.
${AS_ROOT}/lib/appserv-rt.jar
${AS_ROOT}/lib/javaee.jar
...
Рейтинг: 0 / 0
Проблема вызова Session Bean (Java EE5)
    #34383313
Ekshibarov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mozheyko_d1) Использовать appclient НЕобязательно
2) Получать ссылку на удалённый интерфейс так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
     public   static  RequestProcessorRemote getRequestProcessorRemote()  throws  NamingException {
        
        Context ic =  new  InitialContext();
         return  (RequestProcessorRemote) ic.lookup("RequestProcessorRemote");
        
    }
...
requestProcessorBean = getRequestProcessorBean();
2) При запуске указать аргументы(для NetBeans в свойствах проекта -> Run -> VM Options)
Код: plaintext
-Dorg.omg.CORBA.ORBInitialHost=localhost -Dorg.omg.CORBA.ORBInitialPort= 3700 
если AppServer удалённый, localhost заменить на хост на котором работает AppServer
3) Добавить в CLASSPATH библиотеки AppServer'а(для NetBeans в свойствах проекта -> Libraries):
Код: plaintext
1.
${AS_ROOT}/lib/appserv-rt.jar
${AS_ROOT}/lib/javaee.jar


Я говорил что использовать appclient нужно для injection, конечно используя lookup можно получить ссылку на удаленный интерфейс и без appclient.
...
Рейтинг: 0 / 0
Проблема вызова Session Bean (Java EE5)
    #34383328
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ekshibarov Vladimir mozheyko_d1) Использовать appclient НЕобязательно
2) Получать ссылку на удалённый интерфейс так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
     public   static  RequestProcessorRemote getRequestProcessorRemote()  throws  NamingException {
        
        Context ic =  new  InitialContext();
         return  (RequestProcessorRemote) ic.lookup("RequestProcessorRemote");
        
    }
...
requestProcessorBean = getRequestProcessorBean();
2) При запуске указать аргументы(для NetBeans в свойствах проекта -> Run -> VM Options)
Код: plaintext
-Dorg.omg.CORBA.ORBInitialHost=localhost -Dorg.omg.CORBA.ORBInitialPort= 3700 
если AppServer удалённый, localhost заменить на хост на котором работает AppServer
3) Добавить в CLASSPATH библиотеки AppServer'а(для NetBeans в свойствах проекта -> Libraries):
Код: plaintext
1.
${AS_ROOT}/lib/appserv-rt.jar
${AS_ROOT}/lib/javaee.jar


Я говорил что использовать appclient нужно для injection, конечно используя lookup можно получить ссылку на удаленный интерфейс и без appclient.

А я не говорил что использовать appclient & injection нельзя или неправильно, я сказал что НЕобязательно

В данном случае, ИМХО, injection не упрощает, а усложняет, т.к. тянет за собой appclient, что для туториала, на мой опять же взгляд, сложновато.
...
Рейтинг: 0 / 0
Проблема вызова Session Bean (Java EE5)
    #34383883
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozheyko_d
2) Получать ссылку на удалённый интерфейс так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
     public   static  RequestProcessorRemote getRequestProcessorRemote()  throws  NamingException {
        
        Context ic =  new  InitialContext();
         return  (RequestProcessorRemote) ic.lookup("RequestProcessorRemote");
        
    }
...
requestProcessorBean = getRequestProcessorBean();

Я бы во избежание добавил:
Код: plaintext
1.
     return  (RequestProcessorRemote) PortableRemoteObject.narrow(c.lookup("RequestProcessorRemote"), RequestProcessorRemote. class );
...
Рейтинг: 0 / 0
Проблема вызова Session Bean (Java EE5)
    #34385086
KBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Странно только что в примерах туториала этого нет...

Всем спасибо за помощь!
...
Рейтинг: 0 / 0
Проблема вызова Session Bean (Java EE5)
    #34385260
KBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mozheyko_d1) Использовать appclient НЕобязательно
2) Получать ссылку на удалённый интерфейс так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
     public   static  RequestProcessorRemote getRequestProcessorRemote()  throws  NamingException {
        
        Context ic =  new  InitialContext();
         return  (RequestProcessorRemote) ic.lookup("RequestProcessorRemote");
        
    }
...
requestProcessorBean = getRequestProcessorBean();
2) При запуске указать аргументы(для NetBeans в свойствах проекта -> Run -> VM Options)
Код: plaintext
-Dorg.omg.CORBA.ORBInitialHost=localhost -Dorg.omg.CORBA.ORBInitialPort= 3700 
если AppServer удалённый, localhost заменить на хост на котором работает AppServer
3) Добавить в CLASSPATH библиотеки AppServer'а(для NetBeans в свойствах проекта -> Libraries):
Код: plaintext
1.
${AS_ROOT}/lib/appserv-rt.jar
${AS_ROOT}/lib/javaee.jar


А как должно быть по уму, как в туториале или как у Вас написано? Т.е. я так понимаю, что после деплоимента интерфейс RequestProcessorRemote должен быть доступен всем приложениям? И настраиваться на него нужно так, как Вы описали?

и еще вопрос, где про это можно поподробней почитать и как эту кухню тестить.
Заранее благодарю!
...
Рейтинг: 0 / 0
Проблема вызова Session Bean (Java EE5)
    #34385487
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KBoris mozheyko_d1) Использовать appclient НЕобязательно
2) Получать ссылку на удалённый интерфейс так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
     public   static  RequestProcessorRemote getRequestProcessorRemote()  throws  NamingException {
        
        Context ic =  new  InitialContext();
         return  (RequestProcessorRemote) ic.lookup("RequestProcessorRemote");
        
    }
...
requestProcessorBean = getRequestProcessorBean();
2) При запуске указать аргументы(для NetBeans в свойствах проекта -> Run -> VM Options)
Код: plaintext
-Dorg.omg.CORBA.ORBInitialHost=localhost -Dorg.omg.CORBA.ORBInitialPort= 3700 
если AppServer удалённый, localhost заменить на хост на котором работает AppServer
3) Добавить в CLASSPATH библиотеки AppServer'а(для NetBeans в свойствах проекта -> Libraries):
Код: plaintext
1.
${AS_ROOT}/lib/appserv-rt.jar
${AS_ROOT}/lib/javaee.jar


А как должно быть по уму, как в туториале или как у Вас написано?

А это как нравится.
KBorisТ.е. я так понимаю, что после деплоимента интерфейс RequestProcessorRemote должен быть доступен всем приложениям?

Ага, но можно и защищаться
KBoris
И настраиваться на него нужно так, как Вы описали?

Можно так как я написал, а можно и как написал Ekshibarov Vladimir.
KBoris
и еще вопрос, где про это можно поподробней почитать и как эту кухню тестить.
Заранее благодарю!
тут
...
Рейтинг: 0 / 0
Проблема вызова Session Bean (Java EE5)
    #34385642
KBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to mozheyko_d

Все, разобрался, еще нужно было в sun-ejb-jar.xml прописать имя интерфейса.

Спасибо огромное!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема вызова Session Bean (Java EE5)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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