TIỂU LUẬN Môn: LẬP TRÌNH MẠNG YÊU CẦU ĐÁP ỨNG YÊU CẦU - Pdf 24

ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA

TIỂU LUẬN
Môn: LẬP TRÌNH MẠNG
GVHD: PGS.TS Lê Văn Sơn
HVTH: - Lê Hữu Liêm
- Nguyễn Mạnh Hùng
Lớp: Cao học KHMT khóa 11
Lập trình mạng

ĐÀ NẴNG, tháng 03/2009
MỤC LỤC
ĐÀ NẴNG, tháng 03/2009 2
MỞ ĐẦU 3
PHẦN 1: CƠ SỞ LÝ THUYẾT 4
Chương 1: CÁC KIẾN THỨC CƠ SỞ 4
1.1 Vấn đề về yêu cầu từ xa: 4
1.1.1 Khái niệm yêu cầu từ xa: 4
1.1.2. Giải thuật tổng quát: 4
Hệ thống A 4
Hệ thống B 5
1.2. Giao dịch: 6
1.2.1. Khái niệm giao dịch (Transaction) 6
1.2.2. Các tính chất của giao dịch: 6
1.2.2.1. Tính nguyên tử (atomicity): 6
1.2.2.2. Tính nhất quán (consistency): 6
1.2.2.3. Tính biệt lập (isolation): 6
1.2.2.4. Tính bền vững (durability): 7
1.2.3. Các loại giao dịch: 7
1.3 Hoạt động phân tán: 7

Giả sử HKDTX giải quyết các vấn đề kinh doanh của mình trên địa bàn
lớn. Tại mỗi vùng có có các server chứa các cơ sở dữ liệu (CSDL) được nối kết
với nhau qua hệ thống truyền thông, và hệ có thể thực hiện được các chức năng
chủ yếu như:
1. Cập nhật thường xuyên các thông tin trong CSDL.
2. Trả lời các yêu cầu thông tin có liên quan liên quan đến việc kinh
doanh.
3. Đăng ký mua bán từ xa.
Trong phạm vi đề tài này chỉ nghiên cứu yêu cầu và đáp ứng yêu cầu đối
với hệ phân tán thông qua HKDTX. Nội dung đề tài gồm:
Phần 1: Cơ sở lý thuyết
Chương 1: Các kiến thức cơ sở
Bao gồm các vấn đề về yêu cầu từ xa của hệ đa server, các loại giao dịch
và hoạt động phân tán.
Chương 2: Kết nối CSDL với JDBC và lập trình trên mạng.
Phần 2: Thuật toán lồng mở và chương trình
Chương 1: Thuật toán lồng mở
Chương 2: Chương trình thể hiện thông tin truy vấn.
Tôi xin chân thành cám ơn sự hướng dẫn của thầy Lê Văn Sơn và bạn bè đã
tạo điều kiện giúp tôi hoàn thành đề tài này.
Lớp Khoa học máy tính – K11 (2009-2011)
3
Nhóm 8- Đề số 19
Hệ thống A
phatyeucau(B,yc)
nhanlai(ketqua)
Lập trình mạng

Đà Nẵng, ngày 02 tháng 6 năm 2008
PHẦN 1: CƠ SỞ LÝ THUYẾT

4
Nhóm 8- Đề số 19
Hệ thống B
Lặp lại
Nhanyeucau(s,nh)
Nếu (hợp thức) thì
Bắt đầu
tracuucsdl
thongke
phatketqua(s,kq)
Kết thúc
Nếu không
guitbao(s,thong bao)
Cho đến khi đúng
Lập trình mạng

Ta sử dụng hàm nguyên thuỷ phatyeucau(B,yc) để gửi cho hệ thống B yêu
cầu truy cập để tìm thông tin. Hàm nhanlai(ketqua) sẽ được sử dụng để trả lời
cho A biết trạng thái của B.
Tương tự như A, tại B người ta cài đặt thủ tục bao gồm các hàm nguyên
thuỷ nhanyeucau(s,nh) – nhận yêu cầu trong nh, tracuucsdl – tra cứu thông tin
theo yêu cầu trong CSDL, thongke- sử dụng riêng cho trạm nhận và
phatketqua(s,kq), guitb(s,thongbao) được sử dụng để trả lời cho B.
Trường hợp tra cứu vừa nêu là đơn giản bởi vì phép toán diễn ra độc lập.
Có rất nhiều trường hợp phức tạp hơn, trong đó một phép tra cứu lại phụ thuộc
vào các phép xử lý khác trước đó. Bây giờ, ta hãy xem xét trường hợp: một
người từ thành phố A yêu cầu tập hợp thông tin chỉ dẫn liên quan đến hàng loạt
phép tra cứu vào CSDL của bộ phận ở B mà kết quả của phép sau có được phụ
thuộc vào kết quả của phép trước đó. Điều này không thể tiến hành bằng một
lệnh hoặc là một hàm mà phải được tiến hành bằng thủ tục truy vấn. Thủ tục này

