1. Trang chủ
  2. » Cao đẳng - Đại học

Bài 5: Lập trình phân tán với RMI_TS Nguyễn Mạnh Hùng

68 3,5K 5

Đ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

Thông tin cơ bản

Định dạng
Số trang 68
Dung lượng 0,91 MB

Nội dung

Bài tập 3 Cài đặt theo mô hình RMI cho thủ tục kiểm tra đăng nhập theo username và password, thông tin này được lưu ở một CSDL trên server khác..  Server RMI cung cấp phương thức ch

Trang 1

Lập trình mạng Lập trình phân tán với RMI

Giảng viên: TS Nguyễn Mạnh Hùng

Học viện Công nghệ Bưu chính Viễn thông (PTIT)

Trang 2

Nội dung

 Cài đặt phía server

 Cài đặt phía client

Trang 3

Kiến trúc RMI (1)

Trang 4

Kiến trúc RMI (2)

[image source: http://extreme.indiana.edu]

Trang 5

RMI: quan điểm lập trình

Trang 6

}

Trang 7

Server (2)

Bước 2: Cài đặt các phương thức đã khai báo trong

Interface, ví dụ với bài toán đổi chiều chuỗi kí tự

ReverseString tmp = new ReverseString(str);

tmp.reverse();

}

Trang 8

Server (3)

Bước 3: Đăng kí đối tượng RMI vào registry, có thể thực

hiện ngay trong hàm khởi tạo, hoặc có thể thực hiện khi gọi đối tượng RMI server (trong hàm main)

// dang ki RMI server

try{

registry = LocateRegistry.createRegistry(thisPort);

registry.rebind("rmiServer", this);

throw e;

}

Trang 9

(RMIInterface)(registry.lookup("rmiServer"));

}catch(RemoteException e){

e.printStackTrace();

}catch(NotBoundException e){

e.printStackTrace();

}

Trang 10

return myServer.reverse(du liệu cần xử lí);

}catch(RemoteException e){

e.printStackTrace();

}

Trang 11

Lưu ý

Nếu dùng Naming để đăng kí đối tượng từ xa (bước 3 của

server) thì việc tìm kiếm đối tượng từ xa từ phía client

cũng khác

try{ Naming.rebind("rmiServer", this);

}catch (Exception e){

System.out.println(e);

}

try{ RMIServer myServer = (RMIServer)Naming.lookup("rmiServer");

Server

Client

Trang 12

Ví dụ: đảo chuỗi (1)

// khoi tao khong tham so

}

// khoi tao co tham so

}

}

}

Trang 13

Ví dụ: đảo chuỗi (2)

//phuong thuc dao nguoc chuoi ki tu cua lop nay

Trang 14

Ví dụ: đảo chuỗi – server (1)

}

Trang 15

Ví dụ: đảo chuỗi – server (2)

ReverseString tmp = new ReverseString(str);

tmp.reverse();

Trang 16

Ví dụ: đảo chuỗi – server (3)

// khoi tao dong thoi dang ki RMI server

// dang ki RMI server

try{

registry=LocateRegistry.createRegistry(thisPort);

registry.rebind("rmiServer", this);

}catch(RemoteException e){

throw e;

}

}

}

Trang 17

Ví dụ: đảo chuỗi – client (1)

(RMIInterface)(registry.lookup("rmiServer"));

}catch(RemoteException e){

e.printStackTrace();

}catch(NotBoundException e){

e.printStackTrace();

}

Trang 18

Ví dụ: đảo chuỗi – client (2)

// tra ve ket qua

try{

// goi ham tu xa

return rmiServer.reverse(input);

}catch(RemoteException e){

Trang 19

Bài tập (1)

 Cài đặt theo mô hình RMI cho ví dụ trong

bài, dùng Naming thay vì dùng registry

Trang 20

Bài tập (2)

 Cài đặt theo mô hình RMI cho thủ tục tính

USCLN của hai số nguyên dương a và b,

dùng Naming thay vì dùng registry

 Viết lại bài tập này theo mô hình MVC

Trang 21

Bài tập (3)

 Cài đặt theo mô hình RMI cho thủ tục kiểm

tra đăng nhập theo username và

password, thông tin này được lưu ở một

CSDL trên server khác

 Viết lại bài tập này theo mô hình MVC

Trang 22

Ví dụ:

Login từ xa dùng RMI

Trang 23

Bài toán: Login dùng RMI

 Thông tin user được lưu trên client

 Server RMI cung cấp phương thức checkLogin

bởi RMI

 Chương trình hiện cửa sổ đăng nhập GUI

(username, password)

 Khi click vào nút login, chương trình sẽ triệu gọi

phương thức checkLogin của RMI để kiểm tra

đăng nhập

 Kết quả đăng nhập được thông báo lại cho người

dùng

Trang 24

Sơ đồ lớp phía client

Trang 25

Sơ đồ lớp phía server

Trang 26

Tuần tự thực hiện

Trang 27

Lớp: User

private String userName ;

private String password ;

public User(){

}

this userName = username;

this password = password;

}

