Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Работа с сетью > Взаимодействие клиент сервер посредствам RMI |
Автор: newObject 6.7.2006, 13:08 | ||||||||
Приложение простое существует сервер к которому обращается клиент, сервер возвращает XML документ, клиент строит таблицу. Взаимодействие пытаюсь реализовать посредствам RMI. В принцепе проблема заключается в том, что локально все работает, т.е. когда для rebind и lookup пишешь localhost . интерфейс
сервер
клиент Апплет (реализованно что то вроде патеррна фабричный метод)
файл policy
соотвественно запуск: java -Djava.rmi.server.codebase=file://.../myclasses/ EXDocumentFabric appletviewer table.html Все замечательно отработало. Но когда я попробовал поднять Апачи и положить туда и клиента ( Апплет) и сервер, работать перестал, причем места вызовов (rebind и lookup) обложил catch`ми ничего не ловится. Konqueror пишет Applet failed. java -Djava.rmi.server.codebase=http://13.0.0.60/ -Djava.security.policy=http://13.0.0.60/policy EXDocumentFabric (сервер стартанул) konqueror http://13.0.0.60/table.html ( клиент ответил Applet failed) Потом заметил что нет *_Skel. Насколько я понял *_Stub является классом заглушкой. Вопрос: - для чего нужен *_Skel?; - нужно ли запускать rmic для класса клиента; - что не так. стоит jdk 1.5 были проблемы с jdk 1.5 и jdk 1.4 т.е. когда запускал rmic(jdk 1.4) EXDocumentFabric(имя сервера соответственно) Выпадал эксепшен. Потом прочел где то про несовместимость версий и все заработало. rmic(jdk 1.5) EXDocumentFabric(имя сервера соответственно) Представлен не весь код. Код апплета выдран из TableModel, EXDocument является оболочкой для XML документ. |
Автор: newObject 7.7.2006, 09:52 | ||||||||
![]() Дествительно когда запускаешь сервер:
И клиента:
Все работает отлично. Но когда запускаешь так:
Выпадает Ексепшен и konqueror пишет Loading Class: comcor.net_db.object.EXDocument (ну это вроде понятно нет доступа класс грузится)
Про то что appletviewer урезан по самые гланды это да, но что происходит ![]() Просьба, подскажите сами или укажите ресурс где можно прочитать толковую информацию о политике доступа. Да еще все пишется под ASP Linux 10(Karelia) и запускается с правами root. ![]() |
Автор: BlodTor 7.7.2006, 13:33 |
А аплет в jar упакован или просто .class положил? Если в jar, подписан он или нет? если не подписан, то попробуй подписать его. |
Автор: newObject 7.7.2006, 14:37 |
Нет лежат классами, без jar. Я както об этом даже не думал, понятно что песочница (Sanbox) может по разному реагировать на апплеты с наличием RMI и без него. В принцепе потому и попросил указать чего почитать про политику безопасности. Т.к. в тех книгах что есть кротко упоминается что есть такая и по разному реагирует на приложения с подписью и без нее. ![]() |
Автор: newObject 11.7.2006, 15:18 |
Вопрос по поводу _Skel снимается т.к. с новыми протоколами в RMI Java 2 SDK скелеты стали не нужны. ![]() Но насущный ворос "Что не так" отсается. ![]() |
Автор: powerOn 11.7.2006, 17:01 | ||
Код регистрации компонента выполняется на стороне сервера. Как собственно и создание компонента. Для сервера адрес сервера (т.е его собственный адрес) - localhost. У тебя же, получается, что с твоей машины нужно на удаленном сервере зарегистрировать компонент. Попробуй регистрацию производить по localhost.
|
Автор: newObject 19.7.2006, 17:43 | ||||||||||
Народ, покажите в чем ошибка!!! Я взял пример "Клиентские обратные вызовы RMI" из книги http://ru.sun.com/java/j2ee/book/RMI.pdf Скомпилил, положил в http (http://13.0.0.60/SunTMN/ все лежит в это директории) и... Все работает СУПЕР!!! Решил убрать обратные вызовы и перелопатил пример вот так Applet1.java (клиент)
RMIServer.java (сервер)
TimeMonitor.java (интерфейс)
файл policy (разрешение доступа)
table.html
1. Запускаю апачи. 2. Запускаю rmiregistry 3. Скомпилил и создал заглушку 3. Запускаю сервер (java -Djava.secutity.policy=http://13.0.0.60/SunTMN/policy RMIServer) 4. Запускаю клиента (konqueror http://13.0.0.60/SunTMN/table.html) Все виснет на методе lookup клиента а konqueror говорит гружу класс TimeMonitor!!! ![]() ![]() ![]() |
Автор: newObject 20.7.2006, 16:43 |
Народ, код из последнего поста я замучал, Все хорошо работает. Преребрался к своему коду, опять не работает!!! Сервер стартует нормально, а клиент пишет Applet faild (забыл добавить, что апплет не проходит метода lookup(), т.е. на нем все и падает)! Кто нибудь может сказать по какой причине могут возникать такие сообщения от браузера? Естественно применительно к ситуации (Апплет клиент)->(сервер). |
Автор: newObject 21.7.2006, 11:05 | ||||||
Это, не реально. У меня нет слов!!! Рассказываю по порядку Я забыл указать в первом посте html для запуска моего апплета! а там были совершенно безобидные строчки
Запускал konqueror, то пишет Applet Faild. (его электронную маму ![]() Так как до этого локально appletviewer работал а проблемы возникали именно с konqueror, то его постоянно и запускал. Случайно запустил через appletviewer, и то весело выплюнул
Полез гуглиться и нашел на http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4250410
исправил соответственно значения из процентных на пиксельные!!! ![]() Далее appletviewer сообщил, что апплет не видит класс org.jdom.Document (класс является возвращаемым значением в RMI интерфейсе). Пложил в корень апачи org и все ЗАРАБОТАЛО!!! Вот и думай то ли это моя НЕВНИМАТЕЛЬНОСТЬ то ли нужно ВСПОМНИТЬ ЧЬЮ ТО МАМУ!!! P.S. to be continued, see next post ![]() |