powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / EJB3 + JBoss: простой пример по книжке, помогите разобраться...
25 сообщений из 55, страница 1 из 3
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34674423
J-Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, уважаемые гуру! ;)

Я начинающий в EJB и JBoss, поэтому начал читать книжку "Manning - Ejb 3 In Action (2006)", если кто знает. Так вот, там в первой части рассматривается простой пример. Смысл - показать, как с помощью аннотаций можно сделать из простого Ява-класса Session Bean. Всего там три файла. Они пишут, что должно работать, а у меня нифига не работает, вылетает NullPointer Exception.

Сначала приведу листинги, потом задам вопросы.

Итак, HelloUser.java :
Код: plaintext
1.
2.
3.
4.
5.
6.
package ejb3inaction.example;
import javax.ejb.Remote;
@Remote
public interface HelloUser
{                                        
    public void sayHello(String name);
}
HelloUserBean.java :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
package ejb3inaction.example;
import javax.ejb.Stateless;
@Stateless                                                          
public class HelloUserBean implements HelloUser
{                   
    public void sayHello(String name)
    {
        System.out.println("Hello " + name + " welcome to EJB 3 In Action!");
    }
}
HelloUserClient.java :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
package ejb3inaction.example;

import javax.ejb.EJB;

public class HelloUserClient
{
      @EJB
        private static HelloUser helloUser;
    	public static void main(String[] args)
        {
             helloUser.sayHello("Curious George");
             String h = new String("");
             System.out.println(h);
             System.out.println("Invoked EJB successfully .. see server console for output");     
        }
}

IDE я использую MyEclipse 5.5.1 GA. JBoss сервер 4.2.0.GA. Создал EJB3 проект в MyEclipse, закинул туда эти три исходника, задеплоил их в жбосс, запустил класс HelloUserClient через main и получил:
Код: plaintext
1.
Exception in thread "main" java.lang.NullPointerException
	at ejb3inaction.example.HelloUserClient.main(HelloUserClient.java: 12 )

Теперь, собственно, вопросы к вам:

Почему возникает такая ошибка? Пример я не менял, всё из книжки... Пишут, что должно работать. Пишут, что способ доступа к бину происходит через аннотацию @EJB. Но не пашет :( В чём причина, знающие люди, подскажите!

Т.к. я знаком с обычными классами в ява, возникает логичный вопрос: как инициализируется Session бины? Ну, у них нет конструктора, я не могу создать их экземпляр через new. Я понимаю, что выполняются они в EJB-контейнере, но как доступиться к ним? Пример выше - не пашет, но как же? JNDI?

Не мог бы кто-то помочь мне запустить этот же пример, но используя JNDI для доступа к бину из клиента? Что для этого нужно сделать? Я знаю, что нужно сделать примерно следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
Properties properties = new Properties();
properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
properties.put("java.naming.factory.url.pkgs","org.jboss.naming : org.jnp.interfaces");
properties.put("java.naming.provider.url","localhost:1099");
InitialContext ctx = new InitialContext(properties);
HelloUser helloUser = (HelloUser) ctx.lookup("ejb3inaction.example.HelloUser");
helloUser.sayHello("Curious George");
Но как и где записать, что бин HelloUser доступен именно по имени "ejb3inaction.example.HelloUser" ? Т.к. видимо по этой причине в вышеописанном примере при добавлении этого кода возникает экзэпшн:
Код: plaintext
javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]

Помогите плиз..


Очень благодарен заранее всем, кто попытается помочь. У меня есть огромное желание в этом разобраться. Спасибо большое заранее!
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34674459
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавь в класспаф все либы из /jboss/client и ругаться не будет
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34674497
J-Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deady
добавь в класспаф все либы из /jboss/client и ругаться не будет
Posted via ActualForum NNTP Server 1.4

Спасибо за ответ.

1. Это ответ по поводу использования JDNI (javax.naming.NoInitialContextException)?
2. Там 56 либов, все их добавлять? Нет ли иного способа? Может, в проект как-то или ещё что-нить?
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34674507
J-Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deady
добавь в класспаф все либы из /jboss/client и ругаться не будет
Posted via ActualForum NNTP Server 1.4
Добавил в либы проекта один либ, в котором есть NamingContextFactory: jbossall-client.jar и вроде как заработало. Но с экзепшном: "javax.naming.NameNotFoundException: ejb3inaction.example.HelloUser not bound"