return password ;

}

this password = password;

}

return userName ;

}

this userName = userName;

}

Trang 28

private JTextField txtUsername ;

private JPasswordField txtPassword ;

private JButton btnLogin ;

Trang 29

Lớp: RMILoginClientView (2)

super ( "RMI Login MVC" );

txtUsername = new JTextField(15);

txtPassword = new JPasswordField(15);

txtPassword setEchoChar( '*' );

btnLogin = new JButton( "Login" );

JPanel content = new JPanel();

content.setLayout( new FlowLayout());

content.add( new JLabel( "Username:" ));

this addWindowListener( new WindowAdapter(){

System.exit(0);

Trang 30

Lớp: RMILoginClientView (3)

}

User model = new User( txtUsername getText(),

Trang 31

private RMILoginClientView view ;

private String serverHost = "localhost" ;

private RMILoginInterface rmiServer ;

private Registry registry ;

private String rmiService = "rmiLoginServer" ;

Trang 32

RMILoginClientControl (2)

this view = view;

view.addLoginListener( new LoginListener());

( registry lookup( rmiService ));

} catch (RemoteException e){

Trang 33

RMILoginClientControl (3)

public void actionPerformed(ActionEvent e) {

try {

User model = view getUser();

if ( rmiServer checkLogin(model).equals( "ok" )){

view showMessage( "Login succesfully!" );

Trang 34

ClientRun

RMILoginClientView view = new RMILoginClientView();

RMILoginClientControl control = new

RMILoginClientControl(view);

view.setVisible( true );

}

}

Trang 35

}

Trang 36

}

}

Trang 37

private Registry registry ;

private Connection con ;

private RMILoginServerView view ;

private String rmiService = "rmiLoginServer" ;

Trang 38

RMILoginServerControl (2)

RemoteException{

this view = view;

getDBConnection( "myDBName" , "admin" , "123456" );

view.showMessage( "RMI server is running " );

// dang ki RMI server

try {

registry = LocateRegistry.createRegistry(serverPort );

registry rebind( rmiService , this );

} catch (RemoteException e){

throw e;

} }

String result = "" ; getDBConnection( "myDBName" , "admin" , "123456" );

if (checkUser(user))

result = "ok" ;

return result;

}

Trang 39

Class.forName(dbClass);

con = DriverManager.getConnection (dbUrl, username,

Trang 40

RMILoginServerControl (4)

String query = "Select * FROM users WHERE username ='" +

Trang 41

RMILoginServerView view = new RMILoginServerView();

}

Trang 42

Ví dụ:

Login từ xa dùng TCP/IP-RMI

Trang 43

Bài toán

 Thông tin user được lưu trên server TCP.

 Server RMI và cung cấp phương thức checkLogin

bởi RMI

 Chương trình hiện cửa sổ đăng nhập GUI

(username, password) ở phía client TCP

 Khi click vào nút login, client TCP sẽ gửi thông tin

đăng nhập đến server TCP xử lí

 Server TCP sẽ triệu gọi phương thức checkLogin

của RMI để kiểm tra đăng nhập

 Kết quả đăng nhập được trả từ server RMI về

server TCP, server TCP lại trả về cho client TCP

Trang 44

Sơ đồ lớp phía client TCP

Trang 45

Sơ đồ lớp phía server TCP

Trang 46

Sơ đồ lớp phía server RMI

Trang 47

Tuần tự thực hiện

Trang 48

Lớp: User

private String userName ;

private String password ;

public User(){

}

this userName = username;

this password = password;

}

return password ;

}

this password = password;

}

return userName ;

}

this userName = userName;

}

}

Trang 49

private JTextField txtUsername ;

private JPasswordField txtPassword ;

private JButton btnLogin ;

Trang 50

Lớp: ClientView (2)

super ( "RMI - TCP Login MVC" );

txtUsername = new JTextField(15);

txtPassword = new JPasswordField(15);

txtPassword setEchoChar( '*' );

btnLogin = new JButton( "Login" );

JPanel content = new JPanel();

content.setLayout( new FlowLayout());

content.add( new JLabel( "Username:" ));

this addWindowListener( new WindowAdapter(){

System.exit(0);

} });

}

Trang 51

Lớp: ClientView (3)

}

User model = new User( txtUsername getText(),

Trang 52

private ClientView view ;

private String serverTCPHost = "localhost" ;

this view = view;

this view addLoginListener( new LoginListener());

}

Trang 53

Lớp: ClientControl (2)

public void actionPerformed(ActionEvent e) {

try {

User user = view getUser();

Socket mySocket = new Socket( serverTCPHost , serverTCPPort ); ObjectOutputStream oos = new

Trang 54

Lớp: ClientRun

ClientView view = new ClientView();

ClientControl control = new ClientControl(view);

view.setVisible( true );

}

}

Trang 55

Lớp: ServerView

}

System.out.println(msg);

}

}

Trang 56

private ServerView view ;

private ServerSocket myServer ;

private Socket clientSocket ;

private String serverRMIHost = "localhost" ;

private RMILoginInterface rmiServer ;

private Registry registry ;

private String rmiService = "rmitcpLoginServer" ;

Trang 57

Lớp: ServerControl (2)

this view = view;

Trang 58

view showMessage(e.getStackTrace().toString());

} }

Trang 59

Lớp: ServerControl (4)

try {

clientSocket = myServer accept();

ObjectInputStream ois = new

ObjectInputStream( clientSocket getInputStream());

Object o = ois.readObject();

if (o instanceof User){

User user = (User)o;

String result = rmiServer checkLogin(user);

ObjectOutputStream oos = new

ObjectOutputStream( clientSocket getOutputStream());

}

Trang 60

Lớp: ServerRun

ServerView view = new ServerView();

ServerControl control = new ServerControl(view);

}

}

Trang 61

Lớp: RMILoginInterface

}

Trang 62

}

}

Trang 63

private Registry registry ;

private Connection con ;

private RMILoginServerView view ;

private String rmiService = "rmitcpLoginServer" ;

Trang 64

RMILoginServerControl (2)

RemoteException{

this view = view;

view.showMessage( "RMI server is running " );

// dang ki RMI server

try {

registry = LocateRegistry.createRegistry(serverPort );

registry rebind( rmiService , this );

} catch (RemoteException e){

throw e;

} }

String result = "" ; getDBConnection( "myDBName" , "admin" , "123456" );

if (checkUser(user))

result = "ok" ;

return result;

}

Trang 65

Class.forName(dbClass);

con = DriverManager.getConnection (dbUrl, username, password);

} catch (Exception e) {

view showMessage(e.getStackTrace().toString());

}

}

Trang 66

RMILoginServerControl (4)

String query = "Select * FROM users WHERE username ='"

+ user.getUserName() + "' AND password ='" + user.getPassword() + "'" ;

Trang 67

RMILoginServerView view = new RMILoginServerView();

}

Lưu ý: thứ tự chạy là:

1 – chạy serverRun của RMI

2 – chạy serverRun của TCP

3 – chạy clientRun của TCP

Trang 68

Questions?

Ngày đăng: 13/08/2014, 11:13

HÌNH ẢNH LIÊN QUAN

Sơ đồ lớp phía client - Bài 5: Lập trình phân tán với RMI_TS Nguyễn Mạnh Hùng
Sơ đồ l ớp phía client (Trang 24)
Sơ đồ lớp phía server - Bài 5: Lập trình phân tán với RMI_TS Nguyễn Mạnh Hùng
Sơ đồ l ớp phía server (Trang 25)
Sơ đồ lớp phía client TCP - Bài 5: Lập trình phân tán với RMI_TS Nguyễn Mạnh Hùng
Sơ đồ l ớp phía client TCP (Trang 44)
Sơ đồ lớp phía server TCP - Bài 5: Lập trình phân tán với RMI_TS Nguyễn Mạnh Hùng
Sơ đồ l ớp phía server TCP (Trang 45)
Sơ đồ lớp phía server RMI - Bài 5: Lập trình phân tán với RMI_TS Nguyễn Mạnh Hùng
Sơ đồ l ớp phía server RMI (Trang 46)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w