ÁP DỤNG THUẬT TOÁN TẠI TRẠM SẢN XUẤT VÀ TRẠM TIÊU THỤ ĐỂ MÔ PHỎNG QUÁ TRÌNH LÀM VIỆC CỦA HỆ PHÂN TÁN

38 582 0
ÁP DỤNG THUẬT TOÁN TẠI TRẠM SẢN XUẤT VÀ TRẠM TIÊU THỤ ĐỂ MÔ PHỎNG QUÁ TRÌNH LÀM VIỆC CỦA HỆ PHÂN TÁN

Đ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

LỜI NÓI ĐẦU Hệ tin học phân tán là hệ thống tin học hiện đại, đa dạng, phức tạp và đang trên đà phát triển, được nhiều trường đại học, nhiều viện nghiên cứu, nhiều chuyên gia công nghệ thông tin, quan tâm nghiên cứu với nhiều công trình khoa học có giá trị về mặt nguyên lý, phương pháp cũng như ứng dụng trong thực tế. Mục đích của lập trình mạng phân tán là tận dụng các khả năng tính toán và khai thác dữ liệu của các hệ thống máy tính ở xa để thực hiện những tính toán nhanh hơn trên cơ sở sử dụng nhiều bộ xử lý, nhiều bộ nhớ đồng thời hoặc nhiều dữ liệu quý giá được phân tán khắp nơi. Trên nền hệ thống mạng máy tính được kết nối như hiện nay, việc xử lý phân tán sẽ giải quyết được những bài toán lớn hơn, phức tạp hơn của thực tế. Trong phạm vi của tiểu luận này tôi chỉ đề cập đến hai phần: Phần 1: Lý thuyết về Lập trình mạng phân tán và RMI Phần 2: Bài tập: áp dụng thuật toán tại trạm sản xuất và trạm tiêu thụ để mô phỏng quá trình làm việc của hệ phân tán. Tiểu luận chắc chắn có nhiều sai sót. Kính mong sự chỉ bảo tận tình của Thầy giáo hướng dẫn cùng các anh chị và bạn bè đồng nghiệp. Xin trân trọng cám ơn Giáo sư TS. Lê Văn Sơn đã cung cấp kiến thức, tài liệu để tôi hoàn thành tiểu luận này. Xin cảm ơn các anh chị và bạn bè đồng nghiệp đã giúp đỡ, động viên và chia sẻ kinh nghiệm học tập nghiên cứu. Nhóm sinh viên thực hiện: Phạm Văn Lanh Phạm Quốc Cường PHẦN I : CƠ SỞ LÝ THUYẾT LẬP TRÌNH MẠNG PHÂN TÁN VÀ RMI I Mạng máy tính Phân tán. Hệ thống tính toán phân tán đã tạo được bước ngoặc vĩ đại so với các hệ tập trung, và hệ khách chủ (ClientServer). Việc tính toán phân tán về cơ bản cũng giống như việc tính toán của hệ khách chủ trên phạm vi rộng lớn. Dữ liệu được chứa trên nhiều máy chủ ở tại nhiều vị trí địa lý khác nhau kết nối nhau thông qua mạng diện rộng WAN hình thành các nơi làm việc, các phòng ban, các chi nhánh của một cơ quan. Tính toán phân tán hình thành từ tính toán tập trung và chientserver. Các mạng được xây dựng dựa trên kỹ thuật Web (ví dụ như: Internet; intranet…) là các mạng phân tán. Hệ thống cơ sở dữ liệu backend có thể được nối kết với các server Web để lấy được các thông tin động. Kỹ thuật Web này đã mở ra hướng mới cho hệ phân tán. Các trình duyệt Web giúp cho khách hàng trên toàn cầu kết nối với hệ thống Web chủ, mà không bị khống chế bởi bất kỳ hệ điều hành nào đang chạy trong máy của khách hàng này. Một xu hướng mới khi xây dựng các intranet là dữ liệu phải được tập trung hóa tại một nhóm các máy chủ để có khả năng đáp ứng cùng một lúc cho nhiều người dùng. Giờ đây các hệ thống mainframe đã thật sự trở lại vì tính năng xử lý mạnh mẽ. Xu hướng này có lẽ trái ngược với việc tính toán phân tán nhưng trong thực tế chúng cùng tồn tại bên nhau. II Các điểm mạnh trong hệ tin học phân tán. Cơ chế tính toán phân tán hỗ trợ truy cập các dữ liệu được lưu ở nhiều nơi. Nhờ cơ chế nhân bản nên người dùng chỉ cần truy cập cục bộ cũng lấy được các thông tin từ các trung tâm chính ở rất xa. Hệ thống này khắc phục được các hiểm họa địa phương. Vì nếu chúng ta không truy cập dữ liệu được tại vị trí này, chúng ta có thể thử ở nơi khác

Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn ĐẠI HỌC ĐÀ NẴNG KHOA CÔNG NGHỆ THÔNG TIN  TIỂU LUẬN LẬP TRÌNH MẠNG Đề tài: ÁP DỤNG THUẬT TOÁN TẠI TRẠM SẢN XUẤT VÀ TRẠM TIÊU THỤ ĐỂ MÔ PHỎNG QUÁ TRÌNH LÀM VIỆC CỦA HỆ PHÂN TÁN Giảng viên giảng dạy : PGS.TS Lê Văn Sơn Học viên thực hiện : Phạm Văn Lanh Phạm Quốc Cường Lớp : CHK11 Niên khoá : 2009 - 2011 ĐÀ NẴNG, 03/2010 Nhóm 10_Lớp KHMT_Khóa 11 Trang 1 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn LỜI NÓI ĐẦU Hệ tin học phân tán là hệ thống tin học hiện đại, đa dạng, phức tạp và đang trên đà phát triển, được nhiều trường đại học, nhiều viện nghiên cứu, nhiều chuyên gia công nghệ thông tin, quan tâm nghiên cứu với nhiều công trình khoa học có giá trị về mặt nguyên lý, phương pháp cũng như ứng dụng trong thực tế Mục đích của lập trình mạng phân tán là tận dụng các khả năng tính toán và khai thác dữ liệu của các hệ thống máy tính ở xa để thực hiện những tính toán nhanh hơn trên cơ sở sử dụng nhiều bộ xử lý, nhiều bộ nhớ đồng thời hoặc nhiều dữ liệu quý giá được phân tán khắp nơi Trên nền hệ thống mạng máy tính được kết nối như hiện nay, việc xử lý phân tán sẽ giải quyết được những bài toán lớn hơn, phức tạp hơn của thực tế Trong phạm vi của tiểu luận này tôi chỉ đề cập đến hai phần: Phần 1: Lý thuyết về Lập trình mạng phân tán và RMI Phần 2: Bài tập: áp dụng thuật toán tại trạm sản xuất và trạm tiêu thụ để mô phỏng quá trình làm việc của hệ phân tán Tiểu luận chắc chắn có nhiều sai sót Kính mong sự chỉ bảo tận tình của Thầy giáo hướng dẫn cùng các anh chị và bạn bè đồng nghiệp Xin trân trọng cám ơn Giáo sư TS Lê Văn Sơn đã cung cấp kiến thức, tài liệu để tôi hoàn thành tiểu luận này Xin cảm ơn các anh chị và bạn bè đồng nghiệp đã giúp đỡ, động viên và chia sẻ kinh nghiệm học tập nghiên cứu Nhóm sinh viên thực hiện: Phạm Văn Lanh Phạm Quốc Cường Nhóm 10_Lớp KHMT_Khóa 11 Trang 2 Tiểu luận môn học Lập trình mạng Nhóm 10_Lớp KHMT_Khóa 11 GVHD: PGS.TS Lê Văn Sơn Trang 3 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn PHẦN I : CƠ SỞ LÝ THUYẾT LẬP TRÌNH MẠNG PHÂN TÁN VÀ RMI I Mạng máy tính Phân tán Hệ thống tính toán phân tán đã tạo được bước ngoặc vĩ đại so với các hệ tập trung, và hệ khách chủ (Client/Server) Việc tính toán phân tán về cơ bản cũng giống như việc tính toán của hệ khách chủ trên phạm vi rộng lớn Dữ liệu được chứa trên nhiều máy chủ ở tại nhiều vị trí địa lý khác nhau kết nối nhau thông qua mạng diện rộng WAN hình thành các nơi làm việc, các phòng ban, các chi nhánh của một cơ quan Tính toán phân tán hình thành từ tính toán tập trung và chient/server Các mạng được xây dựng dựa trên kỹ thuật Web (ví dụ như: Internet; intranet…) là các mạng phân tán Hệ thống cơ sở dữ liệu back-end có thể được nối kết với các server Web để lấy được các thông tin động Kỹ thuật Web này đã mở ra hướng mới cho hệ phân tán Các trình duyệt Web giúp cho khách hàng trên toàn cầu kết nối với hệ thống Web chủ, mà không bị khống chế bởi bất kỳ hệ điều hành nào đang chạy trong máy của khách hàng này Một xu hướng mới khi xây dựng các intranet là dữ liệu phải được tập trung hóa tại một nhóm các máy chủ để có khả năng đáp ứng cùng một lúc cho nhiều người dùng Giờ đây các hệ thống mainframe đã thật sự trở lại vì tính năng xử lý mạnh mẽ Xu hướng này có lẽ trái ngược với việc tính toán phân tán nhưng trong thực tế chúng cùng tồn tại bên nhau II Các điểm mạnh trong hệ tin học phân tán Cơ chế tính toán phân tán hỗ trợ truy cập các dữ liệu được lưu ở nhiều nơi Nhờ cơ chế nhân bản nên người dùng chỉ cần truy cập cục bộ cũng lấy được các thông tin từ các trung tâm chính ở rất xa Hệ thống này khắc phục được các hiểm họa địa phương Vì nếu chúng ta không truy cập dữ liệu được tại vị trí này, chúng ta có thể thử ở nơi khác Nhóm 10_Lớp KHMT_Khóa 11 Trang 4 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn Dữ liệu phân tán đòi hỏi phải được nhân bản và đồng bộ hóa cao thông qua các mối liên kết mạng, điều này làm cho việc quản trị và giám sát phức tạp hơn Một số nhà quản trị cho rằng, ở hệ thống như thế này sẽ gây khó khăn trong vấn đề bảo mật và điều khiển Hệ phân tán được xây dựng trên giao thức TCP/IP và các kỹ thuật Web cùng với các ứng dụng trung gian (middleware) thúc đẩy việc tính toán phân tán Quả thật đây là một đổi thay mang tính cách mạng Nhiệm vụ trước mắt là làm thế nào để chuyển tiếp sang hệ này một cách khoa học Cơ chế Client/Server cung cấp kiến trúc phù hợp cho việc dàn trải hệ thống phân tán Mô tả nhiều cách truy cập trong các hệ thống phân tán Các máy mainframe sẽ dùng để lưu trữ các dữ liệu di sản hoặc đóng vai trò kho dữ liệu (data warehouse) Cơ chế này giúp xây dựng các trung tâm dữ liệu staging (công bố), phục vụ tốt cho việc truy cập Người dùng ở xa có thể truy cập dữ liệu trên hệ staging hay tại các máy chủ cục bộ Người dùng còn có thể trao đổi thông tin với nhau bằng thư điện tử và hình thành các nhóm công tác III Giới thiệu phương thức triệu gọi đối tượng từ xa RMI(Remote Method Invocation) Lập trình phân tán đối tượng bằng cách triệu gọi phương thức từ xa RMI là cách hợp tác giữa các đối tượng Java có những mã lệnh cài đặt (bao gồm các phương thức và thuộc tính) nằm trên các máy khác nhau (chính xác là nằm trên các JVM – máy ảo Java khác nhau) và có thể triệu gọi lẫn nhau để trao đổi tin Trong mô hình Client/Server truyền thống, các yêu cầu được dịch sang một format (dạng) trung gian (dạng từng cặp tên gọi / giá trị hoặc các dữ liệu trong XML) Máy chủ Server phân tích format yêu cầu, xử lý để có được kết quả và gửi trả lời cho máy khách Client Máy khách phân tích format trả lời và hiển thị thông tin cho người sử dụng 1 Triệu gọi phương thức từ xa Cơ chế triệu gọi từ xa có vẻ đơn giản hơn mô hình Client/Server Nếu ta cần truy cập Máy máy Máy chủ tới một đối tượng ở trên mộtkhách khác thì ta chỉ cần triệu gọi phương thức của đối tượng ở trên máy đó Tất nhiên, các thamGửi bằng cách dữ liệu phải được gửi đến cho máy kia số yêu cầu về nào đó và đối tượng nhận được phải chắc chắn thực hiện phương thức tương ứng để có được những thông tin cần thiết gửi trả lại cho đối tượng khách hàng Trả lại thông tin yêu cầu Nhóm 10_Lớp KHMT_Khóa 11 Hình 1: Sự trao đổi giữa đối tượng khách và phục vụ (chủ) Trang 5 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn Tuy nhiên, việc triệu gọi phương thức của các đối tượng từ xa chắc chắn sẽ phức tạp hơn nhiều so với lời gọi hàm ở trong cùng một chương trình ứng dụng Các đối tượng trên hai máy ảo khác nhau thì hoạt động trên hai tiến trình khác nhau, có hai không gian địa chỉ khác nhau, và vì thế việc tham chiếu tới các biến, địa chỉ đối tượng là hoàn toàn khác nhau Lời gọi các hàm cục bộ thường luôn trả về kết quả sau khi thực hiện thành công, trong khi lời triệu gọi các phương thức từ xa phải thông qua kết nối mạng, có thể bị tắc nghẽn, bị ngắt do mạng gặp sự cố, … Đối với lời gọi hàm trên máy cục bộ, các tham số truyền cho hàm thường đặt vào ngăn xếp, trong khi tham số truyền cho các phương thức của đối tượng ở xa phải được đóng gói và chuyển qua mạng theo giao thức chuẩn để đến được đích với phương thức thực sự thông qua các đại diện trung gian 2 Kiến trúc RMI Java Mục đích của kiến trúc RMI là tạo ra một mô hình đối tượng phân tán và được tích hợp với ngôn ngữ lập trình Java Kiến trúc này đã thành công trong việc tạo ra một hệ thống an toàn và kế thừa được sức mạnh của Java trong xử lý phân tán và đa luồng Về cơ bản, RMI được xây dựng dựa trên kiến trúc ba tầng như hình 2 Chương trình khách Chương trình chủ Stub & Skeleton Hệ thống RMI Stub & Skeleton Tham chiếu từ xa Tham chiếu từ xa Tầng giao vận Hình 2: Kiến trúc ba tầng của RMI - Hai lớp trung gian Stub và Skeleton: chúng được hệ thống tạo ra theo yêu cầu Các lớp này chặn các lời gọi phương thức của chương trình khách (Client) tới các biến tham chiếu và gửi tới dịch vụ triệu gọi từ xa Lớp Skeleton liên lạc với Stub thông qua liên kết RMI Nó đọc các tham số của lời triệu gọi từ xa từ một liên kết nào đó, thực hiện lời gọi tới đối tượng thực thi dịch vụ từ xa và sau đó gửi các giá trị trả lại cho Stub Trong Java 2 Nhóm 10_Lớp KHMT_Khóa 11 Trang 6 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn SDK, các giao diện mới được xây dựng đã làm cho Skeleton lỗi thời RMI sử dụng phép ánh xạ để thực hiện việc kết nối tới các đối tượng dịch vụ từ xa thay cho Skeleton - Tầng tham chiếu từ xa: tầng này dịch và quản lý các tham chiếu tới các đối tượng dịch vụ từ xa Ở JDK1.1, tầng này thực hiện kết nối theo cơ chế điểm - tới - điểm Đến Java 2 SDK, tầng này được cải tiến để nâng cao việc hỗ trợ để kích hoạt các đối tượng dịch vu từ xa đang chờ thực hiện thông qua ROA, đó là cách kết nối Client/Server - Tầng giao vận: dựa trên kết nối TCP/IP giữa các máy tính trong mạng Ngay cả khi hai chương trình chạy trên hai JVM trong cùng một máy, chúng cũng thực hiện kết nối thông qua TCP/IP của chính máy đó Tầng giao vận RMI được thiết kế để thiết lập một kết nối giữa máy Client với máy Server Giả sử, ta có đối tượng C1 được cài đặt chạy trên máy phục vụ C RMI của Java giúp ta tạo ra hai lớp trung gian C1_Skel (không cần thiết đối với Java 2 SDK) và C1_Stub Lớp C1_Stub sẽ được nạp về máy khách B Khi đối tượng B1 trên máy B triệu gọi C1, máy ảo Java sẽ chuyển lời gọi đến lớp C1_Stub C1_Stub sẽ chịu trách nhiệm đóng gói các tham số và chuyển chúng qua mạng đến cho máy C Tại máy C, lớp C1_Skel (C1_Stub được nạp về và thay thế ở Java 2 SDK) sẽ nhận tham số để chuyển vào không gian địa chỉ tương thích với đối tượng C1 sau đó gọi phương thức tương ứng để thực hiện Kết quả nếu có do phương thức của đối tượng C1 trả về sẽ được lớp C1_Skel (C1_Stub thay thế ở Java 2 SDK) đóng gói trả ngược cho C1_Stub C1_Stub chuyển giao kết quả cuối cùng cho B1 Theo cơ chế này, có thể hình dung như B1 đang trao đổi trực tiếp với đối tượng C1 ngay trên cùng một máy Ngoài ra, với sự trợ giúp của lớp trung gian C1_Stub, khi kết nối mạng gặp sự cố, lớp trung gian Stub sẽ luôn biết cách thông báo lỗi đến đối tượng B1 Thực tế có một câu hỏi là: Làm thế nào để B1 tham chiếu được đến C1 khi không có lớp C1 nào được cài đặt ở máy B? C1_Stub trên máy B chỉ làm lớp trung gian chuyển đổi tham số và thực hiện các giao thức mạng, nó không phải là hình ảnh của đối tượng C1 Để làm được điều đó, lớp của đối tượng C1 cần cung cấp một giao diện tương ứng, được gọi là giao diện từ xa với các phương thức cho phép đối tượng B1 gọi nó trên máy B Stub thường trực trên máy khách, không ở trên máy chủ Nó có vai trò đóng gói các thông tin bao gồm:  Định danh đối tượng từ xa cần sử dụng Nhóm 10_Lớp KHMT_Khóa 11 Trang 7 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn  Mô tả về phương thức cần triệu gọi  Mã hoá các tham số và truyền cho Skel Stub sẽ chuyển những thông tin trên cho máy chủ Ở phía máy chủ, đối tượng Skel nhận thực hiện những công việc sau để gọi phương thức từ xa:  Giải mã các tham số  Xác định đối tượng để thực hiện lời gọi hàm tương ứng  Thực hiện lời gọi phương thức theo yêu cầu  Tập hợp kết quả để trả lời hoặc thông báo các lỗi ngoại lệ  Gửi trả lời gói các dữ liệu kết quả cho Stub ở trên máy khách C: Client :Stub Gọi hàm cục bộ ở Stub Trả lại giá trị hoặc ngoại lệ :SKel Chuyển các gói các tham số S: Server Gọi hàm cục bộ ở Server Gửi trả lại kết quả hoặc ngoại lệ Hình 3: Sự trao đổi giữa đối tượng khách và phục vụ thông qua đối tượng trung gian Hình trên mô tả quá trình tổ chức gói các tham số, các dữ liệu trả lời và sự trao đổi giữa các đối tượng trung gian trong kỹ thuật triệu gọi từ xa IV Thiết lập môi trường triệu gọi từ xa Để thực hiện được việc triệu gọi từ xa thì ta phải chạy chương trình ở trên cả hai máy, máy khách và máy chủ Những thông tin cần thiết cũng phải được cài đặt tách biệt ở hai phía, máy khách và máy chủ Tuy nhiên không nhất thiết phải có hai máy tính riêng Nhóm 10_Lớp KHMT_Khóa 11 Trang 8 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn biệt Nhờ có máy ảo Java, khi mở cửa sổ DOS-Prompt (môi trường DOS dưới Window) để chạy chương trình Java, chương trình này được xem như chạy trên một máy (ảo) độc lập Do đó, nếu hai chương trình Java chạy ở trong hai cửa sổ riêng thì có thể xem như là chúng thực hiện trên hai máy khác nhau 1 Trên máy phục vụ (Server) 1.1 Thiết lập giao diện từ xa Trong Java, đối tượng từ xa là thể hiện của một lớp cài đặt giao diện Remote Tất cả các phương thức của các giao diện từ xa phải được khai báo public để các máy JVM khác có thể gọi được Các giao diện từ xa phải đảm bảo những tính chất sau: - Giao diện từ xa phải khai báo public - Giao diện từ xa kế thừa java.rmi.Remote - Mọi phương thức phải khai báo với mệnh đề throws để kiểm soát các ngoại lệ java.rmi.RemoteException - Kiểu dữ liệu của các đối tượng từ xa được truyền đi và giá trị nhận về phải được khai báo như là kiểu giao diện Remote, không phải là lớp Tất cả các phương thức của giao diện từ xa phải khai báo với throws Remote Exception vì khi triệu gọi từ xa rất nhiều nguyên nhân làm cho nó thất bại Ví dụ: máy chủ kết nối mạng không sẵn sàng, và nhiều vấn đề không bình thường, ngoại lệ khác gặp phải trên mạng 1.2 Xây dựng các lớp cài đặt các giao diện từ xa Ở phía máy chủ, chúng ta phải xây dựng lớp cài đặt các phương thức được khai báo trong giao diện từ xa Nói chung, các lớp các cài đặt đối tượng từ xa cần phải: - Khai báo rằng nó cài đặt ít nhất một giao diện từ xa - Định nghĩa đối tượng từ xa - Cài đặt các phương thức để có thể triệu gọi được từ xa Tất cả các lớp ở Server phải kế thừa từ RemoteServer trong gói java.rmi.server, nhưng RemoteServer là lớp trừu tượng, nó định nghĩa các cơ chế cơ sở để trao đổi tin giữa các Nhóm 10_Lớp KHMT_Khóa 11 Trang 9 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn đối tượng dịch vụ và các đại diện của chúng từ xa Lớp UnicastRemoteObject là lớp con của RemoteServer Object Remote RemoteObject RemoteStub RemoteServer UnicastRemoteObject Hình 4.1.1 Sơ đồ kế thừa các đối tượng từ xa Lớp UnicastRemoteObject tạo ra các đối tượng ở trên máy chủ Đây là lớp cơ sở để xây dựng các lớp ứng dụng trao đổi thông tin từ xa trên máy chủ Ngoài ra, ta có thể sử dụng lớp cơ sở MulticastRemoteObject để kế thừa, tạo ra những lớp ứng dụng chạy trên nhiều máy chủ đồng thời Lưu ý: Khi sử dụng RMI, vấn đề đặt tên cho các lớp, giao diện là cần phải cẩn trọng Để cho phù hợp, ta nên thực hiện theo những qui ước đặt tên như sau: + Không có hậu tố, ví dụ: Product + Giao diện từ xa + Có hậu tố Impl, + Lớp cài đặt giao diện ví dụ: ProductImpl + Có hậu tố Server, ví dụ: ProductServer + Có hậu tố Client, ví dụ: ProductClient + Có hậu tố _Stub, ví dụ: ProductImpl_Stub Nhóm 10_Lớp KHMT_Khóa 11 + Chương trình tạo ra các đối tượng dịch vụ + Chương trình khách triệu gọi phương thức từ xa + Lớp đại diện máy khách được tự động tạo ra bởi chương trình rmic + Lớp đại diện máy chủ được tự động Trang 10 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn break; } Util.mySleep(200); } } catch(java.lang.Exception exception) { java.lang.System.out.println("Create registry failed " + exception.getMessage()); java.lang.System.exit(0); } } } // *************************************************** // Server2.java (chua cac lenh sau) // Server2 dong vai tro la Tram Tieu Thu import java.rmi.Remote; import java.rmi.RemoteException; public interface Server2 extends java.rmi.Remote { public abstract void tieuthuso() throws java.rmi.RemoteException; // Set thong tin den tram Tieu Thu public abstract void setmessTT(java.lang.String message) throws java.rmi.RemoteException; public abstract java.lang.String getmessTT() throws java.rmi.RemoteException; public abstract void setcongtosukienTT(int ctsk) throws java.rmi.RemoteException; public abstract int getcongtosukienTT() throws java.rmi.RemoteException; public abstract void setnumTT(int number) throws java.rmi.RemoteException; public abstract int getnumTT() Nhóm 10_Lớp KHMT_Khóa 11 Trang 24 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn throws java.rmi.RemoteException; public abstract int gettongTT() throws java.rmi.RemoteException; } // Server2Impl.java (chua cac lenh sau) // Server2 dong vai tro la Tram Tieu Thu import java.io.*; import java.rmi.*; import java.util.*; public class Server2Impl extends java.rmi.server.UnicastRemoteObject implements Runnable, Server2 { public Server2Impl() throws java.rmi.RemoteException { java.lang.System.out.println("Starting Server2 "); } static String nameserver1 = null; // Khai báo bien de giu tên cua Server1 static Server1 tramsx ; static int congtosukienTT=0; static Thread thrTT; static Message mesinTT;//=new Message(); //+++++++++++++++ public synchronized void setmessTT(java.lang.String message) { mesinTT.setmess(message); } public synchronized java.lang.String getmessTT() { return mesinTT.getmess(); } // voi bien congtosukien public synchronized void setcongtosukienTT(int ctsk) { mesinTT.setcongtosukien(ctsk); Nhóm 10_Lớp KHMT_Khóa 11 Trang 25 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn } public synchronized int getcongtosukienTT() { return mesinTT.getcongtosukien(); } // voi bien num public synchronized void setnumTT(int number) { mesinTT.setnum(number); } public synchronized int getnumTT() { return mesinTT.getnum(); } public synchronized int gettongTT() { return mesinTT.gettong(); } //************************************* public synchronized void tieuthuso() { try{ tramsx=(Server1)java.rmi.Naming.lookup("rmi://localhost:1999/Server1"); System.out.println("Toi ham tieu thu roi !!!!!!!!!!!!!!!!!!!!!!!!!!!"); int tam = mesinTT.gettong(); int num = tramsx.getnumSX(); tam= tam + num; mesinTT.settong(tam); System.out.println("**Ket qua tinh tong o tram Tieu thu bang = "+mesinTT.gettong()); } catch(java.lang.Exception exception) { java.lang.System.out.println(exception.getMessage()); java.lang.System.exit(0); } } //************ Nhóm 10_Lớp KHMT_Khóa 11 Trang 26 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn public void run(){ try{ //******* Cai dat thuat toan cho tram SX ****** mesinTT.setcongtosukien(0); mesinTT.setkiemtra(false); mesinTT.setmess("ok"); Util.mySleep(700); while(mesinTT.getkiemtra()==false){ System.out.println("=================================="); System.out.println(" CUA SO LAM VIEC CUA TRAM TIEU THU "); System.out.println("=================================="); tramsx=(Server1)java.rmi.Naming.lookup("rmi://localhost:1999/Server1"); String text = tramsx.getmessSX(); if(text.compareToIgnoreCase("tieuthu")==0){ System.out.println(" Dang Xu ly o Tram TT"); congtosukienTT=mesinTT.getcongtosukien(); System.out.println("CongToSuKien o Tram TT la: "+ congtosukienTT); //lay gia tri congtosukien o tram SX de so sanh int ctskSX = tramsx.getcongtosukienSX(); System.out.println(" CongToSuKien o Tram SX la: "+ ctskSX); if ( ctskSX - congtosukienTT >=0 ){ System.out.println(" Tram TT Dang tieu thu"); tieuthuso(); congtosukienTT=congtosukienTT +1; //tang ctsk tram tieu thu len 1 mesinTT.setcongtosukien(congtosukienTT);//set lai value ctsk o TT tramsx.setcongtosukienSX(congtosukienTT); mesinTT.setmess("sanxuat"); } else tramsx.setmessSX("tieuthu"); } If(mesinTT.getmess().compareToIgnoreCase("stop")==0) mesinTT.settong(0); Nhóm 10_Lớp KHMT_Khóa 11 Trang 27 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn Util.mySleep(2000); System.out.println("Tram Tieu thu dang doi thong diep de xu ly"); System.out.println( mesinTT.getmess()); System.out.println( tramsx.getmessSX()); if (mesinTT.getmess().compareToIgnoreCase("quit")==0) thrTT.stop(); } thrTT.stop(); } catch(java.lang.Exception exception) { java.lang.System.out.println(exception.getMessage()); java.lang.System.exit(0); } } //*******************// public static void main(java.lang.String args[]) { java.lang.System.out.println("Creating Registry Server2 "); try { // ***** Khoi tao va Start Server o tram SX **** //Server2 tao ra doi tuong server2impl và dang ky no de san sang cho viec goi tu xa java.rmi.registry.LocateRegistry.createRegistry(1099); Server2Impl server2impl = new Server2Impl(); java.rmi.Naming.rebind("rmi://" + args[0] + ":1099/Server2", server2impl); java.lang.System.out.println("Server2 Ready"); System.out.println("====**************************===="); thrTT = new Thread(server2impl); mesinTT=new Message(); //khoi tao doi tuong message while(true) { String str= mesinTT.getmess(); if (str.compareToIgnoreCase("start")==0) { thrTT.start(); break; } Nhóm 10_Lớp KHMT_Khóa 11 Trang 28 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn Util.mySleep(200); } } catch(java.lang.Exception exception) { java.lang.System.out.println("Create registry failed " + exception.getMessage()); java.lang.System.exit(0); } } } // Message.java (chua cac lenh sau) import java.io.*; import java.lang.*; public class Message { int idmess; //id cua thong diep (muc dich de de quan ly) private java.lang.String mess; private int tong; private boolean kiemtra; private int num; private int congtosukien; public Message() { mess="ok"; tong = 0; } // voi bien congtosukien public void setcongtosukien(int ctsk) { System.out.println("vua set gia tri cua cong to su kien la: "+ctsk); this.congtosukien=ctsk; } public int getcongtosukien() { System.out.println("vua get gia tri cua cong to su kien la: "+congtosukien); return this.congtosukien; } Nhóm 10_Lớp KHMT_Khóa 11 Trang 29 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn // voi bien num public void setnum(int number) { this.num=number; } public int getnum() { return this.num; } // voi bien mess public void setmess(java.lang.String message) { this.mess=message; } public java.lang.String getmess() { return this.mess; } // voi bien tong public int gettong() { return this.tong; } public void settong(int total) { this.tong=total; } // voi bien kiem tra public void setkiemtra(boolean kt) { this.kiemtra=kt; } public boolean getkiemtra() { return this.kiemtra; } } // Client.java (chua cac lenh sau) import java.io.*; import java.rmi.*; Nhóm 10_Lớp KHMT_Khóa 11 Trang 30 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn public class Client{ static Server1 sanxuat = null; static Server2 tieuthu =null; public static void main (String argv[]){ try{ sanxuat = (Server1)Naming.lookup("rmi://"+ argv[0] +":1999/Server1"); tieuthu= (Server2)Naming.lookup("rmi://"+ argv[0]+":1099/Server2"); DataInputStream inname=new DataInputStream(System.in) ; java.lang.System.out.println("Nhap chuoi dieu khien Vao: "); java.lang.System.out.println("1/ : bat dau thuc hien chuong trinh, khoi dong cac server hoat dong"); java.lang.System.out.println("2/ : Neu muon goi server San Xuat lam viec truoc "); java.lang.System.out.println("3/ : Neu muon goi server Tieu Thu lam viec truoc "); java.lang.System.out.println("4/ : Neu muon dung viec san xuat va tieu thu cua cac server lai"); java.lang.System.out.println("5/ : Neu muon dung hoat dong cua cac server va thoat"); while(true){ String str=inname.readLine(); if(str.compareToIgnoreCase("sanxuat")==0 ||str.compareToIgnoreCase("tieuthu")==0){ sanxuat.setmessSX("tieuthu"); tieuthu.setmessTT("sanxuat"); } if(str.compareToIgnoreCase("stop")==0){ sanxuat.setmessSX("Stop san xuat"); sanxuat.setcongtosukienSX(1); sanxuat.setnumSX(0); tieuthu.setmessTT("Stop tieu thu"); tieuthu.setcongtosukienTT(0); Nhóm 10_Lớp KHMT_Khóa 11 Trang 31 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn tieuthu.setnumTT(0); } if (str.compareToIgnoreCase("start")==0){ sanxuat.setmessSX("start"); tieuthu.setmessTT("start"); } if (str.compareToIgnoreCase("quit")==0) { sanxuat.setmessSX("quit"); tieuthu.setmessTT("quit"); } Util.mySleep(100); } } catch (Exception e){ System.out.println ("Client exception: " + e); } } } // MonitorTable.java (chua cac lenh sau) dung de display cac gia tri và theo dõi chúng import java.io.*; import java.awt.Component; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.UIManager; import javax.swing.border.EmptyBorder; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellRenderer; import java.rmi.*; Nhóm 10_Lớp KHMT_Khóa 11 Trang 32 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn public class MonitorTable extends JFrame { static DefaultTableModel dm; static JTable table; static JScrollPane scroll; // khai bao cac doi tuong tu xa static Server1 sanxuat = null; static Server2 tieuthu = null; MonitorTable() { super("Monitoring Server San xuat, Tieu thu"); dm = new DefaultTableModel() { public Class getColumnClass(int columnIndex) { return String.class; } }; table = new JTable(dm); int lines = 2; table.setRowHeight(table.getRowHeight() * lines); scroll = new JScrollPane(table); getContentPane().add(scroll); setSize(800,430); setVisible(true); } public static void viewTable(){ try{ //khoi tao cac doi tuong tu xa sanxuat = (Server1)Naming.lookup("rmi://localhost:1999/Server1"); tieuthu = (Server2)Naming.lookup("rmi://localhost:1099/Server2"); //khai bao cho table Object[] col =new Object[4]; col[0]="CTSK O Tram San Xuat"; col[1]="Tram San Xuat gui gia tri"; Nhóm 10_Lớp KHMT_Khóa 11 Trang 33 Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn col[2]="CTSK O Tram Tieu Thu"; col[3]="Gia tri sau khi Tram Tieu Thu xu ly"; int i,k; for (k=0;k

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

Từ khóa liên quan

Mục lục

  • LỜI NÓI ĐẦU

  • PHẦN I : CƠ SỞ LÝ THUYẾT

  • LẬP TRÌNH MẠNG PHÂN TÁN VÀ RMI

    • I Mạng máy tính Phân tán.

    • II Các điểm mạnh trong hệ tin học phân tán.

    • III Giới thiệu phương thức triệu gọi đối tượng từ xa RMI(Remote Method Invocation).

      • 1. Triệu gọi phương thức từ xa.

      • 2. Kiến trúc RMI Java.

      • IV Thiết lập môi trường triệu gọi từ xa.

        • 1. Trên máy phục vụ (Server).

          • 1.1. Thiết lập giao diện từ xa.

          • 1.2 Xây dựng các lớp cài đặt các giao diện từ xa

          • 1.3. Cài đặt các phương thức từ xa

          • 1.4. Xác định các đối tượng dịch vụ.

          • 1.5 Bộ đăng ký RMI registry.

          • 1.6 Chi tiết về RMI registry và các cách tự đăng ký đối tượng.

          • 2. Trên máy khách (Client).

          • V Nhận xét về phương thức lập trình phân tán RMI.

          • PHẦN II: BÀI TẬP

            • I Hướng Giải quyết bài toán.

              • NP = NP + 1

              • Kết thúc vòng lặp

              • II Chương trình và kết quả demo.

                • 1. Nội dung chương trình.

                • 2. Kết quả Demo.

                • TÀI LIỆU THAM KHẢO

                • MỤC LỤC

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

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

Tài liệu liên quan