Тут уже понятно в чём дело, отсюда возвращаюсь к своему вопросу №3 в первом посте, а именно: "Но как и где записать, что бин HelloUser доступен именно по имени "ejb3inaction.example.HelloUser" ?"

И что насчёт первого примера с @EJB? По идее, должно работать... нет?
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34676285
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторо с экзепшном: "javax.naming.NameNotFoundException: ejb3inaction.example.HelloUser not bound"


пора завести фак... первое чего нужно научиться на Jboss это JNDIView см тута

авторИ что насчёт первого примера с @EJB? По идее, должно работать... нет?

запускаются такие проги хитрым ant скриптом, называется это j2ee client application и ... долго объяснять ...

используйте клиента с лукапом. вот ещё tutorial
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34676650
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кароч

codeexamples-javaeesdk.zip\glassfish\chapter1\build.xml
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<target name="run"
          depends="init">
    <echo message="Executing client class using ${J2EE_HOME}/bin/${APPCLIENT} "></echo>
    <exec executable="${J2EE_HOME}/bin/${APPCLIENT}">
      <arg line="-client lib/chapter1-client.jar"/>
    </exec>
  </target>

codeexamples-javaeesdk.zip\glassfish\common.xml
Код: plaintext
        <property name="APPCLIENT" value="appclient.bat" />

