Có 3 công ty du lịch liên kết với nhau trong việc tổ chức Tour du lịch. Dữ liệu chung là các tour mà 3 công ty này tổ chức. Xây dựng một hệ chương trình đăng ký tour du lịch thông qua mạng kết nối giữa 3 công ty với các chức năng sau:
- Cho phép khách hàng (Client) có thể đăng ký tour tại một máy tính bất kỳ được kết nối vào mạng của 3 công ty.
- Các server nhận biết được hoạt động của đăng ký/hủy tour của khách hàng. Thực hiện cập nhật dữ liệu của trên DB của nó và DB của các server khác.
- Các server có thể monitoring trạng thái các server khác
- Server cho phép cập nhật tour mới, hủy tour trong danh mục tour.
III.1 Giải quyết bài toán
III.1.1 Thực hiện việc cài đặt ba server ảo trên máy đơn (giả lập server)
Trong thực tế việc kết nối internet không phải ai cũng có điều kiện, mặc dù vậy ta vẫn có thể giải lập ba server trên một máy đơn giống như ba server đang chạy trên internet thực sự. Để mô phỏng cho cách làm việc trên mạng của ba máy server ta sẽ mở ba cửa sổ dòng lệnh, mỗi cửa sổ được dùng làm một server. Dùng điạ chỉ
127.0.0.1 (localhost) để làm địa chỉ IP cho máy chủ. Vì ba máy chủ khác nhau chạy trên cùng một máy nên ta phải khai báo các port khác nhau.
if (args.length != 8) {
System.err.println("Usage:java Server c_name port host_01 port_01 host_02 port_02 delay numOfMessage");
System.exit(0); }
String cname = args[0]; String host_01 = args[2]; String host_02 = args[4]; int port = 4567; int port_01 = 5678; int port_02 = 6789; int delay = 3000; int numOfMessage = 10; try { port = Integer.parseInt(args[1]); port_01 = Integer.parseInt(args[3]); port_02 = Integer.parseInt(args[5]); delay = Integer.parseInt(args[6]); numOfMessage= integer.parseInt(args[7]); }
III.1.2 Cài đặt CSDL trên các Server
• Truy xuất dữ liệu thông qua ODBC
• Client truy cập vào Servert đăng ký truy xuất dữ liệu có nội dung sau
import java.sql.*; class Odbc
{
public static void main(String args[]) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//Khai bao driver Connection con=DriverManager.getConnection("jdbc:odbc:test"); Statement stm=con.createStatement();
String stQuery="SELECT makh,ttkh, tuyen FROM k_hang"; ResultSet res=stm.executeQuery(stQuery);
while (res.next()) {
int nMakh =res.getInt("makh");
String stTen =res.getString("ttkh");
String stTuyen =res.getString("maTour"); System.out.print(nMa+" "); System.out.print(stTen+" "); System.out.println(stTuyen+" "); }//while res.close(); Nhóm 12 – Đề số 22 Trang 31
stm.close(); con.close();
}catch(Exception e){System.out.println("Loi khi truy van du lieu:"+e);}
}//
}//end Class
• Chèn thêm một mẩu tin mới Query INSERT
Try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:test"); String stQuery="INSERT INTO k_hang(makh,ttkh,matour)
Values(005,'Nguyen Viet My','DNHN01')";
PreparedStatement stm= con.prepareStatement(stQuery); stm.executeUpdate();
stm.close(); con.close(); } //try
catch(Exception e){System.out.println("Loi khi them mau tin:"+e);}
III.1.3 Cài đặt và chạy chương trình
Mở đồng thời ba cửa sổ DOS-Prompt, tại mỗi cửa sổ chạy lần lượt các file runserver1.bat, runserver2.bat, runserver3.bat.
III.2 Một số kết quả
Server 2 chạy ở trạng thái khởi động
Server 3 chạy ở trạng thái khởi động
Kết quả ghi ra file:
Cập nhật được dữ liệu vào các Data trên các Server
III.3 Một số đoạn mã mẫu
/*************** DSDCImpl.java ***************/ import java.net.*; import java.io.*; import java.lang.Thread; import java.util.*; import java.sql.*; import java.rmi.dgc.*;
public class DSDCServerImpl extends java.rmi.server.UnicastRemoteObject implements DSDCServerInt {
static int[] serverArray;
public DSDCServerImpl() throws java.rmi.RemoteException { super();
serverArray = new int[10];
for (int i = 0; i < serverArray.length; i++){ serverArray[i]=-1;
} }
public void welcomeMessage(String message) throws java.rmi.RemoteException { try { System.out.println("\n"+ message); } catch(Exception e) { e.printStackTrace(); } } /*************** ***************/
public void insertList1(String Madk,String MaPtien, String MaTuyen, String MaKS, String Hoten, String Diachi, String Dienthoai, String Sender, String sophong, String soghe) throws java.rmi.RemoteException {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); String urlb= "jdbc:odbc:Tour2";
java.sql.Connection dbcnb = DriverManager.getConnection(urlb,"Admin","");
java.sql.Statement dbstb = dbcnb.createStatement(); System.out.println("ket noi duoc");
int rsb = dbstb.executeUpdate("INSERT INTO Dangky(madangky,maphuongtien,matuyen,maks,tenkhachhang,diachi,dien thoai,soluongphong,soluongghe) VALUES('"+Madk+"','"+MaPtien+"','"+MaTuyen+"','"+MaKS+"','"+Hoten+ "','"+Diachi+"','"+Dienthoai+"','"+sophong+"','"+soghe+"');"); dbcnb.commit(); dbcnb.close();
System.out.println(Sender + " Inserted successfully!");
} catch(Exception e) { e.printStackTrace(); }
}
public String select1(String tenTuyen) throws java.rmi.RemoteException {
String maTuyen=""; try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); String urls1 = "jdbc:odbc:Tour";
java.sql.Connection dbcns1 = DriverManager.getConnection(urls1,"Admin","");
java.sql.Statement dbsts1 = dbcns1.createStatement(); ResultSet rss1 = dbsts1.executeQuery("Select * from Tour"); while (rss1.next()) { String tamT=rss1.getString(2); if(tamT.equals(tenTuyen)) { maTuyen=rss1.getString(1); } } dbcns1.commit(); dbcns1.close();
System.out.println( " Select successfully!"); } catch(Exception e) { e.printStackTrace(); } return maTuyen; } } /****************** DSDCServer.java ******************/ import java.rmi.Naming; public class DSDCServer {
public DSDCServer() { try {
DSDCInt dsdc=new DSDCImpl();
Naming.rebind("rmi://localhost:2001/DSDCForm1",dsdc); System.out.println("Server1 Running for Client!"); } catch (Exception e) {
System.out.println("DSDC Error:"+e); }
try {
DSDCServerInt dsdcThread=new DSDCServerImpl(); Naming.rebind("rmi://localhost:2001/DSDCAlm1",dsdcThread);
System.out.println("Server1 Running for MultiServer");
} catch (Exception e) {
System.out.println("DSDC Error:"+e); }
}
public static void main(String args[]) {
System.out.println("SERVER 1 ONLINE !"); new DSDCServer();
} }