Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517

Попытка создания RMI канала всегда приводит к краху

04.11.2012, 19:19. Показов 1030. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть интерфейс с расчетом на rmi
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package rmi;
import java.rmi.*;
/**
 *
 * @author Gepar
 */
public interface BillingService extends Remote
{
    //определение новой карты
    public void addNewCard(String personName, String card) throws RemoteException;
    //добавить денежные средства на карту
    public void addMoney(String card, double money) throws RemoteException;
    //снять денежные средства с карты
    public void subMoney(String card, double money) throws RemoteException;
    //получение баланска карты
    public double getCardBalance(String card) throws RemoteException;
}
Его реализовывает класс:
Java
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 rmi;
import java.rmi.*;
import java.util.*;
import java.rmi.server.*;
/**
 *
 * @author Gepar
 */
public class BillingServiceImpl extends UnicastRemoteObject
    implements BillingService
{
    private Hashtable hash;//хэш-таблица для хранения карт
    //инициализация сервера
    public BillingServiceImpl() throws RemoteException
    {
        super();
        hash = new Hashtable();
    }
    
    //реализация метода addNewCard интерфейса BillingService
    @Override
    public void addNewCard(String personName, String card) throws RemoteException
    {
        hash.put(card,new Double(0.0));
    }
    
    //реализация метода addMoney интерфейса BillingService
    @Override
    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();
    }
    
    //реализация метода subMoney интерфейса BillingService
    @Override
    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();
    }
    
    //реализация метода getCardBalance интерфейса BillingService
    public double getCardBalance(String card) throws RemoteException
    {
        Double d = (Double) hash.get(card);
        if(d!=null)
            return d.doubleValue();
        else
            throw new NotExistsCardOperation();
    }
    
    //запуск удаленного объекта BillingService
    public static void main(String[] args) throws Exception
    {
        System.out.println("Initializing BillingService...");
        //создание удаленного объекта
        BillingService service = new BillingServiceImpl();
        //задание имени удаленного объекта
        String serviceName = "rmi://localhost/BillingService";
        //регистрация удаленного объекта BillingService в реестре rmiregistry
        Naming.rebind(serviceName, service);
    }
}
При попытке старта оно всегда крашится на ребинде с полотенцем эроров (запустить предварительно в cmd rmiregistry я не забываю). Ошибки:
Кликните здесь для просмотра всего текста
Exception in thread "main" java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: rmi.BillingService
at sun.rmi.server.UnicastServerRef.oldDispa tch(UnicastServerRef.java:419)
at sun.rmi.server.UnicastServerRef.dispatch (UnicastServerRef.java:267)
at sun.rmi.transport.Transport$1.run(Transp ort.java:177)
at sun.rmi.transport.Transport$1.run(Transp ort.java:174)
at java.security.AccessController.doPrivile ged(Native Method)
at sun.rmi.transport.Transport.serviceCall( Transport.java:173)
at sun.rmi.transport.tcp.TCPTransport.handl eMessages(TCPTransport.java:553)
at sun.rmi.transport.tcp.TCPTransport$Conne ctionHandler.run0(TCPTransport.java:808)
at sun.rmi.transport.tcp.TCPTransport$Conne ctionHandler.run(TCPTransport.java:667)
at java.util.concurrent.ThreadPoolExecutor. runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$ Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
at sun.rmi.transport.StreamRemoteCall.excep tionReceivedFromServer(StreamRemoteCall. java:273)
at sun.rmi.transport.StreamRemoteCall.execu teCall(StreamRemoteCall.java:251)
at sun.rmi.server.UnicastRef.invoke(Unicast Ref.java:377)
at sun.rmi.registry.RegistryImpl_Stub.bind( Unknown Source)
at java.rmi.Naming.bind(Naming.java:128)
at rmi.BillingServiceImpl.main(BillingServi ceImpl.java:68)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: rmi.BillingService
at sun.rmi.registry.RegistryImpl_Skel.dispa tch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispa tch(UnicastServerRef.java:409)
at sun.rmi.server.UnicastServerRef.dispatch (UnicastServerRef.java:267)
at sun.rmi.transport.Transport$1.run(Transp ort.java:177)
at sun.rmi.transport.Transport$1.run(Transp ort.java:174)
at java.security.AccessController.doPrivile ged(Native Method)
at sun.rmi.transport.Transport.serviceCall( Transport.java:173)
at sun.rmi.transport.tcp.TCPTransport.handl eMessages(TCPTransport.java:553)
at sun.rmi.transport.tcp.TCPTransport$Conne ctionHandler.run0(TCPTransport.java:808)
at sun.rmi.transport.tcp.TCPTransport$Conne ctionHandler.run(TCPTransport.java:667)
at java.util.concurrent.ThreadPoolExecutor. runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$ Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ClassNotFoundException: rmi.BillingService
at java.net.URLClassLoader$1.run(URLClassLo ader.java:366)
at java.net.URLClassLoader$1.run(URLClassLo ader.java:355)
at java.security.AccessController.doPrivile ged(Native Method)
at java.net.URLClassLoader.findClass(URLCla ssLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoa der.java:423)
at java.lang.ClassLoader.loadClass(ClassLoa der.java:356)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at sun.rmi.server.LoaderHandler.loadProxyIn terfaces(LoaderHandler.java:730)
at sun.rmi.server.LoaderHandler.loadProxyCl ass(LoaderHandler.java:674)
at sun.rmi.server.LoaderHandler.loadProxyCl ass(LoaderHandler.java:611)
at java.rmi.server.RMIClassLoader$2.loadPro xyClass(RMIClassLoader.java:646)
at java.rmi.server.RMIClassLoader.loadProxy Class(RMIClassLoader.java:311)
at sun.rmi.server.MarshalInputStream.resolv eProxyClass(MarshalInputStream.java:257)
at java.io.ObjectInputStream.readProxyDesc( ObjectInputStream.java:1549)
at java.io.ObjectInputStream.readClassDesc( ObjectInputStream.java:1511)
at java.io.ObjectInputStream.readOrdinaryOb ject(ObjectInputStream.java:1750)
at java.io.ObjectInputStream.readObject0(Ob jectInputStream.java:1347)
at java.io.ObjectInputStream.readObject(Obj ectInputStream.java:369)
... 13 more

