Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 108 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
108
Dung lượng
1,39 MB
Nội dung
Đại Học Quốc Gia Tp Hồ Chí Minh TRƯỜNG ĐẠI HỌC BÁCH KHOA PHAN ĐÌNH HẢI SƠN POPJAVA THƯ VIỆN LẬP TRÌNH CHO ỨNG DỤNG SONG SONG VÀ ỨNG DỤNG LƯỚI Chuyên ngành: Khoa học máy tính LUẬN VĂN THẠC SĨ TP HỒ CHÍ MINH, tháng 12 năm 2008 i TRƯỜNG ĐẠI HỌC BÁCH KHOA CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM PHÒNG ĐÀO TẠO SĐH ĐỘC LẬP – TỰ DO – HẠNH PHÚC Tp HCM, ngày 07 tháng 12 năm 2008 NHIỆM VỤ LUẬN VĂN THẠC SĨ Họ tên học viên: PHAN ĐÌNH HẢI SƠN Phái: Nam Ngày, tháng, năm sinh: 15-08-1983 Nơi sinh: TP HCM Chuyên ngành: MSHV: 00706145 I- TÊN ĐỀ TÀI: POPJava - thư viện lập trình cho ứng dụng song song ứng dụng lưới II- NHIỆM VỤ VÀ NỘI DUNG: Xây dựng thư viện lập trình cho ứng dụng song song ứng dụng lưới dựa ngôn ngữ Java Thư viện có khả sử dụng run-time service POPC++ system để chạy ứng dụng Ứng dụng sử dụng thư viện POPJava có khả giao tiếp với ứng dụng xây dựng POP-C++ ngược lại III- NGÀY GIAO NHIỆM VỤ: 01/2008 IV- NGÀY HOÀN THÀNH NHIỆM VỤ: 12/2008 V- CÁN BỘ HƯỚNG DẪN: TS Nguyễn Tuấn Anh CÁN BỘ HƯỚNG DẪN CN BỘ MÔN (Học hàm, học vị, họ tên chữ ký) QL CHUYÊN NGÀNH TS Nguyễn Tuấn Anh TS Đinh Đức Anh Vũ Nội dung đề cương luận văn thạc sĩ Hội đồng chuyên ngành thông qua Ngày tháng năm TRƯỞNG PHÒNG ĐT – SĐH TRƯỞNG KHOA QL NGÀNH ii CƠNG TRÌNH ĐƯỢC HỒN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH Cán hướng dẫn khoa học: TS Nguyễn Tuấn Anh Cán chấm nhận xét 1: Cán chấm nhận xét 2: Luận văn thạc sĩ bảo vệ HỘI ĐỒNG CHẤM BẢO VỆ LUẬN VĂN THẠC SĨ TRƯỜNG ĐẠI HỌC BÁCH KHOA, ngày tháng năm iii LỜI CAM ĐOAN Tôi cam đoan rằng, ngoại trừ kết tham khảo từ cơng trình khác ghi rõ luận văn, cơng việc trình bày luận văn tơi thực chưa có phần nội dung luận văn nộp để lấy cấp trường trường khác Ngày 07 tháng 12 năm 2008 Phan Đình Hải Sơn iv LỜI CẢM ƠN Tôi xin gởi lời cảm ơn chân thành sâu sắc đến TS Nguyễn Tuấn Anh, người Thầy tận tình hướng dẫn tơi suốt trình thực luận văn cao học tạo điều kiện để tơi hồn thành luận văn Tôi xin cảm ơn gia đình động viên tạo điều kiện tốt để tơi tiếp tục theo đuổi việc học tập nghiên cứu Tôi trân trọng dành tặng thành luận văn cho Cha Mẹ Nhờ công lao dưỡng dục Người mà chúng có thành ngày hôm Con xin hứa tiếp tục cố gắng phấn đấu để vươn cao Tơi gởi lịng tri ân đến tất bạn bè, người động viên, thăm hỏi có giúp đỡ thiết thực giúp tơi hồn tất luận văn v TĨM TẮT ĐỀ TÀI POP-C++ nhiều cơng cụ lập trình lưới xây dựng đưa vào sử dụng POP-C++ System xây dựng service hỗ trợ việc tìm kiếm cấp phát tài nguyên phù hợp với yêu cầu ứng dụng Tuy nhiên, môi trường lưới môi trường bất đồng cấu hình phần cứng, platform việc phát triển ứng dụng ngôn ngữ C++ không thực dễ dàng Thư viện POPJava xây dựng ngôn ngữ Java nhằm đảm bảo ứng dụng tương thích với nhiều loại tài ngun POPJava sử dụng lại runtime service POP-C++ để tận dụng khả tìm kiếm cấp phát tài nguyên phù hợp POP-C++ POPJava giúp người lập trinh xây dựng ứng dụng có khả giao tiếp với ứng dụng xây dựng POP-C++ Do đó, người lập trình xây dựng ứng dụng bao gơm phần phát triển POPJava để phát triển nhanh chóng phần phát triển POP-C++ nhằm đảm bảo performance vi ABSTRACT POP-Java programming tool, which is developed as a Java library provides a Java-based implementation of parallel objects The POP-Java applications can use the existing runtime service of POP-C++ for deploying and running its components over the Grid Moreover, some performance-critical parts of POP-Java applications can also be implemented by POP-C++ vii MỤC LỤC NHIỆM VỤ LUẬN VĂN THẠC SĨ i LỜI CAM ĐOAN iii TÓM TẮT ĐỀ TÀI v ABSTRACT vi MỤC LỤC vii DANH SÁCH HÌNH VẼ xi Chương 1: GIỚI THIỆU ĐỀ TÀI 1.1 Tổng quan ”Grid Computing” 1.2 Cơng cụ lập trình môi trường lưới 1.3 Nhu cầu lập trình hướng đến chất lượng dịch vụ 1.4 Lý thực đề tài 1.5 Mục tiêu giới hạn đề tài 1.5.1 Mục tiêu 1.5.2 Phạm vi đề tài: 1.6 Cấu trúc luận văn Chương 2: CƠ SỞ LÝ THUYẾT 2.1 Định nghĩa “Grid Computing” 2.2 So sánh Grid hệ thống siêu máy tính thơng thường (super computer, cluster) 2.3 Phân loại “Grid Computing” 2.3.1 Computational grid 2.3.2 Scavenging grid 2.3.3 Data grid 2.4 Các thành phần môi trường Grid Computing 2.4.1 Portal/user interface 2.4.2 Security 2.4.3 Broker 10 2.4.4 Scheduler 11 viii 2.4.5 Data management 12 2.4.6 Job resource management 12 2.4.7 Các chức khác 13 2.5 Ngơn ngữ lập trình cho Grid computing 13 Chương 3: PARALLEL OBJECT MODEL 16 3.1 Các đối tượng chia sẻ phân tán 16 3.2 Các yêu cầu tài nguyên 17 3.3 Các ngữ nghĩa gọi hàm (method invocation semantics) 17 3.3.1 Ngữ nghĩa phía gọi method có ngữ nghĩa sau 18 3.3.2 Ngữ nghĩa phía thực thi đối tượng có ngữ nghĩa sau: 18 3.4 POP-C++ programming language 19 3.4.1 Parclass method declarations and invocations 20 3.4.2 Object description 21 3.4.3 Object events 22 3.4.4 Mutual exclusive execution 22 3.4.5 Chương trình ví dụ 22 Chương 4: MỘT SỐ CÔNG CỤ LẬP TRÌNH GRID COMPUTING KHÁC 25 4.1 Proactive 25 4.1.1 Developer Tools & IDE 26 4.1.2 Programming / Composing 26 4.1.3 Deployment & Virtualization 26 4.1.4 Services 27 4.1.5 Chương trình ví dụ 27 4.2 OmniRPC 29 4.2.1 Chương trình ví dụ OmniRPC: 31 4.2.2 Môi trường thực thi 31 4.2.3 Sử dụng OmniRPC agent để thực thi chương trình 32 4.2.4 Viết chương trình thực thi máy xa (remote host) 32 4.2.5 Đăng kí chương trình thực thi xa 33 4.2.6 Chương trình Client 34 ix Chương 5: POPJava PROGRAMMING 36 5.1 Các component lúc runtime POPJava++ 37 5.2 Sự mở rộng POPJava từ Java 37 5.3 Kiến trúc POPJava 38 5.4 DataSwaper 42 5.5 POPObject 44 5.6 Protocol 46 5.6.1 Combox Server 46 5.6.2 Combox 47 5.6.3 ComboxSocket 48 5.7 Encoding 50 5.8 Service Adapter 54 5.9 Broker 56 5.10 Interface 58 5.11 POPJavaFactory 61 5.11.1 POPJavaFactory 61 5.11.2 Class PJProxyFactory 63 5.11.3 Class PJMethodFilter 63 5.12 Protocol Plugin 63 5.13 Encoding Plugin 65 5.14 Object Decsription: 68 5.15 Quy trình khởi tạo parallel object: 69 5.16 Lập trình với POPJava 72 Chương 6: ĐÁNH GIÁ POPJava 77 6.1 Khả tương thích với nhiều platform POPJava 77 6.2 Khả tương thích POPJava với POP-C++ 77 6.3 Tốc độ truyền liệu POPJava 78 6.4 Hạn chế POPJava 81 Chương 7: KẾT LUẬN 83 7.1 Những đóng góp đề tài 83 7.2 Hướng phát triển 84 Chương 6: Đánh giá POPJava Trang 81 Tốc độ truyền liệu object POPJava khơng tốt lần invoke method, POPJava cần duyệt danh sách method POPJava class, kiểm tra kiểu thơng số Ngồi ra, ngơn ngữ Java, việc copy float array int array vào buffer tốn thời gian gấp mưới lần việc copy char array vào buffer Việc ảnh hưởng lớn đến performance hệ thống 6.4 Hạn chế POPJava 6.4.1.1 Hạn chế mơ hình parallel object model Do mơ hình parallel object model định nghĩa ngữ nghĩa, request tương ứng với lời gọi hàm, nên parallel class không chứa thuộc tính public Nếu người dùng cố tình tạo thuộc tính public parallel class, tất thay đổi giá trị thuộc tính khơng cập nhật đối tượng xa Các đối tượng parallel object tồng rải rác nhiều máy tính nên parallel class khơng chứa thuộc tính static Chúng ta khơng thể có cách cập nhật tất giá trị cho thuộc tính static tất máy tính, nằm ngồi tầm vực máy tính nên khơng thể biết có đối tượng parallel object tồn môi trường lưới Khi gọi hàm asynchronous, lấy giá trị trả thấy thay đổi tham số non-primitive 6.4.1.2 Hạn chế POPJava programming Thư viện POPJava chưa hỗ trợ người dùng khai báo hồn tốn tử cộng, trừ, nhân, chia… Hiện tại, hệ thống exception POPJava chưa hoàn chỉnh, chưa xử lý exception người dùng định nghĩa Khi có lỗi xảy ra, POPJava trả Exception chung chưa cho biết xác lỗi Ví dụ chương trình có lỗi IO hàm myFunction, POPJava trả cho người dùng exception POPException chứa thông điệp “Exception when invoke method myFunction” Chương 6: Đánh giá POPJava Trang 82 Tuy nhiên, có hàm có ngữ nghĩa synchronous có khả nhận exception POPJava sử dụng class ByteBuffer BufferRaw để lưu trữ thơng số lời gọi hàm ByteBuffer lưu trữ liệu kiểu byte byte array hiệu quả, không hiệu kiểu liệu khác long, int, object… Việc serialize liệu kiểu array không hiệu Java không cung cấp hàm tương tự hàm memcpy C++ POPJava sử dụng reflection để chuyển lời gọi hàm thành request gửi Interface Broker Do đó, số trường hợp, POPJava khơng thể phát lỗi trình biên dịch Hãy xem hàm Constructor sau: public MyInteger(int value); Tuy nhiên người dùng sử dụng POPJava để tạo parallel object, quên không truyền tham số value sau MyInteger myInteger=(MyInteger)POPJava.newActive(MyInteger.class); Khi đó, chương trình biên dịch thành cơng, lỗi xảy chương trình thực thi 6.4.1.3 Hạn chế tham số lời gọi hàm Đối với liệu thuộc kiểu primitive int, long, char… array nó, POPJava tự động serialize deserialize chúng Tuy nhiên, với liệu kiểu object, POPJava tự động serialize deserialize chúng chúng thực interface IPOPBase interface IPOPBaseInput thừa kế từ class POPObject Đối với liệu kiểu khác, POPJava trả exception POPException với mã lỗi POPErrorCode.REFLECT_SERIALIZE_EXCEPTION 6.4.1.4 Hạn chế performance: Như thấy phần 6.3, tốc độ truyền liệu object POPJava chậm mười lần so với tốc độ truyền liệu object POP-C++ Chương 7: Kết luận Trang 83 Chương KẾT LUẬN 7.1 Những đóng góp đề tài Đề tài xây dựng framework hỗ trợ người dùng phát triển ứng dụng lưới cách dễ dàng Người dùng phát triển, ứng dụng song song ứng dụng Sau unit test cách cẩn thận, để chuyển ứng dụng thành ứng dụng song song, người dùng cần sửa đổi chút phần khởi tạo đối tượng cách sử dụng POPJavaFactory thay khởi tạo trực tiếp toán tử new Bằng cách xây dựng Buffer Combox plugin, POPJava cho phép người dùng định nghĩa thêm kiểu mã hố liệu kiểu truyền liệu object Do người dùng xây dựng lựa chọn kiểu mã hoá truyền liệu thích hợp cho ứng dụng POPJava đưa khả giao tiếp với POP-C++, cho phép người dùng có thêm lựa chọn phát triển ứng dụng Người dùng chọn POP-C++ để đảm bảo performance chọn POPJava để sử dụng thư viện Java nhằm phát triển ứng dụng dễ dàng Ngồi ứng dụng người dùng sử dụng POPJava POP-C++ POPJava sử dụng run-time service POP-C++, đáp ứng khả lựa chọn tài nguyên phù hợp với ứng dụng người dùng Người dùng đặc tả yêu cầu tài nguyên run-time service POP-C++ tìm tài ngun thích hợp, qua cải thiện hiệu suất ứng dụng Chương 7: Kết luận Trang 84 7.2 Hướng phát triển POPJava có khả giúp người dùng phát triển ứng dụng lưới cách dễ dàng, sử dụng ngôn ngữ Java, ngôn ngữ quen thuộc đủ mạnh để phát triển ứng dụng đa dạng Tuy nhiên, để POPJava trở thành cơng cụ hồn chỉnh để phát triển ứng dụng lưới, nhiều vấn đề cần phải giải plugin hỗ trợ IDE, công cụ để debug từ xa Khi phát triển ứng dụng lưới, firewall trở ngại lớn khó vượt qua Trong đó, tài ngun tham gia vào mơi trường lưới có cài đặt firewall để đảm bảo tính bảo mật Hiện nay, sử dụng protocol Socket, parallel object POPJava chiếm giữ port Nếu tài nguyên đặt firewall, POPJava parallel object liên lạc với nhau: ObjectA Firewal ObjectB Firewal Firewal Hình 7.1: Vấn đề Firewall ObjectC Chương 7: Kết luận Trang 85 Để giải vấn đề liên quan tới firewall, mở rộng POPJava theo sơ đồ sau: Interface BrokerProxy Port=DynamicPort Broker Port=FixPort Port=DynamicPort Broker POPObject POPObject Hình 7.2: Phương án để vượt qua Firewall Tài liệu tham khảo Trang 86 TÀI LIỆU THAM KHẢO Enabling Applications for Grid Computing with Globus Bart Jacob-Luis Ferreira-Norbert Bieberstein-Candice Gilzean-Jean-Yves Girard-Roman Strachowski-Seong (Steve) Yu F Berman, G Fox, T Hey- Grid Computing - Making The Global Infrastructure a Reality (Wiley, 2003) Paper Programming the Grid with POP-C++ Tuan-Anh Nguyen, Pierre Kuonenb Project Proactive in http://proactive.inria.fr/release-doc/html/index.html POP-C++ Developer Documentation - Tuan-Anh Nguyen Quanlity of Service in Global Grid computing – Luca Valcarenghi OmniRPC: A Grid RPC Facility for Cluster and Global Computing in OpenMP - Mitsuhisa Sato, Motonari Hirano, Yoshio Tanaka, and Satoshi Sekiguchi Project Javaassist at http://www.csg.is.titech.ac.jp/~chiba/javassist/ Phụ lục B Trang 87 PHỤ LỤC A Hướng dẫn xây dựng ứng dụng với POP-C++ POPJava Chạy chương trình POPJava Sau biên dịch chương trình java compiler, người dùng chạy ứng dụng viết POPJava tương tự như chạy ứng dụng bình thường Object POPJava gọi Object POPJava Người dùng cần đặc tả thông tin file thực thi ứng dụng POPJava file xml có dạng sau: test.MyInteger /data/JarFile/test.jar *-* Và sử dụng command sau để chạy ứng dụng: >Java TestMyInteger -codeconf=codeconfiglocation Object POPJava gọi Object POP-C++ Để xây dựng úng dụng POPJava có sử dụng Ojbect POP-C++, người dùng cần định nghĩa class tương ứng với class Object POP-C++ đó, đơn khai báo hàm, không cần thực Phụ lục B Trang 88 Ví dụ, ta có parallel class POP-C++ sau: parclass LinuxInteger { classuid(1002); public: LinuxInteger() @{ od.power(100, 10); }; seq async void Set(int val); conc int Get(); mutex void Add(LinuxInteger &other); private : int data; }; Để object POPJava gọi object này, người dùng cần phải định nghĩa class rỗng thừa kế từ class POPObject: public class LinuxInteger extends POPObject { Vì POPJava khơng sử dụng từ khoá mở rộng để định nghĩa ngữ nghĩa method, mà sử dụng hàm addSemantic để thiết lập ngữ nghĩa cho hàm, nên hàm Constructor class LinuxInteger, người dùng cần khai báo ngữ nghĩa hàm tương ứng sau: addSemantic(c,"add", Semantic.Mutex | Semantic.Asynchronous); addSemantic(c,"get", Semantic.Concurrent|Semantic.Synchronous); addSemantic(c,"set", Semantic.Sequence|Semantic.Asynchronous); Để đặc tả yêu cầu tài nguyên cho đối tượng thuộc class LinuxInteger, người dùng cần sử dụng thuộc tính OjbectDescription od, thiết lập yêu cầu tài nguyên tương ứng: Od.setPower(100,10); Phụ lục B Trang 89 Công việc cuối người dùng cần làm hàm Constructor class LinuxInteger khai báo class Id class name class LinuxInteger, gọi hàm initializePOPObject: setClassId(1002); setClassName("LinuxInteger"); Class c = LinuxInteger.class; initializePOPObject(c); Tất hàm khác class LinuxInteger để trống, khai báo sau: public void add(LinuxInteger myInteger) { } public int get() { return 0; } public void set(int value) { } Sau biên dịch chương trình, người dùng cần đặc tả thơng tin file thực thi class LinuxInteger file codeinfo.xml sau: test.MyInteger /data/linuxinteger.obj i686-linux Sau chương trình ví dụ cho POPJava gọi object POP-C++, thực khơng khác chương trình POPJava gọi object POPJava: Phụ lục B Trang 90 public static void main(String argvs) throws POPException{ POPSystem.initialize(argvs); // Start your code LinuxInteger first,second; first=(LinuxInteger)PopJava.newActive(LinuxInteger.class); first.set(10); second= (LinuxInteger) PopJava.newActive(LinuxInteger.class); second.set(20); first.add(second); int value = first.get(); System.out.format("Getting value:%s\r\n", value); System.exit(0); } Để chạy chương trình, người dùng sử dụng command line sau: >Java cp TestLinuxInteger -codeconf=codeconfiglocation Object POP-C++ gọi Object POPJava Giả sử, ta có prarallel class MyInteger ví dụ trên, để xây dựng chương trình POP-C++ gọi object thuộc class MyInteger, ta cần khai báo class MyInteger rỗng bên POP-C++ sau: parclass MyInteger { public: MyInteger (); seq async void Set(int val); conc int Get(); mutex void Add(MyInteger &other); }; Phụ lục B Trang 91 Và tất nhiên, để biên dịch chương trình thành cơng, ta phải thực hàm khai báo phía cách đơn giản sau: MyInteger::MyInteger() { } void MyInteger::Set(int val) { } int MyInteger::Get() { return 0; } void MyInteger::Add(Integer &other) { } Hàm main chương trình POP-C++ gọi object POPJava khơng khác hàm main chương trình POP-C++ gọi object POP-C++: int main(int argc, char *argv[]) { Integer o1,o2; o1.Set(1); o2.Set(2); o1.Add(o2); printf("Value=%d",o1.Get()); Sau } biên dịch chương trình, người dùng cần đặc tả file codeinfo sau: Integer i686-pc-Linux java Broker codelocation= /data/test.jar -actualobject=test.MyInteger Chúng ta cần khai báo actualobject=test.MyInteger tên thực class MyInteger bên POPJava test.MyInteger với test tên package chứa class MyInteger Phụ lục B Trang 92 PHỤ LỤC B Javassist Để làm việc sinh POPObjectStub thời gian thực thi, POPJavaFactory sử dụng gói javassist, hỗ trợ việc chỉnh sửa class thời gian thực thi Reading writing bytecode Javassist thư viện có khả thao tác mã byte code Java Mã bytecode Java lưu trữ file nhị phân gọi class file Mỗi class file chứa class Java interface Class Javassist.CtClass abstract class tương ứng với class file, dùng để thực thao tác class file Hãy xem qua đoạn chương trình đơn giản sau đây: ClassPool pool = ClassPool.getDefault(); CtClass cc = pool.get("test.Rectangle"); cc.setSuperclass(pool.get("test.Point")); cc.writeFile(); Đoạn chương trình sử dụng đối tượng ClassPool lưu lại tất CtClass, dùng để lưu trữ, điều khiển tất thao tác thay đổi mã byte code Javassist Nó đọc class file, lấy thơng tin class định nghĩa class file để khởi tạo CtClass Để thay đổi cấu trúc đặc tính class, người dùng phải sử dụng hàm get ClassPool để khởi tạo CtClass Như đoạn chương trình lời gọi hàm pool.get(“test.Rectangle”) trả CtClass tương ứng với class test.Rectangle ClassPool.getDfault() trả ClassPool nắm giữ thông tin tất class file có search path Java Phụ lục B Trang 93 Về bản, ClassPool thực chất hash table chứa đối tượng CtClass, khố class name Hàm get ClassPool đơn giản tìm kiếm hash table để tìm CtClass tương ứng Trong trường hợp khơng tìm CtClass tương ứng, ClassPool đọc class file class tìm kiếm, khởi tạo CtClass thêm vào hash table Khi có đối tượng CtClass, người dùng sửa đổi class Ở ví dụ đây, đoạn mã thay đổi class cha test.Rectangle thành test.Point Sự thay đổi có tác dụng hàm writeFile CtClass gọi Hàm writeFile biên dịch CtClass thành class file ghi lên đĩa cứng Javassist cung cấp hàm toBytecode để lấy mã byte code CtClass sửa đổi byte[] b = cc.toBytecode(); Để sử dụng class sửa đổi đó, người dùng gọi hàm toClass sau: Class clazz = cc.toClass(); Định nghĩa class thời gian chạy: Để định nghĩa class thơ, người dùng gọi hàm makeClass ClassPool sau: ClassPool pool = ClassPool.getDefault(); CtClass cc = pool.makeClass("Point"); Chương trình định nghĩa class Point trống Để định nghĩa hàm cho class Point này, người dùng sử dụng factory method định nghĩa class CtNewMethod thêm vào class Point cách sử dụng hàm addMethod class CtClass Hàm makeClass tạo interface, để tạo interface, người dùng phải gọi hàm makeInterface ClassPool sử dụng hàm abstractMethod CtNewMethod để thêm vào hàm cho Interface tạo Phụ lục B Trang 94 ProxyFactory ProxyFactory sử dụng class CtClass, CtNewMethod, ClassPool để sinh class thừa kế từ class ban đầu thực interface ban đầu Tất lời gọi hàm class sinh chuyển qua hàm invoke class gọi Method Handler tương ứng với Hãy xem đoạn chương trình sau: ProxyFactory f = new ProxyFactory(); f.setSuperclass(Foo.class); MethodHandler mi = new MethodHandler() { public Object invoke(Object self, Method m, Method proceed,Object[] args) throws Throwable { System.out.println("Name: " + m.getName()); return proceed.invoke(self, args); }}; f.setFilter(new MethodFilter() { public boolean isHandled(Method m) { // ignore finalize() return !m.getName().equals("finalize"); } }); Class c = f.createClass(); Foo foo = (Foo)c.newInstance(); ((ProxyObject)foo).setHandler(mi); Khi đó, lời gọi hàm foo.bar chuyển qua methodHandler mi in thông điệp trước thực lời gọi hàm gốc bar class Foo Ba dòng cuối đoạn chương trình tương đương với dịng lệnh sau: Foo foo = (Foo)f.create(new Class[0], new Object[0], mi); Phụ lục B Trang 95 Cũng thay method handler thời gian thực thi dòng lệnh sau: MethodHandler mi2 = ; // another handler ((ProxyObject)foo).setHandler(mi2); MethodHandler thiết lập cho tồn object thay thiết lập cho object cách sau: ProxyFactory f2 = new ProxyFactory(); f2.setSuperclass(Foo.class); f2.setHandler(mi); Class c2 = f2.createClass(); // set the default handler ... ĐỀ TÀI: POPJava - thư viện lập trình cho ứng dụng song song ứng dụng lưới II- NHIỆM VỤ VÀ NỘI DUNG: Xây dựng thư viện lập trình cho ứng dụng song song ứng dụng lưới dựa ngôn ngữ Java Thư viện có... class POPJava class Java bình thư? ??ng kế thừa từ class ParocObject Người lập trình sử dụng class cho chương trình thơng thư? ??ng Để sử dụng chương trình song song, người lập trình cần phải sử dụng POPjavaProxy... hợp cho ứng dụng Đề tài xây dựng thư viện POPJava ngôn ngữ Java nhằm giúp đỡ việc phát triển ứng dụng mơi trường lưới Vì thư viện phát triển ngôn ngữ Java nên ứng dụng sử dụng thư viện tất nhiên