собственно appclient.bat из glassfishа испорльзуется для запуска этной муры ...
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34678474
J-Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exppпервое чего нужно научиться на Jboss это JNDIView см тута Это первый линк, который я нашёл и по которому делал пример. Место, где просят глянуть в JNDI View я видел, открывал тот линк(http://localhost:8080/jmx-console/), но из написанного "Select the JNDI View and list to show all deployed beans" не совсем понял что надо было запустить ф-цию ниже. Благодаря Вашей ссылке на туториал ниже я действительно понял как и что там смотреть. Спасибо.

exppзапускаются такие проги хитрым ant скриптом, называется это j2ee client application и ... используйте клиента с лукапом. Понял, спасибо. Теперь так и буду делать.

exppвот ещё tutorial Большое спасибо! Теперь всё получается, работа с JNDI там отлично описана!


Теперь, если можно ещё два вопроса:

1. После прочтения ответов, советов, я сделал другой пример, который полностью у меня получился. Т.е. вызывался метод бина, который находился через JNDI lookup. Потом я решил переделать так же вышеописанный пример, но почему-то не получилось. Хотел спросить, в чём может быть ошибка.

Итак, привожу листинг классов из работающего примера:
Код: 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.
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.
/**
 * 
 */
 package  main.ejb3;

 import  java.io.Serializable;

 public   interface  IMyBean  extends  Serializable {
	
	 public   void  doSomething();

}
//==================================
 package  main.ejb3;

 import  javax.ejb.Local;

@Local
 public   interface  MyBeanLocal  extends  IMyBean {

}
//==================================
 package  main.ejb3;

 import  javax.ejb.Remote;

@Remote
 public   interface  MyBeanRemote  extends  IMyBean {

}
//==================================
 package  main.ejb3;

 import  javax.ejb.Stateless;

@Stateless
 public   class  MyBean  implements  MyBeanLocal, MyBeanRemote
{

	 /**
     * 
     */
     private   static   final   long  serialVersionUID = 1L;
	
	  public   void  doSomething()
	 {
	     System.out.println("Hello World!");
	 }
	
}
//==================================
 package  main.ejb3;

 import  javax.naming.*;
 import  java.util.Properties;

 public   class  MyBeanClient 
{

	/**
	 * @param args
	 */
	 public   static   void  main(String[] args) 
    {
		Properties properties =  new  Properties();
		properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
		properties.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
		properties.put("java.naming.provider.url","localhost:1099");
		
		 try  
        {
	        InitialContext ctx =  new  InitialContext(properties);
	        MyBeanRemote bean = (MyBeanRemote) ctx.lookup("MyBean/remote");
	         bean.doSomething();
	    }
         catch  (NamingException e) 
        {
	        e.printStackTrace();
	    }
	}

}

По такой же схеме, только кроме класса, аналогичного IMyBean. Т.е. я сделал так:
Код: 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.
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.
 package  ejb3inaction.example;
 import  java.io.Serializable;

 import  javax.ejb.Local;
@Local
 public   interface  HelloUserLocal  extends  Serializable {                                        
     public   void  sayHello(String name);
}
//=======================================
 package  ejb3inaction.example;
 import  java.io.Serializable;

 import  javax.ejb.Remote;
@Remote
 public   interface  HelloUserRemote  extends  Serializable {                                        
     public   void  sayHello(String name);
}
//=======================================
 package  ejb3inaction.example;
 import  javax.ejb.Stateless;
// import JLogger.JLogManager;
@Stateless
 public   class  HelloUserBean  implements  HelloUserRemote, HelloUserLocal
{                   
    /**
     * 
     */
     private   static   final   long  serialVersionUID = 1L;

     public   void  sayHello(String name)
    {
        // JLogManager jLogMan = new JLogManager("C:\\logEJB.txt");
        // jLogMan.logInfoEvent("HelloUserBean->sayHello", "got into");
        // jLogMan.logInfoEvent("HelloUserBean->sayHello", "name = " + name);
        System.out.println("Hello " + name + " welcome to EJB 3 In Action!");
        // jLogMan.logInfoEvent("HelloUserBean->sayHello", "after System.out, getting out");
    }
}
//=============================================
 package  ejb3inaction.example;

 import  java.util.Properties;

 import  javax.naming.InitialContext;
 import  javax.naming.NamingException;

 public   class  HelloUserClient
{
    	 public   static   void  main(String[] args)
        {

            Properties properties =  new  Properties();
            properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
            properties.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
            properties.put("java.naming.provider.url","localhost:1099");

            
             try  
            {
                InitialContext ctx =  new  InitialContext(properties);
                HelloUserRemote helloUserRemote = (HelloUserRemote) ctx.lookup("HelloUserBean/remote");
                helloUserRemote.sayHello("Curious George");
                System.out.println("Invoked EJB successfully .. see server console for output");
            }
             catch  (NamingException e) 
            {
                e.printStackTrace();
            }

        }
}

Так вот, этот второй переделанный пример работает, НО выводит в консоль только "Invoked EJB successfully .. see server console for output". Т.е. бин находит, в ф-цию идёт, а почему не работает - не пойму, ведь всё сделал, как в примере выше! Даже "extends Serializable" поставил у ремоут и локал интерфейсов(без этого тоже не работало). Как исправить, не подскажете? Может, у кого-то глаз более намётан?


2. Как видите, во втором примере есть // import JLogger.JLogManager; и далее в тексте вызываются методы класса этой либы. Это мой набор классов, я писал его ещё давно, он просто форматированно пишет на диск в заданный файл лог с датой. Дело в том, что я переписал JLogger.jar в дир "%JBOSS_HOME%\lib\ext\", а потом в MyEclipse я включил его в библиотеки проекта. Всё окей, Эклипс даже видит методы классов и не ругается, что не может импортировать. А, вот, при запуске HelloUserClient, вылазит экзепшн: "Exception in thread "main" javax.ejb.EJBException: java.lang.RuntimeException: java.lang.NoClassDefFoundError: JLogger/JLogManager; nested exception is: java.lang.RuntimeException: java.lang.NoClassDefFoundError: JLogger/JLogManager
java.lang.RuntimeException: java.lang.NoClassDefFoundError: JLogger/JLogManager". В чём дело - тоже не пойму. Я так же импортировал import javax.naming.InitialContext из переписанной jnpserver.jar и ничего не ругалось... а тут на тебе! Главное, что библиотека JLogger полностью рабочая, я нормально юзал её в сервлетах. Может, кто что подскажет?


Спасибо ещё раз всем огромное за помощь!
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34679287
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. похоже, тут какой-то случай nameclashа. думаю можно забить: на практике такое бывает редко: local remote разделяются довольно сильно.выдели суперинтерфейс как в работающем примере.

2. выкинь свой JLogger . никогда не клади jarы в lib/extы. jboss хорошо повязан с log4j и хорошим тоном является использование common-logging. так же модно использовать jndi.properties
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34680236
J-Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
expp1. похоже, тут какой-то случай nameclashа. думаю можно забить: на практике такое бывает редко: local remote разделяются довольно сильно.выдели суперинтерфейс как в работающем примере. Пасиб, так и сделаю. По всей видимости, приму это за правило для написания Session Bean'ов. Правильно?

expp2. выкинь свой JLogger . никогда не клади jarы в lib/extы. jboss хорошо повязан с log4j и хорошим тоном является использование common-logging. так же модно использовать jndi.properties Я его выкину, нет проблем. Я не к тому. Log4J я и так собирался использовать, просто проверил как можно подключить дополнительные компоненты приложения? К примеру, если кто-то написал часть приложения, как её подключить и откуда, если не из lib/ext? (Кстати, из других мест она так же не работала...)


Спасибо большое за помощь.
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34680328
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
J-Pro Пасиб, так и сделаю. По всей видимости, приму это за правило для написания Session Bean'ов. Правильно? да правильно, что ? забили

J-Pro Я его выкину, нет проблем. Я не к тому. Log4J я и так собирался использовать, просто проверил как можно подключить дополнительные компоненты приложения? К примеру, если кто-то написал часть приложения, как её подключить и откуда, если не из lib/ext? (Кстати, из других мест она так же не работала...)
смотрим паковку ear war jar-ов в j2ee spec обычно lib classes каталоги или class-path в манифестах
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34680456
J-Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exppда правильно, что ? забилиКстати, щас, вот, выяснил в чём причина. Оказывается, из бина System.out выводит в консоль сервера, блин :) Т.е. всё работает как надо. Да, сказывается отсутствие опыта работы с EJB.

exppсмотрим паковку ear war jar-ов в j2ee spec обычно lib classes каталоги или class-path в манифестах тут нашёл такую фразу:JBoss will not support the Java EE 5 EAR format until version JBoss 5.x. To deploy a persistence archive (a .jar with no EJBs and just persistence units), you must list it in application.xml as an ejb module. Значит, по идее(у меня 4.2.0 GA), если я захочу юзать какую-то библиотеку, типа JLogger.jar(к примеру), мне необходимо создать файл <application>.xml и добавить туда инфу об этой либе? А есть где-то ссылки на примеры, где добавляют простые либы, а не persistence unit? Просто у меня в каталоге %JBOSS_HOME%\server\default\deploy\ лежит только Chapter1.jar, ничего типа Chapter1.xml нет... Нет ссылок? Заранее прошу прощения за некомпетентность в этой области, но больше не к кому обратиться, вокург никто не знает EJB :(

Ещё раз спасибо.
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34680996
J-Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё, по поводу библиотек разобрался. Правда, только с одним методом, с методом пихания библиотек в дир "%JBOSS_HOME%\server\default\lib\" и прописывания их в свойствах прокета. Так у меня всё работает. А, вот, насчёт EAR или WAR - я не в курсе... Может, кто подскажет, ежели знает? Или ссылочку, где почитать? Я юзаю MyEclipse 5.5.1 GA, ежели чего... А сервер JBoss у меня 4.2.1 GA.

Пасиб заранее.
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34682520
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кароч, где я узнал как паковать *ar-ы я незнаю что то не гуглицца ничо

может тут

кароче свои jar клади в xx.war/web-inf/lib , xx.ear/app-inf/lib или в xx.ear/ но тогда на него надо сослаться в манифесте ejb.jar

может в спеке чего найдёшь?
ну и ide собирают обычно eclipse wtp точно

вопрос к гурам: где написано как ear паковать?
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34711979
AndreySJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите плиз как вы побороли эксэпшен такого плана - javax.naming.NameNotFoundException: UserLogonImpl not bound ?
Я задеплоил на Jboss4.2.0 ear-архив с бином UserLogonImpl и его интерфйсами UserLogonLocal, UserLogonRemote:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
 public   class  UserLogonImpl  implements  UserLogonLocal, UserLogonRemote {
	 public   Long  logon()  {
 	}

	 public   void  logout() {
	}
Код: plaintext
1.
2.
3.
4.
5.
@Remote
 public   interface  UserLogonRemote {
	 public   Long  logon();
	 public   void  logout();
}
Код: plaintext
1.
2.
3.
4.
5.
@Local
 public   interface  UserLogonLocal{
	 public   Long  logon();
	 public   void  logout();
}

Приложение нормально развернулось на серваке, в логе JBoss написал:
Код: plaintext
1.
2.
3.
4.
5.
6.
...
[org.jboss.ejb3.Ejb3AnnotationHandler] found EJB3: ejbName=UserLogonImpl,  class =com.impl.UserLogonImpl, type=STATELESS
[org.jboss.ejb3.ProxyDeployer] no declared remote bindings  for  : UserLogonImpl
[org.jboss.ejb3.ProxyDeployer] there is remote interfaces  for  UserLogonImpl
[org.jboss.ejb3.ProxyDeployer]  default  remote binding has jndiName of UserLogonImpl/remote
...

Из Эклипса запускаю клиента:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 public   class  Client {

	 public   static   void  main(String[] args) {
		 try  {
			Properties properties =  new  Properties();
                        properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
                        properties.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
                        properties.put("java.naming.provider.url","localhost:1099");
            
			Context context =  new  InitialContext(properties);

			UserLogonRemote userLogon = (UserLogonRemote) context.lookup(UserLogonImpl. class .getSimpleName() + "/remote");
		}  catch  (Exception ex) {
			ex.printStackTrace();
		}
	}

Летит
[java] javax.naming.NameNotFoundException: UserLogonImpl not bound
[java] at org.jnp.server.NamingServer.getBinding(NamingServer.java:529)
[java] at org.jnp.server.NamingServer.getBinding(NamingServer.java:537)
[java] at org.jnp.server.NamingServer.getObject(NamingServer.java:543)
[java] at org.jnp.server.NamingServer.lookup(NamingServer.java:267)
[java] at org.jnp.server.NamingServer.lookup(NamingServer.java:270)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34712015
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
@Stateless(name="Foo", mappedName="beans/Foo")
@RemoteBinding(jndiBinding="beans/Foo/remote")

попробуйте так бин озаглавить. Foo поменяйте на имя бина
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34712042
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лукапить так:

Код: plaintext
1.
2.
3.
4.
    Object fooRef = context.lookup("beans/Foo/remote");
    UserLogonRemote foo =
(UserLogonRemote)PortableRemoteObject.narrow(fooRef,UserLogonRemote.class);


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34712051
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
берёшь jndiView (см. выше в ветке) смотришь что к чему привязалось
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34712081
J-Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А ещё лучше запустить у себя(при запущенном JBoss'е) в браузере: http://localhost:8080/jmx-consol , выбрать оттуда JNDIView, спуститься по списку вниз до "List of MBean operations:", ниже, сразу после таблички, должна быть кнопочка Invoke, нажать её. На появившейся страничке найти "Global JNDI Namespace", где и поискать свой UserLogonImpl. Если он там есть, значит он забинден, причём, покажет какими интерфейсами. Если нет - то ищите причину...
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34712129
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
J-ProА ещё лучше запустить у себя(при запущенном JBoss'е) в браузере: http://localhost:8080/jmx-consol , выбрать оттуда JNDIView, спуститься по списку вниз до "List of MBean operations:", ниже, сразу после таблички, должна быть кнопочка Invoke, нажать её. На появившейся страничке найти "Global JNDI Namespace", где и поискать свой UserLogonImpl. Если он там есть, значит он забинден, причём, покажет какими интерфейсами. Если нет - то ищите причину...

жжот парняга
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34712182
AndreySJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, разобрался. Только счас вылетает такое:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
User:jboss.j2ee:ear=assetunity.ear,jar=assetunity-ejb.jar,name=UserLogonImpl,service=EJB3
java.lang.reflect.UndeclaredThrowableException
	at $Proxy0.logon(Unknown Source)
	at com.client.Client.main(Client.java: 22 )
Caused by: java.lang.Exception: Can not make remoting client invocation due to not being connected to server.
	at org.jboss.remoting.Client.invoke(Client.java: 1555 )
	at org.jboss.remoting.Client.invoke(Client.java: 530 )


Код: plaintext
1.
2.
3.
UserLogonRemote userLogon = (UserLogonRemote) context.lookup("UserLogonImpl/remote");
System.out.println("User:" + userLogon); - здесь отрабатывает нормально
System.out.println("User Id:" + userLogon.logon(); - здесь валится

Код метода userLogon.logon() просто возвращает захардкоженый ID
Что не правильно ?
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34712395
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
читать умеете? все же написал
Код: plaintext
1.
Object fooRef = context.lookup("beans/Foo/remote");
UserLogonRemote foo = (UserLogonRemote)PortableRemoteObject.narrow(fooRef,UserLogonRemote. class );

хинт: обратите внимание на последнюю строку
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34713080
AndreySJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deadyчитать умеете? все же написал
Код: plaintext
1.
Object fooRef = context.lookup("beans/Foo/remote");
UserLogonRemote foo = (UserLogonRemote)PortableRemoteObject.narrow(fooRef,UserLogonRemote. class );

хинт: обратите внимание на последнюю строку
Тоже самое что с моим вариантом, что с Вашим. Я пробовал и Ваш вариант - разницы не заметил.
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34713109
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
приведите еще раз код. без PortableRemoteObject работать в принципе не будет. использование его - обязательное условие работы rmi
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34713182
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это вроде раньше так было. у меня на джейбосе удалённые заглушки просто кастились без PortableRemoteObject
...
Рейтинг: 0 / 0
EJB3 + JBoss: простой пример по книжке, помогите разобраться...
    #34713223
AndreySJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@Stateless(name="UserLogonImpl", mappedName="beans/UserLogonImpl")
@RemoteBinding(jndiBinding="beans/UserLogonImpl/remote")
 public   class  UserLogonImpl  implements  UserLogonLocal, UserLogonRemote {
	 public   Long  logon() {
                return  13L;
	}

	 public   void  logout() {
	}
}
Код: plaintext
1.
2.
3.
4.
5.
@Local
 public   interface  UserLogonLocal{
	 public   Long  logon();
	 public   void  logout();
}
Код: plaintext
1.
2.
3.
4.
5.
@Remote
 public   interface  UserLogonRemote {
	 public   Long  logon();
	 public   void  logout();
}

Клиент
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 public   class  Client {

	 public   static   void  main(String[] args) {
		 try  {
			Properties properties =  new  Properties();
                        properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
                        properties.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
                        properties.put("java.naming.provider.url","localhost:1099");
            
			Context context =  new  InitialContext(properties);
			Object fooRef = context.lookup("beans/UserLogonImpl/remote");
			UserLogonRemote userLogon = UserLogonRemote)PortableRemoteObject.narrow(fooRef, UserLogonRemote. class );
			System.out.println("User:" + userLogon);
			System.out.println("User Id:" + userLogon.logon("andrey", "cjkywt"));
			
		}  catch  (Exception ex) {
			ex.printStackTrace();
		}
	}


Exception:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
java.lang.reflect.UndeclaredThrowableException
	at $Proxy0.logon(Unknown Source)
	at com.client.Client.main(Client.java: 25 )
Caused by: java.lang.Exception: Can not make remoting client invocation due to not being connected to server.
	at org.jboss.remoting.Client.invoke(Client.java: 1555 )
	at org.jboss.remoting.Client.invoke(Client.java: 530 )
	at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java: 41 )
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java: 88 )
	at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java: 46 )
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java: 88 )
	at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java: 40 )
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java: 88 )
	at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java: 72 )
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java: 88 )
	at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java: 103 )
	...  2  more


Global GNDI Namespace:
...
+- beans (class: org.jnp.interfaces.NamingContext)
| +- UserLogonImpl (class: org.jnp.interfaces.NamingContext)
| | +- remote (proxy: $Proxy70 implements interface com.ejb3.UserLogonRemote,interface org.jboss.ejb3.JBossProxy,interface javax.ejb.EJBObject)
...
...
Рейтинг: 0 / 0
25 сообщений из 55, страница 1 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / EJB3 + JBoss: простой пример по книжке, помогите разобраться...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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