Documente Academic
Documente Profesional
Documente Cultură
Limbajul Java permite implementarea unor clase ale căror metode sunt apelabile de la
distanţă. Crearea acestor programe distribuite este posibilă folosind Java Remote Method
Invocation (RMI).
În continuare se descrie o versiune distribuita a programului HelloWorld.
Pentru un asemenea program distribuit avem nevoie de următoarele fişiere sursă:
interfaţa remote
serverul remote ce implementează interfaţa remote
un applet sau un program ce invocă metoda serverului
codul HTML pentru pagina de web ce refera appletul
package examples.hello;
public interface Hello extends java.rmi.Remote
{ String sayHello() throws java.rmi.RemoteException; }
Pentru scrierea unui obiect remote trebuie scrisă o clasă remote ce implementează una
sau mai multe remote interface. Implementarea acestei clase poate să conţină:
specificarea interfeţelor remote implementate
definirea constructorului
implementarea metodelor interfeţelor remote
crearea şi instalarea unui security manager
crearea unui (unor) instanţe ale obiectului remote
înregistrarea obiectelor in RMI registry
package examples.hello;
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
public class HelloImpl
extends UnicastRemoteObject
implements Hello
{
private String name;
public HelloImpl(String s) throws RemoteException {
super();
name = s;
}
public String sayHello() throws RemoteException { return "Hello World!"; }
public static void main(String args[])
{ System.setSecurityManager(new RMISecurityManager());
try
{ HelloImpl obj = new HelloImpl("HelloServer");
Naming.rebind("//myhost/HelloServer", obj);
System.out.println("HelloServer bound in registry"); }
catch (Exception e)
{ System.out.println("HelloImpl err: " + e.getMessage());
e.printStackTrace();}
}}
package examples.hello;
import java.awt.*;
import java.rmi.*;
public class HelloApplet extends java.applet.Applet {
String message = "";
public void init() {
try
{ Hello obj = (Hello)Naming.lookup("//" +
getCodeBase().getHost() + "/HelloServer");
message = obj.sayHello();}
catch (Exception e)
{ System.out.println("HelloApplet exception: " + e.getMessage());
e.printStackTrace();}
}
public void paint(Graphics g) { g.drawString(message, 25, 50); }
}
<HTML>
<title>Hello World</title>
<center> <h1>Hello World</h1> </center>
The message from the HelloServer is:
<p>
<applet codebase="../.."
code="examples.hello.HelloApplet"
width=500 height=120>
</applet>
</HTML>
Compilatorul rmic este folosit pentru generarea fisierului stub şi skel (cunoscute şi la
RPC). Lansarea în execuţie a programului se face:
rmiregistry &
java -Djava.rmi.server.codebase=http://localhost/~vdragan/codebase/ \
rmi_examples.hello.HelloImpl &
appletviewer index.html &