0

TÌM HIỂU KỸ THUẬT LẬP TRÌNH PHÂN TÁN TRONG JAVA

135 1,737 13
  • TÌM HIỂU  KỸ THUẬT LẬP TRÌNH PHÂN TÁN TRONG JAVA

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Tài liệu liên quan

Thông tin tài liệu

Ngày đăng: 23/10/2014, 09:28

Ngôn ngữ lập trình Java do công ty Sun Microsystems phát triển vào đầu thập kỷ 1990. Trải qua hơn 20 năm phát triển, Java thật sự đã lớn mạnh. Hiện tại, Java đã có mặt trong hầu hết các lĩnh vực lập trình với các tên gọi quen thuộc như Java.net, RMI, JDBC, JSP, Servlet, Java Mail, J2ME… Khóa luận tốt nghiệp  MỤC LỤC Danh mục hình ảnh 7 Danh mục từ viết tắt 9 PHẦN I: TÌM HIỂU KỸ THUẬT LẬP TRÌNH PHÂN TÁN TRONG JAVA 1. Chương 1: TỔNG QUAN VỀ LẬP TRÌNH PHÂN TÁN 7 1.1. Lập trình phân tán là gì? 7 1.2. Vấn đề gọi phương thức từ xa 8 1.3. Lập trình phân tán với Java 8 2. Chương 2: LẬP TRÌNH PHÂN TÁN VỚI RMI 10 1.1. Giới thiệu: 10 1.2. Kiến trúc RMI 12 1.3. Cài đặt ứng dụng RMI đơn giản 18 1.4. MỘT SỐ KHÁI NIỆM TRONG RMI 22 1.5. CHUYỂN THAM SỐ TRONG LỜI GỌI PHƯƠNG THỨC TỪ XA 27 1.6. TUẦN TỰ HÓA (SERIALIZABLE) ĐỐI TƯỢNG 37 1.7. MỘT SỐ KỸ THUẬT LẬP TRÌNH PHÂN TÁN VỚI RMI 41 3. CHƯƠNG 3: LẬP TRÌNH PHÂN TÁN VỚI CORBA 65 1.8. TỔNG QUAN VỀ CORBA 65 1.9. XÂY DỰNG ỨNG DỤNG CORBA TRONG MÔI TRƯỜNG JAVA 72 1.10. TÌM HIỂU JNDI VÀ DỊCH VỤ COS NAMING TRONG CORBA 79 1.11. MỘT SỐ KỸ THUẬT LẬP TRÌNH PHÂN TÁN VỚI CORBA 92 1.12. CORBA VÀ TRÌNH MÔI GIỚI ORB VISIBROKER 106 4. Chương 1: ỨNG DỤNG LẬP TRÌNH PHÂN TÁN ĐỂ XÂY DỰNG HỆ THỐNG “TRIỂN KHAI THI VÀ CHẤM THI TRẮC NGHIỆM QUA MẠNG LAN” 115 1.1. Đặt vấn đề 115 Trang 1 Khóa luận tốt nghiệp  1.2. Xác định và đặc tả yêu cầu 115 1.3. Thiết kế hệ thống 123 1.4. Một số giao diện của chương trình: 130 Tổng kết đề tài 138 Tài liệu tham khảo 139 Trang 2 Khóa luận tốt nghiệp  Danh mục hình ảnh Hình 1.1-1: Mô hình triệu gọi các đối tượng từ xa 7 Hình 2.2-2: Biểu đồ minh họa hai lớp mô tả giao diện 13 Hình 2.2-3: Kiến trúc phân tầng của RMI 13 Hình 2.2-4: Hoạt động của các thành phần trong kiến trúc RMI 14 Hình 2.2-5: Vai trò của các lớp trung gian stub và skel 15 Hình 2.3-6: Triệu gọi đối tượng RMI Calculator từ xa 18 Hình 2.4-7: Cơ chế làm việc của trình khách và trình chủ trên máy ảo Java22 Hình 2.4-8: Rmiregistry trong mô hình phân tán thực tế 23 Hình 2.4-9: Cơ chế nạp tự động lớp trung gian CalculatorImpl_Stub.class xuống máy khách 26 Hình 2.5-10: Trình chủ và trình khách có thể triệu gọi lẫn nhau 33 Hình 3.1-11: Triệu gọi đối tượng CORBA thông qua trình môi giới trung gian ORB 69 Hình 3.1-12: ORB giao tiếp với đối tượng thông qua các thông tin đặc tả 69 Hình 3.3-13: Cấu trúc cây của dịch vụ COS NAMING trong CORBA 80 Hình 3.4-14: Giao tiếp RMI-Over-IIOP giữa đối tượng trình chủ và trình khách 102 Hình 3.5-15: Cơ chế quản lý đối tượng của CORBA theo đặc tả mới 112 Hình 1.2-16: Ca sử dụng (use-case) quản lý đề thi 117 Hình 1.2-17: Ca sử dụng (use-case) triển khai đề thi 119 Hình 1.2-18: Ca sử dụng (use-case): đăng nhập 120 Hình 1.2-19: Ca sử dụng (use-case) làm bài thi 121 Hình 1.2-20: Ca sử dụng (use-case) xem kết quả thi 122 Hình 1.3-21: Kiến trúc tổng quát của hệ thống 123 Hình 1.3-22: Biểu đồ tuần tự lớp thiết kế thực hiện ca sử dụng soạn đề thi:124 Trang 3 Khóa luận tốt nghiệp  Hình 1.3-23: Biểu đồ tuần tự lớp thiết kế thực hiện ca sử dụng triển khai đề thi: 125 Hình 1.3-24: Biểu đồ tuần tự lớp thiết kế thực hiện ca sử dụng đăng nhập126 Hình 1.3-25:Biểu đồ tuần tự lớp thiết kế thực hiện ca sử dụng làm bài thi 126 Hình 1.3-26: Biểu đồ tuần tự lớp thiết kế thực hiện ca sử dụng xem bài làm127 Hình 1.3-27: Biểu đồ tuần tự lớp thiết kế thực hiện ca sử dụng kết thúc bài làm 127 Hình 1.4-28: Giao diện soạn đề thi 130 Hình 1.4-29: Soạn câu hỏi có hình ảnh 131 Hình 1.4-30: Giao diện đăng nhập của thí sinh 131 Hình 1.4-31: Cảnh báo sai số báo danh 132 Hình 1.4-32: Giao diện bài làm của thí sinh 132 Hình 1.4-33: Cửa sổ khi chọn chức năng xem bài làm 133 Hình 1.4-34: Cảnh báo trước khi kết thúc bài làm 133 Hình 1.4-35: Kết quả bài thi của thí sinh 133 Trang 4 Khóa luận tốt nghiệp  Danh mục từ viết tắt Từ viết tắt Nghĩa của từ CORBA Common Object Request Broker Architecture COS Naming Common Object Services Naming DII Dynamic Invocation Interface IDL Interface Description Language IIOP Interoperate Internet Object Protocol IOR Interoperable Object References JDK Java Development Kit JNDI Java Naming Directory Interface JRMP Java Remote Method Protocol JVM Java Virtual Machine OMG Object Management Group ORB Object Request Broker POA Portable Object Adapter (POA) RMI Remote Method Invoke TCP/IP Transmission Control Protocol/Internet Protocol UDP/IP User Datagram Protocol/Internet Protocol Trang 5 Khóa luận tốt nghiệp  Lý do chọn đề tài Ngôn ngữ lập trình Java do công ty Sun Microsystems phát triển vào đầu thập kỷ 1990. Trải qua hơn 20 năm phát triển, Java thật sự đã lớn mạnh. Hiện tại, Java đã có mặt trong hầu hết các lĩnh vực lập trình với các tên gọi quen thuộc như Java.net, RMI, JDBC, JSP, Servlet, Java Mail, J2ME… Java đang rất được ưu chuộng bởi nhiều đặc điểm nổi bật của nó: - Hướng đối tượng (Object - oriented): Đây là xu hướng lập trình phổ biến nhất hiện nay. - Đa luồng (multithreaded): ngôn ngữ Java cho phép xây dựng trình ứng dụng, trong đó nhiều quá trình có thể xảy ra đồng thời. - Mạnh mẽ (robust): Khả năng mạnh phải phù hợp với thiết kế của ngôn ngữ, và hướng nó vào việc khắc phục những hư hỏng bộ nhớ và đảm bảo tính toàn vẹn dữ liệu. Java làm được điều đó. - Tính động (dynamic): Java động vì nó được thiết kế để đáp ứng với môi trường tác nghiệp luôn trong tình trạng thay đổi. Khi có yêu cầu mới xuất hiện trên thị trường, các loại đối tượng mới có thể được bổ sung vào ngay. - Hiểu mạng (network-savvy): Java được lập ra để hoạt động trên mạng và có các thủ tục để có thể quản lý các giao thức mạng như TCP/IP, FTP và HTTP. - Độc lập với cấu trúc (architecture neutral): Java không phụ thuộc vào hệ máy (platform - loại máy, hệ điều hành) Có thể nói Java xuất hiện đã tạo ra một cuộc cách mạng trong công nghệ phần mềm. Java đang được phát triển từng ngày từng giờ bởi sự lao động không mệt mỏi và tầm nhìn chiến lược của các nhà phát triển nó. Chính vì những ưu điểm đó, bản thân em khi mới tiếp xúc với Java đã thấy yêu thích ngôn ngữ này. Hơn nữa, với ý tưởng bài toán đặt ra ban đầu là xây dựng một ứng dụng qua mạng nên em đã chọn mảng lập trình phân tán trong Java để nghiên cứu và ứng dụng để xây dựng chương trình của mình. Trang 6 Khóa luận tốt nghiệp  PHẦN I: TÌM HIỂU KỸ THUẬT LẬP TRÌNH PHÂN TÁN TRONG JAVA 1. Chương 1: TỔNG QUAN VỀ LẬP TRÌNH PHÂN TÁN 1.1. Lập trình phân tán là gì? Lập trình thông thường trên máy cục bộ: Các đối tượng của chương trình là thủ tục hay hàm được nạp trực tiếp vào bộ nhớ và thực thi ngay trên máy cục bộ. Đối với những hàm có sẵn trong thư viện, người ta không quan tâm đến các hàm này cài đặt và làm việc như thế nào mà chỉ quan tâm đến tham số truyền cho nó và kết quả trả về. Lập trình có sự giao tiếp giữa các máy khác nhau: tức là hai chương trình ở hai máy có thể gọi lẫn nhau. Thực chất của việc giao tiếp này là sự giao tiếp của các phương thức, các phương thức có thể gọi lẫn nhau. Vậy thì làm cách nào cài đặt phương thức ở một máy và thực hiện lời gọi phương thức ở một máy khác? Đó chính là nội dung của lập trình phân tán. Có thể nói: lập trình phân tán là việc lập trình trên các máy khác nhau trong đó các đối tượng của chương trình gồm phương thức và thuộc tính có thể triệu gọi lẫn nhau. Hình 1.1-1: Mô hình triệu gọi các đối tượng từ xa Trang 7 Khóa luận tốt nghiệp  Trong minh họa trên, các đối tượng A1 và A2 ở máy A có thể gọi nhau, B1 và B2 ở máy B cũng vậy, đó là lời gọi cục bộ. Tuy nhiên, đối tượng A1 ở máy A cũng có thể gọi đối tượng C1 ở máy C hay B1 ở máy B cũng có thể gọi C1 ở máy C, đó là những lời gọi từ xa. 1.2. Vấn đề gọi phương thức từ xa Trên máy cục bộ, các phương thức đều được chương trình quản lý và định vị trong vùng nhớ, người lập trình có thể cho phép thực hiện lời gọi một cách bình thường mà không cần quan tâm đến việc chúng giao tiếp với nhau thế nào. Còn các phương thức ở các máy khác nhau hoạt động trên hai tiến trình, không gian địa chỉ khác nhau nên việc truyền tham số, tham chiếu đến địa chỉ của nhau không thể thực hiện thông thường như trong trong cùng một máy được. Lời gọi phương thức cục bộ luôn đưa về kết quả, có nghĩa là luôn thực hiện được trong khi việc gọi các phương thức từ xa có thể không thực hiện được do sự cố mạng. Đối với hàm trên máy cục bộ, tham số truyền cho hàm thường được đưa vào ngăn xếp rồi chương trình sẽ lấy ra để thực hiện trong khi tham số truyền cho hàm ở xa phải được đóng gói và chuyển qua mạng theo giao thức mạng mới đến được nơi cần đến. 1.3. Lập trình phân tán với Java Có nhiều ngôn ngữ hỗ trợ lập trình phân tán, Java là một trong số đó với hai thư viện chuẩn là RMI và CORBA. Thực chất RMI là một cơ chế gọi phương thức từ xa đã được tích hợp trong ngôn ngữ Java. Vì Java là một ngôn ngữ lập trình hướng đối tượng, nên phương pháp lập trình trong RMI là phương pháp hướng đối tượng, do đó các thao tác hay các lời gọi phương thức đều liên quan đến đối tượng. CORBA (Common Object Request Broker Architecture) là đặc tả của OMG (Object Management Group) dành cho việc đạt được tính tương tác giữa các nút tính toán phân tán. Mục tiêu của CORBA là định nghĩa một cấu trúc mà có thể cho phép những môi trường không đồng nhất có thể liên lạc tại mức đối tượng, không Trang 8 Khóa luận tốt nghiệp  quan tâm đến người nào đã thiết kế ra hai điểm cuối của ứng dụng phân tán. Corba là một ngôn ngữ trung lập được thực thi rộng rãi hơn trên các nền platform khác nhau. Corba sử dụng một giao thức gọi là IIOP (Internet Inter-ORB Protocol) để liên lạc giữa các hệ thống khác nhau. Sự khác nhau giữa RMI và CORBA: - RMI là một phần của bộ J2SDK và là các hàm thư viện hỗ trợ các lời gọi phương thức từ xa và trả về giá trị cho các ứng dụng tính toán phân tán. Ở đây ngôn ngữ Java được sử dụng ở cả phía gọi và phía bên phương thức được gọi - CORBA là một chuẩn công nghiệp cho phép gọi các phương thức từ xa và nhận kết quả trả về. Nhưng không giống như RMI, nó có thể được sử dụng khi bên phía gọi và bên phía phương thức được gọi có thể sử dụng các ngôn ngữ lập trình khác nhau, bao gồm cả trường hợp là cả hai bên đều không sử dụng ngôn ngữ Java - RMI là một tập các hàm thư viện đơn giản vì cả hai bên đều sử dụng cùng một ngôn ngữ lập trình và kiến trúc máy. Điều này sẽ làm cho vấn để triệu gọi phương thức từ xa dễ giải quyết hơn. - Bộ phát triển J2SDK cũng hỗ trợ cả RMI và CORBA, cho phép một đối tượng Java gọi một đối tượng CORBA sử dụng hai cách tiếp cận khác nhau. Trang 9 Khóa luận tốt nghiệp  2. Chương 2: LẬP TRÌNH PHÂN TÁN VỚI RMI 1.1. Giới thiệu: RMI (Remote Method Invoke)– triệu gọi phương thức từ xa - là công nghệ được SUN giới thiệu đầu tiên trong JDK 1.1 (2/1997), công nghệ này đã mở ra một thời kì mới cho lĩnh vực lập trình mạng. Mặc dù được thiết kế tương đối dễ sử dụng nhưng RMI cũng là một công nghệ rất mạnh, cung cấp đầy đủ các công cụ để người lập trình có thể phát triển ứng dụng phân tán một cách tốt nhất. Trong JDK 1.1, RMI đã được tạo ra gần như đầy đủ và nó đã được bổ sung hoàn chỉnh hơn trong JAVA 2 SDK. Ở mỗi ứng dụng, chúng ta sẽ thấy được sự khác nhau giữa hai phiên bản này. Mục đích chính của việc thiết kế ra RMI là cho phép người lập trình phát triển các chương trình phân tán bằng Java với cú pháp và ngữ nghĩa giống như lập trình thông thường. Để làm được việc này, họ đã ánh xạ các lớp và đối tượng làm việc trong một máy ảo Java đơn thành các lớp và đối tượng làm việc trong một môi trường phân tán. Trong phạm vi bài khóa luận này, RMI được trình bày theo quan điểm lập trình phân tán các đối tượng từ xa, hành vi của các đối tượng từ xa khác với các đối tượng cục bộ. RMI định nghĩa hành vi của các đối tượng, và vấn đề ta cần quan tâm là các đối tượng từ xa đó có thể thực thi khi nào và như thế nào, bộ nhớ được quản lý ra sao, các thông số được truyền ra sao, kết quả trả về đâu và gọi phương thức từ xa như thế nào… • So sánh lập trình phân tán và phi phân tán trong Java: Các thao tác Đối tượng cục bộ Đối tượng từ xa Định nghĩa đối tượng Được định nghĩa bởi một lớp – class Được định nghĩa bởi interface và phải được kế thừa (extends) từ giao diện Remote interface Trang 10 [...]... là ngoại lệ Runtime hoặc Exceptions Trình dịch java buộc một chương trình phải đảm nhiệm bắt tất cả các ngoại lệ Ngoại lệ RMI buộc các chương trình chịu bất kì ngoại lệ nào của RemoteException đưa ra Điều này sẽ làm cho các việc ném ngoại lệ của các ứng dụng phân tán được bảo đảm Bảng so sánh lập trình phân tán và phi phân tán trong Java 1.2 Kiến trúc RMI 2.1.1 Giao diện (interface) - trái tim của RMI:... ban đầu và đưa vào sử dụng Quá trình đóng gói tham số trên máy khách để chuyển đi được thực hiện bởi lớp trung gian Stub Ngược lại, quá trình mở gói dữ liệu để khôi phục tham số diễn ra trên máy chủ được thực hiện bởi lớp trung gian Skel Quy trình chuyển tham số và dữ liệu qua lại giữa hai lớp trung gian Stub và Skel trong thuật ngữ lập trình phân tán gọi là mashaling data Trong các lời gọi phương thức... không? Có nghĩa là trình chủ được trình khách truy xuất từ xa thì trình khách cũng được trình chủ truy xuất từ xa Hình 2.5-10: Trình chủ và trình khách có thể triệu gọi lẫn nhau Như trên đã nói, với Java, các đối tượng nếu cài đặt giao diện Remote sẽ có khả năng được truyền qua mạng theo tham biến Cơ chế gọi ngược từ xa từ trình chủ đến trình khách còn được gọi là cơ chế callback  Chương trình minh họa... tả hành vi tách rời nhau và chạy trên các máy ảo Java độc lập Điều cần làm của hệ thống phân tán là ở máy khách sẽ định nghĩa dịch vụ mong muốn và máy chủ là nơi cung cấp các dịch vụ đó Trong RMI, việc định nghĩa một dịch vụ từ xa được viết bằng interface trong Java Mô tả chi tiết dịch vụ từ xa được viết bằng một lớp - class Do đó, yếu tố chính cần hiểu trong RMI là: các giao diện định nghĩa hành vi... trường(environment variable) được sử dụng bởi Java compiler và JVM để tìm kiếm các lớp cần thiết cho quá trình biên dịch (compile) và thông dịch(interpret) Khi chạy chương trình, Java dựa vào biến môi trường CLASSPATH để truy tìm các tập tin class Nếu CLASSPATH chỉ sai đường dẫn, chương trình sẽ thông báo lỗi: java. lang.ClassNotFoundException: ClassName Trong ví dụ ứng dụng RMI đơn giản trên, ta có các lớp sau:... và SKELETON) Như trên đã nói, việc gọi các phương thức từ xa là không giống như gọi các phương thức thông thường trong cùng một máy Vì thế, trong lập trình phân tán, cơ chế gọi từ xa là các đối tượng trên hai máy khác nhau không gọi trực tiếp lẫn nhau mà thông qua lớp trung gian Người lập trình không cần phải quan tâm lớp trung gian này chứa gì và làm việc ra sao Lớp trung gian này sẽ đón đầu các lời... đăng ký và truy xuất rmiregistry: Hình 2.4-7: Cơ chế làm việc của trình khách và trình chủ trên máy ảo Java Trang 22 Khóa luận tốt nghiệp  Đối tượng trên máy ảo Java B dùng hàm Naming.bind() hoặc hàm Naming.rebind() để đăng ký đối với tượng với chương trình rmiregistry đang chạy trên máy ảo Java A Chương trình khách chạy trên máy ảo Java C dùng hàm Naming.lookup() để yêu cầu bộ quản lý rmiregistry... trên mạng giữa trình khách và trình chủ, cho nên lớp Ball được khai báo là có khả năng tuần tự hóa Bước 2: Đặc tả interface cho đối tượng trên máy chủ //PingServer .java import java. rmi.*; interface PingServer extends Remote { public Ball ping(Ball b) throws RemoteException; } Đối tượng PingServer được đặt trên trình chủ Phương thức ping() của đối tượng này sẽ được gọi bởi trình khách Trình khách sử... send a ball objectweight” + b.getWeight()); b.setWeight(b.getWeight()+15); return b; } } Trình chủ tiếp nhận quả bóng từ trình khách và tăng trọng lượng của nó lên, sau đó trả về cho trình khách Bước 4: cài đặt chương trình điều khiển trên server //Setup .java Trang 30 Khóa luận tốt nghiệp  import java. rmi.*; import java. rmi.server.*; class Setup { public static void main(String args[]) throws Exception{... chương trình: - Để đơn giản, ta gom tất cả các lớp vào một thư mục, ở đây là E:\Luanvan\EXAM\Ball Trang 31 Khóa luận tốt nghiệp  - Tiến hành biên dịch các lớp: - Tạo ra stub, chạy rmiregistry: - Chạy trình chủ: - Chạy trình khách: Kết quả cho thấy: trong trình khách, đối tượng Ball tại Client trước và sau gọi phương thức ping() vẫn giữa nguyên giá trị là 12 Trong khi đó đối tượng Ball đưa lên trình . I: TÌM HIỂU KỸ THUẬT LẬP TRÌNH PHÂN TÁN TRONG JAVA 1. Chương 1: TỔNG QUAN VỀ LẬP TRÌNH PHÂN TÁN 7 1.1. Lập trình phân tán là gì? 7 1.2. Vấn đề gọi phương thức từ xa 8 1.3. Lập trình phân tán. chương trình của mình. Trang 6 Khóa luận tốt nghiệp  PHẦN I: TÌM HIỂU KỸ THUẬT LẬP TRÌNH PHÂN TÁN TRONG JAVA 1. Chương 1: TỔNG QUAN VỀ LẬP TRÌNH PHÂN TÁN 1.1. Lập trình phân tán là gì? Lập trình. 37 1.7. MỘT SỐ KỸ THUẬT LẬP TRÌNH PHÂN TÁN VỚI RMI 41 3. CHƯƠNG 3: LẬP TRÌNH PHÂN TÁN VỚI CORBA 65 1.8. TỔNG QUAN VỀ CORBA 65 1.9. XÂY DỰNG ỨNG DỤNG CORBA TRONG MÔI TRƯỜNG JAVA 72 1.10. TÌM HIỂU JNDI
- Xem thêm -

Xem thêm: TÌM HIỂU KỸ THUẬT LẬP TRÌNH PHÂN TÁN TRONG JAVA, TÌM HIỂU KỸ THUẬT LẬP TRÌNH PHÂN TÁN TRONG JAVA, Chương 1: TỔNG QUAN VỀ LẬP TRÌNH PHÂN TÁN, Chương 2: LẬP TRÌNH PHÂN TÁN VỚI RMI, CHƯƠNG 3: LẬP TRÌNH PHÂN TÁN VỚI CORBA, Chương 1: ỨNG DỤNG LẬP TRÌNH PHÂN TÁN ĐỂ XÂY DỰNG HỆ THỐNG “TRIỂN KHAI THI VÀ CHẤM THI TRẮC NGHIỆM QUA MẠNG LAN”

Mục lục

Xem thêm