Удаленные процедуры в Java
Некоторое время назад я писал об удаленных (т.е. выполняемых дистанционно) процедурах в веб-программировании. Там всё не просто, но разобраться можно. Однако если речь идет о создании клиента и сервера, между которыми распределяются вычисления, на чистой Java, то в нынешних версиях JDK такие программы пишутся очень просто. Так было не всегда. В ранних версиях Java создание rmi (удаленных процедур) требовало множества промежуточных операций и вдумчивого вкуривания мануалов. Таперь требуется всего несколько строк.

Вот конкретный пример. На лекциях в колледже и уроках в школе я показываю учащимся небольшие видеоролики. Управляю компьютером с помощью сотового телефона. С него обычное целое число передается на нетбук, а он пересылает его на браузер с помощью удаленной процедуры. На стороне браузера открыта страница с апплетом, который является Rmi-сервером. Т.е. осуществляется связь между двумя Java-машинами, причем они могут находиться на разных хостах, в том числе в Интернете. Вот код апплета-сервера, реализующего интерфейс Browserable с единственным методом goToURL(int n):
А вот что происходит на стороне клиента, пересылающего в браузер числа, приходящие с сотового телефона по каналу bluetooth:
Как только клиенту удается найти удаленный сервер, можно обращаться к последнему за выполнением процедур так же, как если бы действие происходило в «родном» адресном пространстве:
В результате браузер переключается между страницами заранее заготовленной и упорядоченной коллекции с пульта дистанционного управления. В сочетании с видеопроектором такое ПО на нетбуке делает уроки и лекции годаздо более интересными.

Вот конкретный пример. На лекциях в колледже и уроках в школе я показываю учащимся небольшие видеоролики. Управляю компьютером с помощью сотового телефона. С него обычное целое число передается на нетбук, а он пересылает его на браузер с помощью удаленной процедуры. На стороне браузера открыта страница с апплетом, который является Rmi-сервером. Т.е. осуществляется связь между двумя Java-машинами, причем они могут находиться на разных хостах, в том числе в Интернете. Вот код апплета-сервера, реализующего интерфейс Browserable с единственным методом goToURL(int n):
import java.net.URL;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Main extends java.applet.Applet implements Browserable {
public void init(){
System.setSecurityManager(new RMISecurityManager());
try{
Browserable stub = (Browserable)UnicastRemoteObject.exportObject(this, 0);
Registry reg = LocateRegistry.createRegistry(8099);
reg.bind("Browser", stub);
// ...
// Тут происходит еще кое-что, не заслуживающее внимания
}
catch(Exception ex){System.out.println(ex);}
}
public String goToURL(int id){
try{
URL url = new URL(getDocumentBase(), id + ".html");
getAppletContext().showDocument(url, "main");
return "Yo!";
}
catch(Exception ex){return ex.toString();}
}
}А вот что происходит на стороне клиента, пересылающего в браузер числа, приходящие с сотового телефона по каналу bluetooth:
...
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import com.michaelbelyakov1967.projects.MOBILE_COLLEGE.service.Browserable;
public class Main {
private Browserable stub;
private Thread lookupRmi = new Thread(
new Runnable(){
public void run(){
while(stub == null){
try{
Thread.sleep(2000);
System.out.println("Trying RMI...");
Registry reg = LocateRegistry.getRegistry(null, 8099);
stub = (Browserable)reg.lookup("Browser");
System.out.println("RMI registered");
if(stub == null) throw new java.net.ConnectException();
}
catch(java.rmi.ConnectException ex){}
catch(java.net.ConnectException ex){}
catch(Exception ex){}
}
}
}
);
...
Как только клиенту удается найти удаленный сервер, можно обращаться к последнему за выполнением процедур так же, как если бы действие происходило в «родном» адресном пространстве:
System.out.println(stub.goToURL( i ));В результате браузер переключается между страницами заранее заготовленной и упорядоченной коллекции с пульта дистанционного управления. В сочетании с видеопроектором такое ПО на нетбуке делает уроки и лекции годаздо более интересными.

Комментарии (7)
RSS свернуть / развернуть.Net по-моему рядом не стоял
Sergei_T
yababay
они занимаются распространением мифов и легенд
пиаром о эффективности своих технологий
Sergei_T
Markony
Gangsta
Markony
FREExLOADER
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.