mọi hành động đã được thực hiện đều phải được hồi lại (undo), đưa CSDL trở
về trạng thái trước khi thực hiện giao dịch. Quá trình này gọi là cuộn ngược
(rollback)
1.2.2. Các tính chất của giao dịch:
Giao dịch là một đơn vị tính toán nhất quán và tin cậy do 4 tính chất - gọi
chung là tính chất ACID:
1.2.2.1. Tính nguyên tử (atomicity):
Tính nguyên tử liên quan đến sự kiện là một giao dịch được xử lý như
một đơn vị họat tác. Chính vì thế mà các hành động của giao dịch: hoặc tất cả
đều hoàn tất hoặc không hành động nào hoàn tất (hồi lại tất cả các hành động đã
được thực hiện).
1.2.2.2. Tính nhất quán (consistency):
Giao dịch là một chương trình đúng đắn, ánh xạ CSDL từ trạng thái nhất
quán này sang trạng thái nhất quán khác.
1.2.2.3. Tính biệt lập (isolation):
Một giao dịch đang thực thi không thể làm lộ ra các kết quả của nó cho
những giao dịch khác đang cùng họat động trước khi nó ủy thác.
Lớp Khoa học máy tính – K11 (2009-2011)
6
Nhóm 8- Đề số 19
Lập trình mạng

1.2.2.4. Tính bền vững (durability):
Một khi giao dịch ủy thác, kết quả của nó được duy trì cố định và không
bị xóa khỏi CSDL.
1.2.3. Các loại giao dịch:
Dựa vào cấu trúc giao dịch được phân thành 3 họ lớn:
- Giao dịch phẳng (flat transaction): là giao dịch có một khởi điểm duy
nhất và một điểm kết thúc duy nhất.
- Giao dịch lồng (nested transaction): đây là mô hình giao dịch cho phép

thỉnh cầu
Lập trình mạng

Bộ xếp lịch chịu trách nhiệm cài đặt thuật toán điều khiển nhằm đồng bộ
hóa việc truy xuất đến CSDL.
Tham gia vào việc quản lý giao dịch phân tán là bộ quản lý khôi phục cục
bộ (local recovery manager) có mặt tại mỗi vị trí. Chức năng của chúng là cài
đặt các thủ tục khôi phục tại chỗ nhằm đưa CSDL về trạng thái nhất quán sau
khi xảy ra sự cố.
Mỗi giao dịch đều xuất phát từ một vị trí và ta gọi đó là vị trí khởi nguồn.
Việc thực hiện các thao tác CSDL của một giao dịch được điều phối bởi TM tại
vị trí khởi nguồn của giao dịch.
Bộ quản lý giao dịch cài đặt một giao diện cho các ứng dụng, bao gồm 5
lệnh: begin_transaction, read, write, commit, abort:
i. Begin_transaction: chỉ cho TM biết giao dịch mới bắt đầu.
ii. Read: Nếu dữ liệu x được lưu cục bộ, giá trị của nó được đọc và
chuyển cho giao dịch. Nếu không phải, TM sẽ chọn một bản sao của x và yêu
cầu chuyển bản sao đó cho giao dịch.
iii. Write: TM điều phối việc cập nhật giá trị x tại mỗi vị trí có chứa nó.
Commit: TM điều phối việc cập nhật vật lý của tòan thể CSDL có chứa bản sao
của mỗi dữ liệu mà một lệnh Write trước đó đã đưa ra.
iv. Abort: TM kiểm tra lại rằng không có tác động nào của giao dịch được
phản ánh trong CSDL.
Khi cung cấp các dịch vụ này, TM có thể giao tiếp với SC và bộ xử lý dữ
liệu tại cùng vị trí hoặc khác vị trí.
Begin_transaction Kết quả
Read, Write
Commit, Abort
với các SC khác
Với các

