Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > EJB ошибка приведения типов


Автор: lazycat 20.4.2010, 02:49
Доброго времени суток всем!

Помогите пожалуйста разобраться в странной ситуации.
Пишу stateless session bean, вернее, перевожу с EJB 2.0 на EJB 3.0.
Написал Remote Interface. Написал реализацию бина. Сделал jar и поместил на сервер JBoss.
Сервер сказал, под каким именем он его зарегистрировал (допустим для краткости Hello).
Пока все в порядке. 
Пишу клиент.

Код

...
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","192.168.0.1:1099");

  javax.naming.Context context = new javax.naming.InitialContext(properties);

  Object ref = context.lookup("HelloBean/remote");

   Hello hw = (Hello)javax.rmi.PortableRemoteObject.narrow(ref, Hello.class);
...


Компилирует нормально. При выполнении в последней строчке исключение
...
 javax.rmi.PortableRemoteObject.narrow(Unknown Source)
...

Не находит Hello.class? Но он у него под носом лежит и текущий каталог в CLASSPATH прописан.
Для верности еще прописал jar, копию того, который был отправлен на сервер. 

Во всех публикациях строка типа Hello hw = (Hello)javax.rmi.PortableRemoteObject.narrow(ref, Hello.class);
ни у кого не вызывает возражений. В EJB 2.0 я так получал домашний интерфейс.
В чем может быть проблема?

Заранее благодарен всем откликнувшимся


Автор: MisterCleric 20.4.2010, 09:34
Привет. А какого типа полачется объект 
Цитата

Object ref = context.lookup("HelloBean/remote");


Автор: lazycat 20.4.2010, 13:37
Цитата(MisterCleric @  20.4.2010,  09:34 Найти цитируемый пост)
Привет. А какого типа полачется объект 


Не понял вопроса. Что такое "полачется"?

Автор: MisterCleric 20.4.2010, 13:48
Приношу извинения за опечатки. 
Суть сводиться к тому, что в EJB3, то что ты лукапишь в JNDI и есть, то что тебе нужно. Не надо никаких PortableRemoteObject.narrow.

Как ты запускаешь своего клиента? Сервером или руками?

Автор: lazycat 20.4.2010, 13:59
Цитата(MisterCleric @  20.4.2010,  13:48 Найти цитируемый пост)
Как ты запускаешь своего клиента? Сервером или руками? 


Руками. Это обычное приложение с методом main()

Автор: MisterCleric 20.4.2010, 14:54
Хорошо. А действительно ли CLASSPATH у твоего клиента тот, о котором ты думаешь?

Автор: lazycat 20.4.2010, 15:17
Цитата(MisterCleric @  20.4.2010,  14:54 Найти цитируемый пост)
Хорошо. А действительно ли CLASSPATH у твоего клиента тот, о котором ты думаешь? 


Указываю при вызове java 

java -cp .;jbossall-client.jar HelloClient

Даже от отчаяния так:

java -cp .;Hello.jar;jbossall-client.jar HelloClient

здесь Hello.jar - это тот архив, который копировался на сервер. Все архивы лежат в текущем каталоге.

Автор: MisterCleric 20.4.2010, 15:26
Странновато: вот это
Цитата

java -cp .;Hello.jar;jbossall-client.jar HelloClient

Должно было помочь, если действительно в Hello.jar лежит Hello.class

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)