Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> клиент-серверное приложение с использованием RMI, исключения при запуске  
V
    Опции темы
SolarCell
  Дата 1.7.2008, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 1.7.2008

Репутация: нет
Всего: нет



Здравствуйте... Пытаюсь создать простенькое клиент-серверное приложение. Нашла примеры, пробую.
Вот код реализации интерфейса сервера:

Код

package serverclient;

//realization of remote  Billingservice interface

import java.rmi.*;
import java.util.*;
import java.rmi.server.*;
import serverclient.NotExistsCardOperation;

public class BillingServiceImpl extends UnicastRemoteObject implements BillingService{
private Hashtable hash;

public BillingServiceImpl() throws RemoteException{
super();
hash=new Hashtable();
}

public void addNewCard(String personName,String card) throws RemoteException{
hash.put(card,new Double(0.0));
}

public void addMoney(String card,double money) throws RemoteException{
Double d=(Double)hash.get(card);
if(d!=null) hash.put(card,new Double(d.doubleValue()+money));
else throw new NotExistsCardOperation();
}

public void subMoney(String card,double money) throws RemoteException{
Double d=(Double)hash.get(card);
if(d!=null) hash.put(card,new Double(d.doubleValue()-money));
else throw new NotExistsCardOperation();
}

public double getCardBalance(String card) throws RemoteException{
Double d=(Double)hash.get(card);
if(d!=null) return d.doubleValue();
else throw new NotExistsCardOperation();
}

//start remote service
public static void main(String args[]) throws Exception{
System.out.println("Initializing BillingService.......");
BillingService service=new BillingServiceImpl();
//the name of remote object
String serviceName="rmi://localhost/BillingService";
//registration of the remote object in the rmiregistry
Naming.rebind(serviceName,service);
}
}


С помощью rmic создаю заглушку, с помощью rmiregistry запускаю реестр, после запускаю сервер, и  получаю кучу исключений. 

Вот трассировка:

c:\Java>java serverclient.BillingServiceImpl
Initializing BillingService.......
Exception in thread "main" java.rmi.ServerException: Server RemoteException; nested exception is:
        java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
        java.lang.ClassNotFoundException: serverclient.BillingServiceImpl_Stub
        at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
        at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
        at sun.rmi.server.UnicastRef.invoke(Unknown Source)
        at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
        at java.rmi.Naming.rebind(Unknown Source)
        at serverclient.BillingServiceImpl.main(BillingServiceImpl.java:47)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
        java.lang.ClassNotFoundException: serverclient.BillingServiceImpl_Stub
Caused by: java.lang.ClassNotFoundException: serverclient.BillingServiceImpl_Stub

Помогите, пожалуйста, разобраться, отчего возникает это исключение...package serverclient;

PM MAIL   Вверх
Platon
Дата 1.7.2008, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 3
Всего: 40



Я давно забыл как там реализована работа с RMI. Но по приведенному стек-трейс могу сделать вывод, что 

Цитата(SolarCell @  1.7.2008,  22:05 Найти цитируемый пост)
java.lang.ClassNotFoundException: serverclient.BillingServiceImpl_Stub        at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)


Получена ошибка от сервера. Серверное приложение ругается на то, что ему не достает в classpath класса serverclient.BillingServiceImpl_Stub Проверь, всё ли правильно там у тебя?
PM MAIL ICQ   Вверх
SolarCell
  Дата 2.7.2008, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 1.7.2008

Репутация: нет
Всего: нет



Классы у меня все находятся в C:\Java\bin, в CLASSPATH этот путь прописан, если бы нет, класс сервера вообще не запускался бы, но он запускается, а потом когда доходит до
Код

BillingService service=new BillingServiceImpl();
//the name of remote object
String serviceName="rmi://localhost/BillingService";
//registration of the remote object in the rmiregistry
Naming.rebind(serviceName,service);

выдаёт эти exceptions, хотя класс заглушки создан, и хранится он в C:\Java\bin\serverclient\ , как и все остальные классы. Если остальные выполняются из этой директории, то и заглушка должна быть видна? Или нет?  
PM MAIL   Вверх
LSD
Дата 2.7.2008, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



У тебя не может найти заглушку: java.lang.ClassNotFoundException: serverclient.BillingServiceImpl_Stub, проверь что ты ее скомпилировал и положил в classpath.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
SolarCell
Дата 2.7.2008, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 1.7.2008

Репутация: нет
Всего: нет



Вопрос: как нужно компилировать заглушку? 
Она создана - 
BillingServiceImpl_Stub.class


нужно что-то ещё?

Добавлено через 8 минут и 23 секунды
Вот ещё, смотрю класс заглушки, и вижу там - 
stub class initialization failed
 smile 

PM MAIL   Вверх
SolarCell
Дата 2.7.2008, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 1.7.2008

Репутация: нет
Всего: нет



Спасибо всем, всё работает))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0698 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.