Удаленные процедуры в Java

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



Вот конкретный пример. На лекциях в колледже и уроках в школе я показываю учащимся небольшие видеоролики. Управляю компьютером с помощью сотового телефона. С него обычное целое число передается на нетбук, а он пересылает его на браузер с помощью удаленной процедуры. На стороне браузера открыта страница с апплетом, который является 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 ));


В результате браузер переключается между страницами заранее заготовленной и упорядоченной коллекции с пульта дистанционного управления. В сочетании с видеопроектором такое ПО на нетбуке делает уроки и лекции годаздо более интересными.
  • +3
  • 19 января 2010, 00:12
  • yababay

Комментарии (7)

RSS свернуть / развернуть
+
0
Java действительно стал интересным языком
.Net по-моему рядом не стоял
avatar

Sergei_T

  • 19 января 2010, 08:52
+
0
.net — неприкрытая калька с Java. Как и всё у M$ — калька с чего-то.
avatar

yababay

  • 19 января 2010, 09:21
+
0
Это принцип — захватить и развить
они занимаются распространением мифов и легенд
пиаром о эффективности своих технологий
avatar

Sergei_T

  • 19 января 2010, 10:24
+
0
Респект и уважуха! Желаю удачи!
avatar

Markony

  • 19 января 2010, 17:33
+
0
Красивые исходники — все аккуратно как-то)))
avatar

Gangsta

  • 19 января 2010, 17:45
+
0
Daaa...
avatar

Markony

  • 19 января 2010, 17:49
+
0
времени пока нету углубится — экзамены давят — но после сессии обязательно почитаю и попробую на практике ;)
avatar

FREExLOADER

  • 19 января 2010, 18:39

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.