Chuyển tham số trong các lời gọi từ xa

11 253 0
Chuyển tham số trong các lời gọi từ xa

Đ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

Chuyển tham số lời gọi từ xa Chuyển tham số lời gọi từ xa Bởi: Khoa CNTT ĐHSP KT Hưng Yên Chuyển tham số theo tham trị tham biến Đối với Java,trên máy cục hầu hết biến kiểu đối tượng truyền theo tham chiếu lời gọi hàm Nghĩa kkhi biến đối tượng truyền vào phương thức bên phương thức thay đổi giá trị đối tượng lời gọi phương thức chấm dứt giá trị đối tượng thay đổi theo Ví dụ : Class Number{ Public int value=0; Public Number(int v){ Value=v; } } Public class Program{ Public static void main(String[] args){ Number num=new Number(12); DoIncrease(num); System.out.Println(num.value); } 1/11 Chuyển tham số lời gọi từ xa Public static void doIncrease(Number n){ n.value++; } } ví dụ ta tạo đối tượng Number lưu giá trị nguyên Integer.Phương thức doIncrease() tiếp nhận tham số Num có kiểu đối tượng Nuamber giá trị khởi đầu 12 Bên phương thức doIncrease() biến đối tượng tăng giá trị lên 1.Kết lời gọi phương thức chấm dứt đối tượng Num tăng trị lên 13 Tuy nhiên kiểu liẹu nguyên tố int ,float double,char ,byte,long…lại truyền theo trị.Giá trị tham số mà hàm hay phương thức xử lý biến truyền từ vào Ví dụ sau cho kết 12 sau gọi phương thức doIncrease() Public class Program{ Public static void main(String[] args){ Int Num=12; doIncrease(Num); System.out.println(Num); } Public static void doIncrease(int n){ n++; } } Tóm lại Java đối tượng truyền theo tham chiếu kiểu liệu đơn giản int ,char…được truyền theo tham trị Thế truyền tham số qua mạng theo chế RMI sao?Thực truyền tham số cho lời gọi phương thức từ xa RMI có hơI khác với nguyên tắc truyền tham số thông thường Bạn nhớ lại hai nguyên tắc sau: 2/11 Chuyển tham số lời gọi từ xa *Tất kiểu liệu đơn giản int ,char …dều truyền theo tham trị *Tất liệu kiểu đối tượng muốn truyền qua mạng buộc phảI cài đặt hai giao tiếp Remote Serializable.Các đối tượng cài đặt giao tiếp Remote truyền theo tham chiếu đối tượng cài đặt giao tiếp Serializable truyền theo tham trị Chuyển đối tượng đến trình chủ theo tham trị Hầu kiểu liệu đối tượng String ,date,time…trong Java caì đặt giao tiếp Serializable cho lên cúng truyền cho lời gọi hàm hay phương thức xa theo trị Với chế truyền tham số đối tượng theo trị,khi bạn gọi phương thức đối tượng xa,nếu lời gọi phương thức có yêu cầu tham số kiểu đối tượng,đối tượng đóng gói chuyển toàn đến máy chủ Tại máy chủ đối tượng bung lại trạng thái ban đầu đưa vào sử dụng.Quá trình đóng gói máy khách để chuyển đI thực lớp trung gian_Stub,ngược lại trình mở gói liệu để khôI phục tham số diễn máy chủ thực lớp trung gian _Skel Qui trình chuyển tham số sữ liệu qua lại hai lớp trung gian _Stub _Skel thuật ngữ lạp trình phân tán gọi mashaling data Xây dựng chương trình chuyển tham số đối tượng qua mạng Dưới chương trình ví dụ cho thấy cách chuyển đổi đối tượng từ máy khách đến máy chủ Chương trình tựa trò chơI ném bóng , trình khách ném bóng lên máy chủ , trình chủ tiếp nhận bóng trả cho trình khách Bước1: Thiết kế lớp Ball.class dùng làm tham số chuyển qua mạng trình khách trình chủ , cài đặt sau: + Ví dụ: Ball.class Import java.io.*; Public class Ball implements Serializable{ Int weight =o; Public Ball(int w){ Weght=w; 3/11 Chuyển tham số lời gọi từ xa } Public int getweight(){ Return weight; } Public void setweight(int w){ Weight=w; } } Lớp Ball dùng để biểu diễn bóng có trọng lượng weight Bnạ gọi hàm getweight(), setweight() để lấy thiết lập trọng lượng cho qaủ bóng Mục đích ta sử dụng đối tượng Ball để chuyển đI mạng trình khách trình chủ lớp Ball khai báo có khả hóa Public class Ball implements Serializable{ … } Nừu bạn cảm thấy từ ngữ “tuần tự hóa ” hay “Serializable” nghe khó hiểu không nên bận tâm Bước 2: Đặc tả giao tiếp Interface cho đối tượng máy chủ + Ví dụ: pingServer.java Import java.rmi.*; Public interface PingServer extends Remote{ Public Ball ping(Ball b) thows RemoteException; } PingServer đặt lên trình chủ Đối tượng PingServer ta có phương thức ping() Phương thức gọi trình khách Trình khách sử dụng phương thức 4/11 Chuyển tham số lời gọi từ xa ping() để ném bóng lên trình chủ thông qua tham số có kiểu đối tượng Ball Phương thức ping() sau tiếp nhận ném trả đối tượng Ballcho trình khách thông qua trị trả phương thức Bước 3: Cài đặt chi tiết cho đối tượng pingServer thông qua lớp PingServerImpl với mã nguồn sau: +Ví dụ: PingServerImpl.java Import java.rmi.*; Public class PingServerImpl implements PingServer{ Public Ball ping(Ball b) thows RemoteException{ System.out.println(“client send a ball objectweight”+b.getWeight()); b.setWeight(b.getWeight()+15); return b; } } Trình chủ ta tiếp nhận bóng từ trình khách Tăng trọng lượng bóng lên ném trả cho trình khách Bước 4: Thiết kế chương trình Setup cài đặt đối tượng PingServerImpl máy chủ +Ví dụ: Setup.java Import java.rmi.*; Import java.rmi.server.*; Public class Setup{ Public static void main(String[] args) thows Exception{ PingServer server=new PingServerImpl(); UnicastRemoteObject.exportObject(server); 5/11 Chuyển tham số lời gọi từ xa Naming.bind(“rmi://localhost/pingobject”,server); System.out.println(“Waiting for client request…”); } } Bước 5: Thiết kế chương trình client gọi phương thức đối tượng PingServer + Ví dụ: Client.java Import java.rmi.*; public class client { public static void main(String[]arge) thows Exception { Ball ball=new Ball(12); pingServer server=(pingServer)Naming.lookup(“rmi://localhost/pingObject”); System.out.println(“ ball weight before send to server ”+ball.getWeight()); Ball anotherBall=server.ping(ball); System.out.println(“ball weight after send to server ”+ball.getWeight()); System.out.println(“ball weight return by server ”+anotherBall.getWeight()); } } Bước 6:Biên dịch chương trình bạn lưu tất mã nguồn vào thư mục C:\RMI\ByValue Chuyển vào thư mục thực c:\RMI\ByValue\>javac *.java tiếp đến tạo tập tin trung gian _Stub _Skel lệnh: C:\RMI\ByValue\>rmic PingServerImpl Kết thu tệp tin sau: Ball.class 6/11 Chuyển tham số lời gọi từ xa PingServer.class PingServerImpl_Stub.class PingServerImpl_Skel.class Setup.class Client.class Bước 7: Cài đặt đối tượng thưc thi chương trình • khởi động đăng ký Rmiregistry: C:\RMI\ByVlaue\>Start rmiregistry • gọi trình Setup để đăng ký đối tượng PingServer C:\RMI\ByValue\>Start java Setup Chuyển đối tượng đến trình chủ theo tham chiếu Nếu đối tượng Ball lớn Đóng gói toàn đối tượng chuyển Chuyển lại mạng ảnh hưởng tới Tốc độ thực thi chương trình Có cách mà trình chủ cói thể tham chiếu xử lý trực tiếp đối tượng dang nằm máy khách hay không ? có nghĩa trình chủ trình khách truy xuất từ xa trình khách ngược lại gọi từ xa trình chủ 7/11 Chuyển tham số lời gọi từ xa Xây dựng chương trình chuyển đối tượng qua mạng theo tham chiếu Chúng ta tạo hai đối tượng Đối tượng Atclient chạy máy khách đối tượng AtServer chạy máy chủ thường lệ ,trình khách liên lạc với đăng ký rmiregitry để tìm tham chiếu đên đối tượngAtServer máy chủ tiếp đến trình khách tạo đối tượng Atclient máy khách gọi phương thức đối tượng AtServer từ xa để đăng ký đối tượng Atclient với trình chủ Bước 1: Đặc tả giao tiếp interface cho đối tượng Atclient Ví dụ: Atclient.java Import java.rmi.*; Public interface Atclient extends Remote{ Public void callClientMethod(String message) thows RemoteException; } Đối tượng Atclient ta đặt máy khách muốn có khả gọi từ máy chủ,java yêu cầu bạn phảI áp đặt giao tiếp Remote cho lớp đối tượng Và tương tự cách cài đặt cho đối tượng máy chủ trước , phương thức triệu gọi từ xa CallClientMethod() phảI có khả ném ngoại lệ RemoteException Sau bạn thấy callClientMethod() gọi đối tượng AtServer máy chủ Bước 2: Đặc tả giao tiếp interface cho đối tượng AtServer Ví dụ:AtServer.java Import java.rmi.*; Public interface AtServer extends Remote{ Public void RegisterClient(AtClient c) thows RemoteException; Public void CallServerMethod(String Message) thows RemoteException; } Đối tượng AtServer ta cung cấp hai phương thức , phương thức thứ RegisterClient() dùng để tiếp nhận tham chiếu đến đối tượng AtClient trình máy khách Phương thức thứ hai callServerMethod() dùng để cung cấp dịch vụ cho trinhf khách 8/11 Chuyển tham số lời gọi từ xa Bước 3: Cài đặt chi tiết cho đối tượng Atclient thông qua lớp AtClientImpl Ví dụ: AtClientImpl.java Import java.rmi.*; Public class AtClientImpl implements AtClient{ Public void callClientMethod(String message) throws RemoteException{ System.out.println(message); } } Bước 4:Cài đặt chi tiết cho đối tượng AtServer thông qua lớp AtServerImpl Ví dụ :AtServerImpl.java Import java.rmi.*; Public class AtServerImpl implements AtServer{ Atclient client; Public void registerClient (AtClient c) throws RemoteException()_Public void RegisterClient(AtClient c) thows RemoteException{client=c;} } Public void callServerMehtod(String message) throws RemoteException{ System.out.println(message); For(int i=1; ijavac *.java 11/11 [...].. .Chuyển tham số trong các lời gọi từ xa Server.callServerMethod(“client contact Server”); } } Bởi vì AtClient là một đối tượng có khả năeng tham chiếu xa cho nên tương tự đối tượng trên máy chủ chúng ta phảI gọi unicastRemoteObject() để thông báo sự hiện diện và khả năng giao tiếp của đối tượng AtClient với máy ảo java Sau khi lấy về tham chiếu đến đối tượng trên máy... trên máy chủ Phương thức này mục đích này là truyền tham chiếu của AtClient từ trình khách lên trình chủ Bằng cách này trình chủ không còn phảI dùng đến hàm Naming.lookup() truy tìm tham chiếu đến đôI tượng AtClient của khách trên máy rmiregistry Bước 7: Biên dịch và chạy chương trình ,bạn lưu tất cả mã nguồn của chương trình vào thư mục C:\RMI\Byef Chuyển vào thư mục này để biên dịch mã nguồn C:\RMI\Byef\>javac ... tượng truyền theo tham chiếu kiểu liệu đơn giản int ,char…được truyền theo tham trị Thế truyền tham số qua mạng theo chế RMI sao?Thực truyền tham số cho lời gọi phương thức từ xa RMI có hơI khác... khác với nguyên tắc truyền tham số thông thường Bạn nhớ lại hai nguyên tắc sau: 2/11 Chuyển tham số lời gọi từ xa *Tất kiểu liệu đơn giản int ,char …dều truyền theo tham trị *Tất liệu kiểu đối... phương thức ping() Phương thức gọi trình khách Trình khách sử dụng phương thức 4/11 Chuyển tham số lời gọi từ xa ping() để ném bóng lên trình chủ thông qua tham số có kiểu đối tượng Ball Phương

Ngày đăng: 31/12/2015, 10:41

Mục lục

    Chuyển tham số trong các lời gọi từ xa

    Chuyển đối tượng đến trình chủ theo tham chiếu

    Xây dựng chương trình chuyển đối tượng qua mạng theo tham chiếu

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

Tài liệu liên quan