để nhận đối tượng của lớp Connection.
2. Tạo ra một đối tượng của lớp Statement để xử lý câu lệnh.
3. Truyền tham số cho các lệnh SQL trong các hệ quản trị CSDL và các
đối tượng xử lý câu lệnh đó.
4. Kết quả truy vấn là đối tượng của lớp ResultSet.
Sau đây là một số giao diện, một số lớp trong gói java.sql và một số hàm
chính của chúng.
Lớp DriverManager
Lớp DriverManager chịu trách nhiệm nạp các bộ điều khiển JDBC và tạo
ra sự kết nối giữa các đối tượng của CSDL. Trước khi sử dụng một bộ điều
khiển (Driver) thì nó phải đăng ký với DriveManager nhờ hàm forName() của
lớp Class:
try{
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
Lớp Khoa học máy tính – K11 (2009-2011)
9
Nhóm 8- Đề số 19
Lập trình mạng

Class.foeName(“com.oracle.jdbc.OracleDriver”);
} catch (ClassNotFoundException e){
… //xử lý ngọai lệ
}
Sau đó chương trình phải kết nối với CSDL bằng cách sử dụng
DriverManager.getConnection(jdbc:driver:databaseName)
Giao diện Connection
Giao diện java.sql.Connection phục vụ cho việc kết nối các CSDL
Tạo một đối tượng con để kết nối:
Connection con =
DriverManager.getConnection(“url”,”username”,”password”);

Nhóm 8- Đề số 19
Lập trình mạng

CREATE, UDATE, INSERT… và có thể xử lý theo lô.
Giao diện ResultSet
Kết quả của các câu lệnh xử lý với SQL được lưu trữ và xử lý thông qua đối
tượng của ResultSet. Chẳng hạn:
ResultSet rs = stmt.executeQuery(“SELECT * FROM SANPHAM”); đối
tượng rs của ResultSet chứa những kết quả truy vấn vào CSDL SANPHAM theo
câu lệnh SELECT của SQL.
Hàm getString(“fieldname”), getInt(“fieldname”), : đọc giá trị các
trường dữ liệu.
Hàm boolean next(): chuyển sang hàng tiếp theo.
2.2. Lập trình trên mạng:
Để trao đổi được giữa các ứng dụng với nhau trên mạng, Java sử dụng
TCP/IP để kết nối mạng thông qua kết nối các socket để gửi và nhận các thông
điệp. Một socket đóng vai trò như một đầu cuối của quá trình trao đổi trong một
hệ thống hay giữa hệ thống với nhau. Java cung cấp nhiều lớp để thực hiện các
nhiệm vụ của socket trên mạng.
2.2.1 Một số lớp cần thiết của gói thư viện java.net.
- Lớp InetAddress: quản lý địa chỉ của Internet theo tên và theo số. Các
phương thức thường dùng:
public static InetAddress getLocalHost() : trả về đối tượng là địa chỉ của máy
cục bộ (local host).
public static InetAddress getByName(String host) throws
UnknownHostException: phương thức này nhận địa chỉ của một máy bằng kiểu
chuỗi String và trả về đối tượng kiểu InetAddress thay mặt cho địa chỉ máy này.
- Lớp Socket: để tạo kết nối từ máy khách đến máy chủ thường được khởi
dựng bằng các phương thức sau:
public Socket(String host, int port) throws UnknownHostException,

2.2.2. RMI và lập trình phân tán hướng đối tượng trong Java:
2.2.2.1. Khái niệm chung.
Java RMI (Remote Method Invocation): Là một cơ chế gọi hàm từ xa đã
được thực hiện và tích hợp trong ngôn ngữ Java, là phương pháp lập trình hướng
đối tượng.
RMI mang ý nghĩa triệu gọi phương thức từ xa – là cách thức giao tiếp giữa
các đối tượng Java có mã lệnh cài đặt (bao gồm phương thức và thuộc tính) nằm
trên các máy khác nhau có thể triệu gọi lẫn nhau.
Mô hình dưới đây cho thấy các đối tượng cho phép triệu gọi lẫn nhau. Trên
máy A các đối tượng A1, A2 gọi phương thức của nhau được gọi là triệu gọi
phương thức cục bộ, đây là cách mà lập trình hướng đối tượng truyền thống vẫn
sử dụng. Tương tự, tương tác giữa C1, C2 ,C3 là tương tác cục bộ.
Tuy nhiên, đối tượng Java có thể gọi phương thức của đối tượng nằm trên
một máy khác dựa vào giao thức triệu gọi từ xa RMI.
Lớp Khoa học máy tính – K11 (2009-2011)
12
Nhóm 8- Đề số 19
Lập trình mạng

2.2.2.2. Gọi phương thức từ xa và các vấn đề phát sinh
Triệu gọi phương thức từ xa phức tạp hơn triệu gọi phương thức cục bộ.
Các đối tượng trên hai Server khác nhau hoạt động trên hai tiến trình khác nhau
cho nên việc tham chiếu: Biến, địa chỉ đối tượng là khác nhau.
Ví dụ: Khi truyền con trỏ cho một phương thức ở xa, trên máy đang sử
dụng sẽ tồn tại nhưng trên Server khác (nơi đối tượng thực thi phương thức) sẽ
không có bất kỳ vùng nhớ nào được cấp phát cho con trỏ.
Trên máy cục bộ: lời gọi hàm, các tham số truyền cho hàm thường được đặt
vào ngăn xếp (stack).
Tham số truyền cho phương thức của đối tượng ở xa được đóng gói và
chuyển qua mạng để đến được phương thức thực sự.


- Đối tượng trên máy khách muốn gọi phương thức của đối tượng trên máy chủ
trước hết gọi hàm Naming.lookup() để truy tìm tham chiếu đến đối tượng ở xa
theo tên.
- Bộ đăng ký rmiregistry sẽ trả về tham chiếu đến đối tượng ở xa thông qua giao
tiếp interface mà đối tượng ở xa cung cấp.
- Dựa vào interface đối tượng ở máy khách sẽ gọi các phương thức của đối
tượng trên máy chủ.
- Khi một phương thức được gọi, lời gọi sẽ được chuyển tiếp đến lớp trung gian
_Stub. Xử lý chuyển tham số của phương thức gọi đến _Skel trên máy chủ.
- Lớp trung gian _Skel trên máy chủ trực tiếp yêu cầu đối tượng thực thi
phương thức và chuyển trả kết quả về cho máy khách.
- Đặc tả lớp giao tiếp của đối tượng (Calculator.java)
- Dựa vào đặt tả cài đặt chi tiết đối tượng (CalculatorImpl.java).
- Biên dịch đối tượng (CalculatorImpl.class) và tạo ra 2 đối tượng trung gian
(CalculatorImpl_Stub và CalculatorImpl_Skel).
- Viết chương trình (CalculatorServer.class) cài đặt đối tượng trên máy chủ.
Lưu ý gọi phương thức UnicasRemoteObject. exportObject() để thông báo cho
Java nhận dạng được sự tồn tại của đối tượng ở dạng truy xuất được từ xa bởi
các đối tượng khác.
Lớp Khoa học máy tính – K11 (2009-2011)
15
Nhóm 8- Đề số 19
Lập trình mạng

- Sử dụng lớp giao tiếp (Calculator.class) và CalculatorImpl_Stub từ máy khách
để gọi phương thức của đối tượng trên máy chủ.
2.2.2.6. Bộ đăng ký (Registry)
Cơ chế làm việc của máy ảo Java khi đăng ký và gọi đối tượng giữa trình
khách và chủ.

Server 1
Truy vấn CSDL
cục bộ
Yc thỏa
Trạng thái ủy thác
Mởgiaodịch
1
Kết thúc
GD1
Trả kết quả
cho Client
Server 3
Truy vấn CSDL
cục bộ
ủy thác
Mởgiaodịch
3
Kết thúc
GD3
Trả kết quả
về Server2
Khôi phục
Khôi phuc
Yc thỏa
Server 2
Truy vấn CSDL
cục bộ
Yc thỏa
Trạng thái ủy thác
Mởgiaodịch

public class Client extends javax.swing.JFrame implements ActionListener{
private JTextField jtfItemNo,jtfQuantity;
private JButton btnRequest,btnConnection;
private TextArea Item;
ServerInterface server;
JComboBox Server=new JComboBox();
JPanel contentPane;
JLabel lbel1=new JLabel();
JLabel lbel2=new JLabel();
JLabel lbel3=new JLabel();
JLabel lbel4=new JLabel();
JLabel lbel5=new JLabel();
JLabel lbel6=new JLabel();
public Client()
Lớp Khoa học máy tính – K11 (2009-2011)
18
Nhóm 8- Đề số 19
Lập trình mạng

{
super("Client");
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
contentPane.setSize(new Dimension(460, 180));
//
//
//
lbel1.setText("Server");
lbel1.setBounds(new Rectangle(5, 5, 50, 22));
lbel1.setForeground(new Color(85, 116, 185));

Lập trình mạng

lbel4.setText("Isn't quantity");
lbel4.setBounds(new Rectangle(5, 101, 150, 22));
lbel4.setFont(new Font("Times New Roman",Font.BOLD,14));
contentPane.add(lbel4);
lbel4.setVisible(false);
lbel5.setText("");
lbel5.setBounds(new Rectangle(160, 101, 150, 22));
lbel5.setFont(new Font("Times New Roman",Font.BOLD,14));
contentPane.add(lbel5);
Item=new TextArea();
Item.setBounds(new Rectangle(0, 143, 300, 50));
contentPane.add(Item);
btnRequest.setEnabled(false);
btnConnection.addActionListener(this);
btnRequest.addActionListener(this);
}
public boolean connection(String port){
boolean ok=false;
try{server=(ServerInterface)Naming.lookup("rmi://127.0.0.1:"+port+"/Shop");
ok=true;

}catch(Exception e){
}
return ok;
}

}
try{
int qt=Integer.parseInt(quantity);
Vector ItemInfor=new Vector();
Vector DataInforLast=server.Request(itemNo,qt);
String PortII=""+DataInforLast.get(0);
if(PortII.equals("9000"))
lbel5.setText("Server 1");
if(PortII.equals("9100"))
lbel5.setText("Server 2");
if(PortII.equals("9200"))
lbel5.setText("Server 3");
Vector DataInfor=(Vector)DataInforLast.get(1);
String Item1=""+DataInfor.get(0);
String quantity1=""+DataInfor.get(1);
if(Item1.equals("1")){
if(quantity1.equals("1"))
lbel4.setVisible(true);
ItemInfor=(Vector)DataInfor.get(2);
String ItemInfor2=""+ItemInfor.get(0)+" |
"+ItemInfor.get(1)+" | "+ItemInfor.get(2)+" | "+ItemInfor.get(3);
Item.setText(ItemInfor2);
}else{
JOptionPane.showMessageDialog(this,"No
Item", "Error",1,new ImageIcon("about.jpg"));
Lớp Khoa học máy tính – K11 (2009-2011)
21
Nhóm 8- Đề số 19
Lập trình mạng


Connection cn = null;
String database;
// CONSTRUCTOR
public DataAccessShop(String data)
{
this.database=data;
Lớp Khoa học máy tính – K11 (2009-2011)
22
Nhóm 8- Đề số 19
Lập trình mạng

}
// CONNECT
public void Connect()
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//driver
cn =
riverManager.getConnection("jdbc:odbc:"+this.database);//url
}
catch(Exception e){
System.out.println("Connect Error: "+e);
}
}
// DISCONNECT
public void Disconnect(){
try
{
cn.close();
}

String quantity1=rs.getString(3);
if(Double.parseDouble(quantity1)<Quantity)
qtity=1;
row.add(""+quantity1);
row.add(""+rs.getString(4));
}
ItemInfo.add(""+item_No);
ItemInfo.add(""+qtity);
ItemInfo.add(row);
rs.close();
stmt.close();
}catch(Exception ae)
{
System.out.println("loi: "+ae);
}
return ItemInfo;
}
}
//ServerImpl.java
import java.rmi.*;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.*;
import java.rmi.server.*;
import java.util.Vector;
import java.sql.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
import java.util.*;
public class ServerImpl implements ServerInterface{

}
da= new DataAccessShop(Par);
}
public boolean connectionServer(int port){
boolean ok=false;
try{serverI=(ServerInterface)Naming.lookup("rmi://127.0.0.1:"+port+"/Shop");
ok=true;

}catch(Exception e){
System.out.println("Loi ket noi Server: "+port);
}
return ok;
}
public Vector RequestServer(int PortI,String itemNo, int Quantity){
Lớp Khoa học máy tính – K11 (2009-2011)
25
Nhóm 8- Đề số 19


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status