Какого это может происходить? Вроде всё же элементарно просто, но блин никак оно не ребиндится и всё тут. Проект могу приложить, но не думаю что он внесёт ясность в происходящее.

Добавлено через 1 час 0 минут
Разобрался с проблемой, я и подумать не мог что запуск rmiregistry должен быть именно из той папки откуда будет стартовать сервер. Идиотское ограничение, я то думал что rmiregistry слушает ip и порт, а оно на деле как-то слушает только то что происходит в той же папке откуда его запускали (хотя я до конца не разобрался как оно работает и почему так, но теперь и желания нету).
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.11.2012, 19:19
Ответы с готовыми решениями:

FindNode в TreeView приводит к краху приложения
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using...

Двойное нажатие на заголовок столбца приводит к краху
Добрый день, кто может посоветовать как избежать вылета из приложения при 2-ом нажатии на заголовок столбца? Как отловить, либо ещё...

Ошибка в RMI: nested exception is: java.lang.ClassNotFoundException: rmi.RemoteDateImpl_Stub
Пытаюсь создать простое RMI приложение , а точнее беру пример из книги сервер выглядить так когда его запускаю из JBuilder то...

3
51 / 51 / 42
Регистрация: 06.09.2013
Сообщений: 188
04.08.2014, 05:02
Gepar, у меня та же проблема, но все файлы лежат на рабочем столе, как клиента, так и сервера, однако не работает, rmiregistry так же вызываю с рабочего стола, но не пашет, в чем может быть проблема? Заранее благодарю.
0
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
04.08.2014, 21:52  [ТС]
Yoghurt_92, может в пути есть русские символы и оно теряется, попробуй снести в папку ближе к корню чтобы точно кириллицы не было.
0
51 / 51 / 42
Регистрация: 06.09.2013
Сообщений: 188
04.08.2014, 22:33
Gepar, спасибо, я уже решил проблему) в документации было сказано, что после 5 версии не надо использовать rmic, однако для API относящегося к версии 1.1 нужно генерировать заглушки все-таки)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.08.2014, 22:33
Помогаю со студенческими работами здесь

Первая попытка создания БД
Здравствуйте . Пытался научиться создавать БД. Придумал взять тематику спортивного клуба . Есть 3 таблицы: тренера , клиенты, прибыль ...

FireBird, попытка создания триггера на предотвращения удаления
Доброе время суток форумчане. Такая вот загвоздка, точнее две. Использую FireBird 2.5.4. и ibexpert Посмотрел как люди делают (и...

Неудачная попытка создания объекта Word.application
1C v 7.7 Подскажите, пожалуйста, в чем ошибка? Пытаюсь создать объект World, выдается ошибка: "Неудачная попытка создания объекта...

Попытка создания нового поля в Справочнике и сохранение его
В справочнике Контрагенты есть поля Фактический адрес и Юридический адрес Как они отрабатывают: на форме стоит текст с формулой ...

Дан номер телевизионного канала (от 1 до 5).Вывести на экран наиболее популярные программы заданного канала
Дан номер телевизионного канала (от 1 до 5).Вывести на экран наиболее популярные программы заданного канала.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru