Bài giảng Lập trình mạng nâng cao: Java Remote Method Invocation - Nguyễn Xuân Vinh

26 3 0
Bài giảng Lập trình mạng nâng cao: Java Remote Method Invocation - Nguyễn Xuân Vinh

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

This chapter presents the following content: Start the registry server, rmiregistry; start the object server; start the client; the client makes a request. Inviting you to refer.

KHOA CÔNG NGHỆ THÔNG TIN /26 08/05/21 MÔN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM Java Remote Method Invocation Presenter: Nguyễn Xuân Vinh Information Technology Faculty Nong Lam University GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM KHOA CÔNG NGHỆ THÔNG TIN “The network is the computer”  Consider the following program organization: /26 08/05/21 MƠN: LẬP TRÌNH MẠNG method call SomeClass AnotherClass returned object computer computer  If the network is the computer, we ought to be able to put the two classes on different computers /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM Parameter marshalling KHOA CÔNG NGHỆ THÔNG TIN /26 08/05/21 MÔN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM Calling the remote getDescription method KHOA CƠNG NGHỆ THƠNG TIN /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM KHOA CÔNG NGHỆ THÔNG TIN RMI and other technologies  CORBA (Common Object Request Broker Architecture) was used for a long time  CORBA supports object transmission between virtually any languages  Objects have to be described in IDL (Interface Definition Language), which looks a lot like C++ data definitions  CORBA is complex and flaky  CORBA has fallen out of favor  Microsoft supported CORBA, then COM, now NET  RMI is purely Java-specific  Java to Java communications only  As a result, RMI is much simpler than CORBA MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM What is needed for RMI  Java makes RMI (Remote Method Invocation) fairly easy, but there are some extra steps  To send a message to a remote “server object,”  The “client object” has to find the object Do this by looking it up in a registry  The client object then has to marshal the parameters (prepare them for transmission) Java requires Serializable parameters The server object has to unmarshal its parameters, its computation, and marshal its response  The client object has to unmarshal the response /26 08/05/21  Much of this is done for you by special software KHOA CÔNG NGHỆ THÔNG TIN /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM KHOA CÔNG NGHỆ THÔNG TIN Terminology  A remote object is an object on another computer  The client object is the object making the request (sending a message to the other object)  The server object is the object receiving the request  As usual, “client” and “server” can easily trade roles (each can make requests of the other)  The rmiregistry is a special server that looks up objects by name  Hopefully, the name is unique!  rmic is a special compiler for creating stub (client) and skeleton (server) classes KHOA CÔNG NGHỆ THÔNG TIN Processes  For RMI, you need to be running three processes  The Client  The Server  The Object Registry, rmiregistry, which is like a DNS service for objects  You also need TCP/IP active /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM KHOA CÔNG NGHỆ THÔNG TIN Interfaces  Interfaces define behavior  Classes define implementation  Therefore,  In order to use a remote object, the client must know its behavior (interface), but does not need to know its implementation (class)  In order to provide an object, the server must know both its interface (behavior) and its class (implementation)  In short,  The interface must be available to both client and server  The class of any transmitted object must be on both client and server  The class whose method is being used should only be on the server /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM KHOA CÔNG NGHỆ THÔNG TIN Classes  A Remote class is one whose instances can be accessed remotely  On the computer where it is defined, instances of this class can be accessed just like any other object  On other computers, the remote object can be accessed via object handles  A Serializable class is one whose instances can be marshaled (turned into a linear sequence of bits)  Serializable objects can be transmitted from one computer to another  It probably isn’t a good idea for an object to be both remote and serializable 10 /26 08/05/21 MÔN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM 10 KHOA CÔNG NGHỆ THÔNG TIN Remote interfaces and class  A Remote class has two parts:  The interface (used by both client and server): Must be public Must extend the interface java.rmi.Remote Every method in the interface must declare that it throws java.rmi.RemoteException (other exceptions may also be thrown)  The class itself (used only by the server): Must implement the Remote interface Should extend java.rmi.server.UnicastRemoteObject May have locally accessible methods that are not in its Remote interface 12 /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM 12 KHOA CÔNG NGHỆ THÔNG TIN Remote vs Serializable  A Remote object lives on another computer (such as the Server)  You can send messages to a Remote object and get responses back from the object  All you need to know about the Remote object is its interface  Remote objects don’t pose much of a security issue  You can transmit a copy of a Serializable object between computers  The receiving object needs to know how the object is implemented; it needs the class as well as the interface  There is a way to transmit the class definition  Accepting classes does pose a security issue 13 /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM 13 KHOA CÔNG NGHỆ THÔNG TIN Security  It isn’t safe for the client to use somebody else’s code on some random server  System.setSecurityManager(new RMISecurityManager());  The security policy of RMISecurityManager is the same as that of the default SecurityManager  Your client program should use a more conservative security manager than the default  Most discussions of RMI assume you should this on both the client and the server  Unless your server also acts as a client, it isn’t really necessary on the server 14 /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM 14 KHOA CÔNG NGHỆ THÔNG TIN The server class  The class that defines the server object should extend UnicastRemoteObject  This makes a connection with exactly one other computer  If you must extend some other class, you can use exportObject() instead  Sun does not provide a MulticastRemoteObject class  The server class needs to register its server object:  String url = "rmi://" + host + ":" + port + "/" + objectName;  The default port is 1099  Naming.rebind(url, object);  Every remotely available method must throw a RemoteException (because connections can fail)  Every remotely available method should be synchronized 15 /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM 15 08/05/21 Java.rmi.Remote extends () in d HelloInterface HelloServer (3) sayHello(“Vinh”) (1) b HelloClient () /26 Example: HelloWorld up ok 16 KHOA CÔNG NGHỆ THÔNG TIN lo (2) MÔN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM HelloInterface implements HelloImpl RMI Registry UnicastRemoteObject extends KHOA CÔNG NGHỆ THÔNG TIN HelloInterface: interface import java.rmi.Remote; import java.rmi.RemoteException; public interface HelloInterface extends Remote { public String sayHello(String name)throws RemoteException; } 17 /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM 17 KHOA CÔNG NGHỆ THÔNG TIN HelloImpl: class implement HelloInterface import java.rmi.*; import java.rmi.server.*; public class HelloImpl extends UnicastRemoteObject implements HelloInterface { private String message; // Strings are serializable MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM public HelloImpl() throws RemoteException { super(); } public Hello (String msg) throws RemoteException { message = msg; 08/05/21 } public String sayHello(String name) throws RemoteException { 18 /26 return “Hello “ + name + “ ” + message; } } 18 GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM KHOA CÔNG NGHỆ THÔNG TIN HelloServer: binding RMI remote object import java.net.MalformedURLException; import java.rmi.Naming; Registry reg = LocateRegistry.createRegistry(1234) reg.rebind("rmi://localhost:1234/hello", hello) import java.rmi.RemoteException; public class HelloServer { public static void main(String[] args) { MÔN: LẬP TRÌNH MẠNG try { HelloInterface hello = new HelloImpl(“Welcome to HelloWorld RMI”); try { Naming.rebind("rmi://localhost:1234/hello", hello); System.out.println("Hello Server is ready."); } catch (MalformedURLException e) { e.printStackTrace(); } 08/05/21 } catch (RemoteException e) { System.out.println("Hello Server failed: " + e); } 19 /26 } } 19 KHOA CÔNG NGHỆ THÔNG TIN HelloClient: lookup and process RMI object public class HelloClient { public static void main (String[] args) { HelloInterface hello; String name = "rmi://localhost:1234/hello"; try { hello = (HelloInterface) Naming.lookup(name); System.out.println(hello.sayHello(“Nguyen Xuan Vinh”)); } catch (Exception e) { System.out.println("HelloClient exception: " + e); } Registry reg = LocateRegistry.createRegistry(1234) } reg.rebind("rmi://localhost:1234/hello", hello) } 20 /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM 20 KHOA CÔNG NGHỆ THÔNG TIN rmic  The class that implements the remote object should be compiled as usual  Then, it should be compiled with rmic:  rmic HelloImpl  This will generate files HelloImpl_Stub.class and HelloImpl_Skel.class  These classes the actual communication  The “Stub” class must be copied to the client area  The “Skel” was needed in SDK 1.1 but is no longer necessary 21 /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM 21 MÔN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM KHOA CÔNG NGHỆ THÔNG TIN Trying RMI In three different terminal windows: Run the registry program: rmiregistry Run the server program: java HelloServer Run the client program: java HelloClient If all goes well, you should get the message: 22 /26 08/05/21 Hello Nguyen Xuan Vinh! Welcome to HelloWorld RMI! 22 23 /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM KHOA CÔNG NGHỆ THÔNG TIN Example by CLI  Compile all *.java to *.class javac *.java  Compile stub and skeleton* (*:used in JDK1.1) rmic HelloImpl  Start RMI Registry start rmiregistry  Start server java -Djava.security.policy=server.policy HelloServer  Run client application java HelloClient server.policy grant { permission java.net.SocketPermission "127.0.0.1:*", "connect,resolve"; permission java.net.SocketPermission "127.0.0.1:*", "accept"; }; KHOA CÔNG NGHỆ THÔNG TIN Summary Start the registry server, rmiregistry Start the object server The object server registers an object, with a name, with the registry server Start the client The client looks up the object in the registry server The client makes a request The request actually goes to the Stub class The Stub classes on client and server talk to each other The client’s Stub class returns the result 24 /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM 24 KHOA CÔNG NGHỆ THÔNG TIN References Trail: RMI by Ann Wollrath and Jim Waldo  http://java.sun.com/docs/books/tutorial/rmi/index.html Fundamentals of RMI Short Course by jGuru  http://developer.java.sun.com/developer/onlineTraining/ rmi/RMI.html Java RMI Tutorial by Ken Baclawski  http://www.eg.bucknell.edu/~cs379/DistributedSystems/ rmi_tut.html  http://www.cs.rutgers.edu/~pxk/rutgers/notes/pdf/rb-rmi.pdf 25 /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM 25 26 /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM HỎI ĐÁP KHOA CÔNG NGHỆ THÔNG TIN ... is no longer necessary 21 /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM 21 MÔN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM KHOA CÔNG... /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XUÂN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM Parameter marshalling KHOA CÔNG NGHỆ THÔNG TIN /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XN VINH TRƯỜNG ĐẠI... http://www.cs.rutgers.edu/~pxk/rutgers/notes/pdf/rb-rmi.pdf 25 /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XN VINH TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HCM 25 26 /26 08/05/21 MƠN: LẬP TRÌNH MẠNG GV: NGUYỄN XN VINH TRƯỜNG ĐẠI HỌC NÔNG

Ngày đăng: 08/05/2021, 15:32

Từ khóa liên quan

Mục lục

  • Java Remote Method Invocation

  • “The network is the computer”

  • Parameter marshalling

  • Calling the remote getDescription method

  • RMI and other technologies

  • What is needed for RMI

  • Terminology

  • Processes

  • Interfaces

  • Classes

  • Conditions for serializability

  • Remote interfaces and class

  • Remote vs. Serializable

  • Security

  • The server class

  • Example: HelloWorld

  • HelloInterface: interface

  • HelloImpl: class implement HelloInterface

  • HelloServer: binding RMI remote object

  • HelloClient: lookup and process RMI object

  • rmic

  • Trying RMI

  • Example by CLI

  • Summary

  • References

  • HỎI ĐÁP

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan