1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố

124 1,5K 7

Đ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

Thông tin cơ bản

Định dạng
Số trang 124
Dung lượng 8,71 MB

Nội dung

1 Khái niệm chung Để hiểu được mô hình một cách rõ ràng hơn trong phần giải thích hoạt động của hệ thống chúng ta cần giải thích một số thuật ngữ. Hệ thống chúng ta bao gồm nhiều hệ thống con hợp lại, mỗi hệ thống con có một Agent Object đóng vai trò là người quản lý toàn bộ hệ thống con đó và cụ thể là các Server trong hệ thống con đó, do đó lúc này các Server đó được gọi là Server nội bộ so với Agent Object quản lý nó. Trong mô hình này Service là một Remote Object có Remote Method, Remote Method này cho phép gọi từ xa và nó sẽ chính là hàm thực thi nhiệm vụ của dịch vụ đó. 2 Giải thích mô hình Mô hình sử dụng là mô hình gồm các phần tử Agent, các Server, Admin. Mô hình này khá quen thuộc nhưng tuỳ vào yêu cầu cụ thể của đề tài cũng như công cụ sử dụng để hiện thực mà việc thiết kế cụ thể khác nhau. Yêu cầu của đề tài là xây dựng một môi trường hỗ trợ tính toán song song và phân bố. Mô hình được thiết kế thành một hệ thống có các phần tử Agent đảm nhận nhiệm vụ đại diện hệ thống giao tiếp với Client , các Server, cũng như Admin. Hệ thống xây dựng theo mô hình này sẽ được quản lý chặt chẽ, dễ kiểm soát hoạt động của hệ thống cũng như việc sử dụng hệ thống của client. Tuy nhiên, hệ thống này được yêu cầu giải quyết những vấn đề tính toán lớn, nên việc phân chia công việc, đợi kết quả trả về từ các Service, tổng hợp kết quả là một nhiệm vụ khá nặng và tốn khá nhiều thời gian. Tóm lại, Agent này sẽ đảm nhận nhiệm vụ rất lớn, dễ xảy ra trường hợp quá tải và bị fail. Để hạn chế bớt phần nào vấn đề này,hệ thống sẽ được chia nhỏ ra thành các hệ thống con . Mỗi hệ thống con này do một Agent đứng ra quản lý. Khi một Agent fail thì không ảnh hưởng lên toàn bộ hệ thống. Ngoài mục đích trên, việc hệ thống có nhiều Agent cũng nhằm mục đích chuyên môn hóa các dịch vụ (nghĩa là một Agent quản lý một số dịch vụ mang tính chất gần giống nhau) , cũng chính điều này sẽ giải quyết phần nào vấn đề thắt nút cổ chai cho hệ thống. Đối với hệ thống nhiều Agent này, Client sẽ tùy vào tính chất dịch vụ nào mà yêu cầu đến những Agent đảm nhiệm những dịch vụ đó. Trong trường hợp Client yêu cầu tới một Agent bất kỳ, nếu nó không quản lý dịch vụ đó thì sẽ chuyển yêu cầu qua cho Agent có đúng chức năng để phân chia công việc cho Server. Mô hình chia thành nhiều hệ thống con còn hướng đến việc phát triển một hệ thống trên mạng WAN vì cơ chế RMI cho phép gọi hàm từ xa dễ dàng chỉ yêu cầu có kết nối với nhau dù trên mạng LAN hay WAN

Trang 1

Lời cảm ơn

Kính gởi lời cảm ơn chân thành nhất đến thầy Trương Hồng Lĩnh, người đã tận tình hướng dẫn, giúp đỡ để đề tài luận văn này được hoàn thành

Xin trân trọng cảm ơn thầy Lê Nam Hiến đã nhiệt tình chỉ dẫn chúng em trong giai đoạnthực tập tốt nghiệp

Xin gởi lời cảm ơn thương yêu nhất đến gia đình đã rất quan tâm và khuyến khích trongsuốt thời gian thực hiện đề tài tốt nghiệp này

Cũng xin cảm ơn tất cả các thầy cô đã nhiệt tâm giảng dạy và những bạn bè đã gắn bó,hỗ trợ chúng tôi

Nguyễn Thanh Bình Nguyễn Thị Thu Hiền

Trang 2

Giới thiệu đề tài

Chương trình hiện thực còn phục vụ được nhu cầu cần có một cơ chế truy xuất và quảnlý hiệu quả các tài nguyên tính toán trên mạng Ngoài ra, chương trình còn thỏa mãn nhucầu về tính dễ sử dụng bằng cách cung cấp một giao diện thân thiện

Tính dễ sử dụng là nhờ môi trường hiện thực ra không đòi hỏi một sự nổ lực lớn nào từphía người sử dụng hệ thống Chiến lược về cân bằng tải và các chiến lược về FaultTolerance cho hệ thống cũng được quan tâm giải quyết

Cuối cùng ta thấy, vì Java là một ngôn ngữ lập trình không phụ thuộc vào Platform, vìvậy chương trình hiện thực được cũng không phụ thuộc Platform Một cách rõ ràng hơn,chương trình có thể chạy trên các hệ điều hành khác nhau một cách dễ dàng

III - Sơ lược về yêu cầu đề tài

Bài toán đặt ra cho luận văn này là :

Một hệ thống máy tính gồm nhiều máy tính có khả năng tính toán lớn được nối kết trênmột mạng Các máy này có thể đảm nhận việc thực hiện các dịch vụ tính toán lớn màchúng ta gọi là các Service Yêu cầu đặt ra là xây dựng một hệ thống đóng vai trò làmột môi trường cho phép thực thi những bài toán tương đối lớn theo mô hình song songvà phân bố Cơ chế hỗ trợ để xây dựng đề tài là RMI trong Java, là một cơ chếDistributed Object

Trang 3

Thực chất đây là hệ thống có nhiệm vụ quản lý những dịch vụ tính toán phân bố Ngoàiviệc phải phân phối công việc để thực hiện một yêu cầu dịch vụ nào đó, hệ thống còncó các chức năng như vấn đề thêm dịch vụ, sửa hay xóa dịch vụ Việc xây dựng chươngtrình cũng giải quyết các vấn đề khá quan trọng của bất cứ hệ thống tính toán phân bốnào, chẳng hạn vấn đề an toàn, bảo mật cho hệ thống, vấn đề kháng lỗi của hệ thống,vấn đề về việc phân chia công việc giữa các máy trong hệ thống …

Về việc sử dụng hệ thống, người sử dụng (Client) từ một máy tính bình thường, sử dụngmôi trường lập trình có giao tiếp gọi hàm từ xa theo cơ chế RMI trong Java là đã có thểtruy xuất các dịch vụ tính toán có trong hệ thống Người quản trị hệ thống (Admin) thôngqua chương trình Admin, do người hiện thực hệ thống cung cấp, sẽ quản lý các hoạt độngcủa hệ thống Người phát triển dịch vụ sẽ xây dụng dịch vụ theo một chuẩn nhất định vàtrao cho người Admin để người quản trị hệ thống có thể chạy thử Sau đó, người Adminsẽ thực hiện thêm dịch vụ vào hệ thống thông qua một số thao tác đơn giản trên chươngtrình Admin

Tóm lại, chúng ta cần giải quyết các vấn đề chính yếu sau :

 Làm thế nào Client có thể dễ dàng sử dụng được các Service trên các Server màkhông cần quan tâm đến phần tổ chức của các dịch vụ bên trong hệ thống

 Admin có thể quản lý, thống kê việc truy xuất các dịch vụ từ các Client

 Admin có thể quản lý, kiểm soát và thống kê hoạt động của các Server, cũngnhư Service trên các Server ấy, để cho hệ thống hoạt động đạt hiệu quả cao nhất

 Làm sao để có một cơ chế thuận lợi cho người phát triển thêm các dịch vụ cho hệthống mà không làm ảnh hưởng đến hoạt động của các dịch vụ đã có sẵn trướcđó

 Vấn đề khắc phục lỗi xảy ra trong quá trình vận hành hệ thống

 Làm sao để thực hiện việc phân chia công việc sao cho hiệu quả nhất có thể.Chiến lược để thực hiện việc phân chia này như thế nào

 Cách giải quyết tình trạng tắc nghẽn có thể xảy ra của hệ thống.(Mô hình phảinhư thế nào để giảm tình trạng tắc nghẽn này)

 Làm sao giải quyết các vấn đề ưu tiên trong hệ thống Vì rất có thể trong quátrình hoạt động của hệ thống sẽ có một số dịch vụ cần phải có độ ưu tiên cao.Chương trình sẽ được hiện thực bằng ngôn ngữ Java Tuy nhiên, bên cạnh việc tìm hiểu

cơ chế RMI, cần có thêm một cơ sở lý thuyết về một số cơ chế nhằm hỗ trợ trong việcxây dựng chương trình Các cơ sở lý thuyết cơ bản chẳng hạn thế nào là ứng dụng phânbố, các cơ chế Serialization, Dynamic Class Loading, Security, Multithread, Registry,Codebase, Activation, Naming… sẽ được trình bày cụ thể ở phần sau đây

Trang 4

Phần 1 : Nghiên cứu lý thuyết

Chương 1 : Distributed

Application

Một ứng dụng phân bố là ứng dụng được phân bố trên nhiều không gian địa chỉ khácnhau hay trên nhiều máy khác nhau Có nhiều phương pháp để xây dựng một ứng dụngphân bố, ở đây ta sẽ quan tâm đến Distributed Object

Cơ chế Distributed Object là cơ chế cho phép những object trên một máy tính nào đógởi những message đến những object chạy trên vùng không gian địa chỉ bộ nhớ khác,thông thường là thông qua mạng

Khi cần thiết kế một hệ thống sử dụng cơ chế Distributed Object thì ta cần phải quản lýđược những vấn đề sau:

 Độc lập platform :

Trong một ứng dụng sử dụng cơ chế Distributed Object, sẽ tồn tại những dịch vụchạy trên những platform khác nhau, nhưng ta đòi hỏi chúng phải giao tiếp được vớinhau Điều này cho thấy, việc độc lập platform là một vấn đề cần quan tâm Ngoài

ra, cơ chế Transmission giữa những Distributed object này phải quản lý được Formatdữ liệu chẳng hạn như byte order

 Location :

Trong môi trường sử dụng cơ chế Distributed Object , phải có một vài cơ chế choviệc định vị object cung cấp dịch vụ, điều này nhằm cung cấp công cụ cho việcthông tin liên lạc giữa các Object

 Quản lý bộ nhớ :

Dữ liệu truyền qua lại giữa các Object không thể là các tham biến bởi vì tham khảođến một địa chỉ vùng nhớ của hệ thống từ xa là một tham khảo không có ý nghĩa đốivới một máy tính Local

 Multiple Languages:

Những dịch vụ sử dụng cơ chế đối tượng phân bố và ứng dụng Client của chúng cóthể được viết bằng những ngôn ngữ lập trình khác nhau Mô hình đối tượng phân bốthực hiện việc mapping ngôn ngữ

Trang 5

 Giao tiếp network :

Khi hiện thực một ứng dụng sử dụng cơ chế Distributed Object thì trong việc giaotiếp giữa các Object, ta phải đảm bảo sao cho một message được gửi đi thì nó sẽđến được người nhận một cách chính xác Điều này nhằm đảm bảo cho hệ thốnghoạt động một cách ổn định chính xác

Giải pháp Distributed Object

Xây dựng một mô hình Distributed Object , theo chuẩn phải đáp ứng ít nhất những yêucầu sau:

 Hỗ trợ vấn đề platform không đồng nhất

 Cho phép định vị một Object một cách dễ dàng

 Giải quyết được các vấn đề về quản lý bộ nhớ

 Hỗ trợ giao tiếp giữa nhiều ngôn ngữ lập trình

 Quản lý giao tiếp network ở các mức dưới

 Cung cấp một cơ chế lưu trữ những tham khảo đến một remote object

 Thỏa mãn những tiêu chuẩn công nghiệp

Với những hỗ trợ cho cơ chế Distributed Object hiện nay, những vấn đề cơ bản sau đâyđã được giải quyết :

 Cơ chế cho việc quản lý vấn đề giao tiếp giữa những Object với nhau thông quacác protocol chuẩn như TCP/IP

 Cơ chế cho việc định vị Remote Object

 Cơ chế cho việc Marshaling và Unmarshaling những dữ liệu truyền qua lại trênmạng

 Cơ chế cho việc cung cấp một Interface cho một remote object trong không gianđịa chỉ cục bộ

 Các kỹ thuật để có thể tham khảo tới một Remote Object

Hiện nay, có nhiều giải pháp thông dụng cho mô hình Distributed object, chẳng hạn như:

Trang 6

 CORBA ( Common Object Request Broker Architecture) được phát triển bởiObject Management Group (OMG)

 DCOM (Distributed Component Object Model), được phát triển bởi Microsoft

 RMI (Remote Method Invocation ), được phát triển bởi Sun

Mỗi cơ chế có những đặc trưng của nó Tùy vào tính chất đề tài mà có sự chọn lựa.Ngoài ra khó có thể có sự so sánh chính xác Đề tài đang được thực hiện là tìm hiểu mộttrong những cơ chế về distributed object ,đó là RMI

Trang 7

Chương 2 : Giới thiệu về RMI

IV - Khái niệm chung

1- Java RMI (Remote Method Invocation)

RMI là một cơ chế cho phép một Object đang chạy trên một Java Virtual Machine nàygọi một Method của một Object đang tồn tại trên một Java Virtual Machine (JVM) khác.Sun hiện thực cơ chế này bằng cách xây dựng một hệ thống gọi là hệ thống JavaRemote Method Invocation, hệ thống này cung cấp một số phương pháp truyền thônggiữa những chương trình được viết trong Java Các chương trình viết trong Java và sửdụng hệ thống này gọi là những chương trình RMI

Thực chất, RMI là một cơ chế gọi hàm từ xa đã được hiện thực và tích hợp trong ngônngữ Java, vì vậy RMI cũng phải đối phó với những vấn đề như là RPC đối phó vớinhững đã xảy ra đối với RPC và các cách giải quyết vấn đề cũng tương tự như RPC Tuy nhiên, RMI có nhiều điểm tiện lợi hơn RPC, đó là việc RMI được hiện thực bởiJava, mà 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ìnhtrong RMI là phương pháp hướng đối tượng, do đó các thao tác hay các lời gọi hàm đềuliên quan đến các đối tượng Ngoài ra, RMI còn cho phép một Client có thể gửi mộtObject đến cho Server xử lý, và Object này cũng có thể được xem là tham số cho lời gọihàm từ xa, cần chú ý rằng Object này cũng có những dữ liệu bên trong và các hành vinhư một Object thực sự

2- Remote Interface, Remote Object, Remote Method

Cũng như tất cả các chương trình khác trong Java, chương trình RMI cũng được xây dựngbởi các Interface và các Class Interface định nghĩa các Method, và các Class hiện thựccác Method đó và có thể là Class còn hiện thực một vài Method khác nhưng chỉ cónhững Method khai báo trong Remote Interface mới được Client gọi từ một Java VirtualMachine khác, hay nói khác đi là chỉ có những Method khai báo trong Remote Interfacemới được nhìn thấy bởi Client

Vì vậy, Remote Interface là một Interface khai báo các Method cho phép gọi từ xa.Trong Java, Remote Interface có các đặc điểm :

 Thừa kế Interface có sẵn : Interface java.rmi.Remote

 Mỗi Method trong Remote Interface muốn là Remote Method phải được khaibáo là throws java.rmi.RemoteException và có thể có các Exception khác

The Remote Object là một Object được tạo ra để cho phép những Object khác trên mộtJVM khác gọi tới nó Remote Object chứa một số các Method, những Method này cho

Trang 8

phép gọi từ xa và các Method này sẽ được thực thi bởi JVM gọi là Server Các Methodnày gọi là các Remote Method.

Hình 1 Remote Object, Remote Method.

3- Name Server

Như trong RPC, Name Server là một Process đóng vai trò trung gian trong việc tìmkiếm tham khảo tới một Remote Object nào đó, cụ thể là nó giúp Client tìm kiếm mộttham khảo (Reference) tới một Remote Object mà Client đó cần Trong hệ thống JavaRMI, Name Server có thể là một máy bất kỳ trong hệ thống của chúng ta, Name Serverphải có một vùng nhớ gọi là Name Space dùng để chứa lại tên và địa chỉ tương ứng của

các Remote Object trong hệ thống

Hình 2 Name Server.

4- Stub và Skeleton

Trong RPC, thì một phần không thể thiếu để một Process trên một máy từ xa có thể gọithực thi các Remote Method của các Remote Object trên một máy Server nào đó là các

Trang 9

chương trình Client Stub và Server Stub (Java RMI gọi là Stub và Skeleton) Để có mộtcái nhìn cụ thể hơn, ta sẽ trình bày về nhiệm vụ của Stub và Skeleton.

Những công việc được thực hiện bởi Stub trong Java RMI:

 Tạo một cầu nối với JVM có chứa Remote Object mà Client cần

 Marshals các tham số cần cho việc gọi hàm và thực hiện việc gửi chúng đi

 Chờ kết quả trả về từ lời gọi hàm

 Unmarshals gói dữ liệu nhận được để đọc các giá trị trả về hay các Exception trảvề từ lời gọi hàm

 Trả kết quả về cho chương trình Client thực sự

 Ngoài ra, Stub còn đóng một vai trò khác quan trọng, đó là Stub sẽ nắm giữ mộttham khảo tới Remote Object để Remote Object không bị Giải phóng bởi trìnhGabage Collection tự động của Java

Khi có một lời gọi hàm gửi tới Skeleton, Skeleton sẽ thực hiện các công việc như sau :

 Unmarshals gói dữ liệu nhận được để có những thông tin cần thiết cho việc gọihàm

 Thực hiện lời gọi hàm đối với hệ thống thực thụ

 Marshals kết quả trả về và gửi trả về cho Client

Hình 3 Stub – Skeleton.

Với những nhiệm vụ của từng phần như trên, ta cũng có thể thấy vài sự khác nhau vềClient Stub,Server Stub giữa RMI và RPC như sau :

Stub (RMI) so với Client Stub (RPC) :

 Stub khác với Client Stub ở chỗ là Stub đóng vai trò là một người nắm giữ mộttham khảo tới một Remote Object, điều này giúp cho Remote Object không bị cơchế Garbage Collection xóa đi Trong khi đó, Client Stub thì không đóng vai trònày

Trang 10

 Stub còn đóng vai trò quan trọng trong việc Serialize một Object, và việc truyềnkhai báo Class cho Skeleton khi có yêu cầu.

Skeleton (RMI) so với Server Stub(RPC) :

 Server Stub không cần phải thực hiện viện Serialize một Object và cũng như nókhông cần phải yêu cầu hay quan tâm gì đến việc tìm khai báo một Class nào đó.Trong khi Skeleton thì phải quan tâm đến những điều đó

V - Nguyên tắc hoạt động của Java RMI

Một chương trình RMI thông thường được chia làm 2 phần, đó là chương trình trên Clientvà chương trình trên Server

Nhiệm vụ của chương trình Server là tạo một số các Remote Object và làm cho cáctham khảo tới chúng có thể được tham khảo từ xa, sau đó ngồi chờ Client gọi để thực thi.Sau khi có lời yêu cầu gì đó Server sẽ thực thi Method đó và trả kết quả về cho Client.Nhiệm vụ của chương trình Client là tìm kiếm và lấy các tham khảo đến các RemoteObject mà nó cần từ một máy Name Server nào đó, sau đó gọi các Method của RemoteObject đó Nhiệm vụ của hệ thống Java RMI là cung cấp các kỹ thuật để Server vàClient có thể liên lạc với nhau, cụ thể hơn là các kỹ thuật giúp cho Server và Client cóthể truyền nhận thông tin qua lại với nhau

1- Cơ chế hoạt động :

Hoạt động cụ thể của một chương trình RMI chúng ta có thể biểu diễn như sau :

Hình 4 Cơ chế hoạt động của chương trình RMI.

Như hình trên ta có thể thấy cơ chế hoạt động của một chương trình RMI như sau :

Trang 11

(1) Trên Server có một số các Remote Object với các Remote Method muốn cho phépgọi từ xa, thì người viết các Remote Object đó phải bố trí các Stub, Skeleton và cácRemote Interface trên WEB Server sao cho JVM khác có thể truy cập được, cụ thể hơnlà Client hay RMIRegistry có thể truy cập được.

(2) Server đó phải đăng ký với Registry để báo cho các JVM đóng vai trò Client biết làServer đã sẵn sàng phục vụ

(3) Registry nhận được lời yêu cầu đăng ký, nó sẽ tự động thực hiện việc Load StubClass trên Web Server dựa vào codebase mà Remote Object cung cấp Việc làm nàyđược thực hiện một cách tự động nhờ cơ chế Load Class động trong Java, vì vậy thao tácnày người lập trình không phải quan tâm đến mà chỉ cần cung cấp một codebase chínhxác để Registry có thể đi tìm

Chú ý : Registry sẽ truy cập Stub Class File bằng URL Protocol Nghĩa là Registry

chỉ gửi một yêu cầu truy cập Stub Class File theo URL Protocol đến cho WEB Server để nhờ WEB Server trả về cho Registry Stub Class File Một cách rõ ràng hơn là Registry sẽ không trực tiếp thực hiện việc truy cập Stub Class File trên một JVM khác.

(1) (4) Khi Client cần gọi thực thi một Remote Method nào đó, Client phải gửi mộtMessage đi hỏi Registry để có được tham khảo tới Remote Object mà nó cần.(2) (5) Sau khi đã có tham khảo tới Remote Object cần thiết rồi, Client sẽ tự động thựchiện việc Load Stub Class theo cơ chế Load Class động trong Java

(3) (6) Client gửi yêu cầu thực thi một Method nào đó mà nó cần với đầy đủ các thamsố cần thiết

Các đường không liên tục là biểu diễn cho các bước mà người lập trình không nhìn thấyđược do Java đã tự động làm

Có một điều chúng ta cần chú ý ở đây là ta phải bố trí bytecode của Stub và Skeletonsao cho một JVM từ xa có thể truy cập tới được Vì theo nguyên tắc, thì một chương trìnhtrên một JVM không thể tự nó truy cập vào một file nào đó trong hệ thống file của mộtJVM từ xa, bởi vì một lý do đơn giản là Local JVM không biết JVM từ xa tổ chức hệthống file của nó như thế nào Vì vậy, khi chương trình trên một JVM muốn truy cậpthông tin trên một file nào đó trên một JVM từ xa thì đầu tiên nó phải có quyền truy cậpfile đó, sau đó nó phải gửi tới một chương trình trên JVM từ xa một yêu cầu truy cậpfile, nhờ chương trình đó truy cập và trả kết quả truy cập về cho nó

2- Các công việc đã giải quyết được

Thông thường thì một chương trình dùng RMI còn được gọi là một Distributed ObjectApplication Do đó, với cơ chế hoạt động như trên thì cơ chế RMI đã giải quyết đượcnhững công việc phải thực hiện trong một Distributed Object Application :

Trang 12

a

Định vị Remote Object

Vì đây là một chương trình chạy trên nhiều máy, do đó để hợp tác với nhau làm việc thìcác Object phải gửi nhận thông tin qua lại với nhau, vì vậy một Distributed ObjectApplication cần phải giải quyết được việc định vị các Remote Object nhằm phục vụ choviệc truyền nhận thông tin như đã nói Về mặt này có hai kỹ thuật để thực hiện là : hỏitrực tiếp máy có chứa Remote Object tham khảo tới Remote Object hỏi cho đến khi nàocó được tham khảo cần thiết, cách thứ hai là dùng cơ chế Naming Bình thường thì trongRMI dùng cơ chế Naming

 Cơ chế Naming

Client có thể gọi những method trên những Remote Object khi và chỉ khi chúng lấy đượctham khảo đến Object đó RMI cung cấp một Name Server đơn giản Những RemoteObject đăng ký với Naming sử dụng class java.rmi.NamingRegistry Lớp này sử dụng

cơ chế Naming dựa trên một URL

Hình 5 Remote Object đăng ký với Naming Registry

Client sử dụng class java.rmi.Naming tìm kiếm (look up) và nhận được một thamkhảo đến những Object Địa chỉ của Remote Object được xác định với một URLchỉ đến máy từ xa và tên của object trên máy đó Khi một object đăng ký vớiregistry, nó có một tên gợi nhớ Những client từ xa sẽ tham khảo đến các Object

này bằng tên này

Hinh 6 Naming Service

b

Vấn đề truyền tham số trong lời gọi hàm

Trong Java RMI, tham số cho lời gọi hàm hay giá trị trả về từ lời gọi hàm đều có thể làmột Object nào đó, với điều kiệu Object đó có thể “Serialize” được Ở đây ta xét đến

Namingbind()

Trang 13

việc truyền nhận cụ thể trong Java là thực chất là truyền cái gì, khi một Object nào đóđược gọi là truyền đi.

 Truyền Non-Remote Object :

Khi một Non-Remote Object được truyền đi, thực chất là Object đó được Copythành một Object mới sau đó nó được Serialize rồi được truyền đi cho người nhận

Vì vậy, Non-Remote Object là một tham số nó sẽ được Copy từ một Object có sẵnvà bên nhận sẽ khôi phục lại Object đó từ chuỗi các Byte, còn nếu Non-RemoteObject là giá trị trả về nó sẽ được tạo mới và truyền đi

Hình 7 Truyền Non-Remote Object.

 Truyền Remote Object :

Khi một Remote Object cần truyền đi thì thực chất là Stub được truyền đi Khôngmột Remote Object nào được truyền đi vì với mỗi Object được gọi là RemoteObject là nhờ nó đã đăng ký với Name Server nên khi bị truyền đi thì việc đăng kýkhông còn ý nghĩa

Hình 8 Truyền Remote Object.

 Sự tích hợp các tham khảo :

Khi có hai tham khảo tới cùng một Object được truyền đi thì thực chất Object đó chỉđược Copy lại một lần và hai tham khảo đó sẽ chỉ cùng Object khi Object đó đượckhôi phục ở bên nhận

Trang 14

c

Truyền nhận thông tin với Remote Objects

Chi tiết về việc truyền nhận như thế nào thì RMI đã làm, đối với người sử dụng thì việctruyền thông với Remote Object giống như là việc truyền thông với những Object bìnhthường khác

d

Lấy ByteCodes của một Class mà Object của nó được truyền

Bởi vì RMI cho phép truyền nhận các Object, mà các Object này “Serialize” được, vìvậy một Distributed Object Application cũng phải giải quyết việc lấy ByteCodes về đểcó thể thực thi tiếp công việc nào đó RMI đã cung cấp cho ta những kỹ thuật cần thiếtđể lấy ByteCodes của một Object cũng như Java đã cung cấp cho ta những kỹ thuậttruyền nhận dữ liệu của các Object này vậy

VI - Một số đặc điểm nổi bật của Java RMI

RMI là cơ chế gọi hàm từ xa, vì vậy những vấn đề căn bản trong cơ chế này như giảiquyết vấn đề truyền tham số trong lời gọi hàm như thế nào, vấn đề định vị RemoteObject ra sao là những vấn đề quan trọng

Ở đây ta quan tâm đến một số đặc điểm nổi bật của Java RMI Java RMI có một số đặcđiểm nổi bật như:

 Dynamic Class Loading(Cho phép Load Class động)

 Thread usage in RMI(Cho phép sử dụng Thread trong RMI)

 Gabage Collection of Remote Object (Tự động giải phóng các Remote Object màhệ thống không còn tham khảo tới)

Các đặc điểm này sẽ được trình bày một cách rõ ràng hơn trong các phần sau

Tóm tắt

Tóm lại, cơ chế RMI trong Java là một cơ chế cho phép gọi hàm từ xa Cơ chế nàygiải quyết việc định vị Remote Object bằng cơ chế Name Server như đã nêu trên.Về nguyên tắc hoạt động thì nhìn chung có 6 bước nhưng Java đã đảm nhận cho tamột phần và người lập trình chỉ còn phải thực hiện 3 bước mà thôi

Thêm vào đó là RMI có những đặc điểm chính yếu là : cho phép sử dụng Threadtrong RMI, RMI có hỗ trợ cơ chế dọn rác và RMI có hỗ trợ việc Load Class động.Với đặc điểm cuối cùng này, RMI cho phép Client có thể gửi một Object lên choServer thực thi hộ một vài Method Điều này lợi thế hơn hẳn so với các hiện thựccho việc gọi hàm từ xa đã có trước đây

Trang 15

Chương 3 : Một số kỹ thuật liên

quan

VII - Dynamic Class Loading

Java RMI khác với RPC là nó cho phép các giá trị trả về hay các tham số truyền chohàm là một Object thực thụ, Object với những dữ liệu và các hành vi như đã khai báoObject đó RMI sử dụng kỹ thuật Serialization một Object để gửi nhận Object giữa cácJava Virtual Machine(JVM) với nhau Và cũng nhờ kỹ thuật này Java cũng cho phépLoad Class động

Ta nói Java cho phép người sử dụng có thể Load Class động, vậy Load Class động lànhư thế nào ? Load Class động có ưu điểm gì ? Phần trình bày sau đây sẽ trả lời các câuhỏi này

1- Ví dụ về Load Class động

Với ý tưởng về RPC, trên thực tế đã có nhiều hiện thực của ý tưởng này Ví dụ như SunRPC, Xerox Courier,…nhưng hầu hết các hiện thực đó việc Load Class động không đượcđề cập đến Khi một hàm cho phép gọi từ xa được biên dịch trên Server, các Client Stubvà Server Stub được tạo ra và vì vậy đối với Client Stub thì nó chỉ phục vụ cho Clientnhững hàm đã có khai báo trong Client Stub bởi Server, hơn thế nữa là Client Stub chỉphục vụ những hàm với các kiểu dữ liệu của tham số và kiểu dữ liệu của trị trả về làmột kiểu nhất định nào đó không thể thay đổi được nữa

Ví dụ : Trên Server ta khai báo hàm như sau :

int Example ( ClassNameA a, float b); (Với ClassNameA là tên một Class)Thì trên Client khi gọi hàm Client phải truyền các tham số cụ thể là :

ClassNameA ObjA;

float num;

int result = Example ( ObjA,num)

Ta có thể dễ dàng thấy rằng với RPC không cho Load Class động thì một khai báo hàm cho phép gọi từ xa sẽ được gắn liền với một Stub nào đó Nếu ta gọi một hàm khác đi (mới so với các hàm đã khai báo), hay gọi hàm đó với kiểu dữ liệu tương đương của các tham số hay các trị trả về, thì các Stub sẽ không thực hiện được công việc dù trên nguyên tắc Logic chúng vẫn có thể thi hành được

Trang 16

Ví dụ : Với khai báo hàm trên Server của ví dụ trên, nếu trên Client ta gọi hàm khác đinhư sau :

ClassNameB ObjB;

float num;

int result = Example (ObjB,num);

hay có thể ta chỉ thay đổi cách gọi hàm giống như sau :

ClassNameA ObjA;

int num;

int result = Example (ObjA,num);

Với ClassNameB là một Class tương đương với ClassNameA nghĩa là những gìClassNameA làm được thì ClassNameB cũng làm được hay về mặt lý luận trên thực tếmột số nguyên cũng có thể xem là một số thực, do đó theo lý luận trên ta có thể truyềnmột số int thay cho một số float Nhưng với cơ chế Load Class bình thường mà Sun RPChay Xerox Courier cung cấp thì cách gọi hàm này không chấp nhận được, cụ thể làClient Stub không hiểu và không phục vụ cho Client

Với ví dụ trên, nếu muốn gọi hàm trên với tham số là một Object thuộc ClassNameB, thìnhững công việc cần làm là phải sửa đổi khai báo hàm trên Server và hợp dịch lại để cóđược một Client Stub mới Điều này gây ảnh hưởng về tính uyển chuyển của việc lậptrình và chạy chương trình bởi vì dễ thấy rằng nếu muốn truyền các giá trị trả về hay cáctham số cho một hàm từ xa nào đó, mà các giá trị này thuộc kiểu dữ liệu khác với khaibáo hàm thì ta phải thực hiện biên dịch lại chương trình tại Server

Trên đây là một ví dụ cụ thể đối với Remote Method Qua đó ta cũng có thể phần nàothấy được việc Load Class động là như thế nào !

2- Load Class động là gì ?

Java đã cung cấp cho ta một cách để khắc phục được yếu điểm không uyển chuyển đãtrình bày ở ví dụ trên, đó là Java cho phép Load Class động

Load Class động là một cơ chế sẽ được Java thực hiện nếu như trong lúc thực thi chươngtrình mà Java phải tham khảo đến một Object thuộc một Class A mới nào đó mà JVMhiện tại chưa có định nghĩa của Class A này thì Java sẽ tự đi load Bytecodes của A vàtạo mới một Instance của A để công việc được tiếp tục Từ đó, ta dễ thấy rằng việc tìmkiếm Bytecode Class mới của JVM phải do người lập trình chỉ định để chương trình cóthể chạy một cách chính xác Do đó, Java cho phép người lập trình có thể chỉ định nơitìm kiếm các Bytecode này thông qua CLASSPATH và codebase Chúng ta sẽ xem xétsau về phần này

Trang 17

Hình 9 ClassA là một Class mới đối với Server.

Java RMI cũng cho phép việc Load Class động, nghĩa là trong các gói dữ liệu truyềnqua lại giữa Client và Server có một vùng thông tin để chứa lại thông tin đặc tả Class Anào đó mà Object của A đó được truyền đi trong gói dữ liệu tương ứng Điều này giúpJava có thể xác định xem có cần phải đi Load Bytecode để phục vụ cho mục đích tạo lạiObject từ dữ liệu nhận được hay không ?

Chú ý là chỉ đối với những Object mới được thực hiện điều này, với kiểu dữ liệu nguyênthủy (ví dụ: kiểu int, float …) thì do Java không hỗ trợ việc tự động chuyển đổi kiểu nênRMI cũng không hỗ trợ việc chuyển đổi kiểu trong việc gọi hàm từ xa

Điều này có nghĩa là khi có một khai báo hàm tại Server và hàm này có các giá trị trảvề hay các tham số là Object của một Class A nào đó, thì khi gọi hàm hay khi trả kếtquả về thì ta có thể thay Object thuộc chính xác Class A đó bằng một Object thuộc Class

B, với điều kiện là Class A và Class B là hai Class tương đương nhau Đây chính là ưuđiểm của việc Load Class động trong Java Ta cũng có thể hiểu rằng điều này có đượclà do cách Java truyền những gói dữ liệu giữa Client và Server

3- Lợi điểm của việc Load Class động:

Lợi điểm của việc Load Class động là nó cho phép chương trình chạy uyển chuyển hơn.Cụ thể là khi khai báo Remote Method với các kiểu của tham số là các Object thuộcClass nào đó, mà khi ta truyền một Object thuộc Class khác nhưng tương đương vàObject này có các hành vi thực hiện những công việc khác đi hay thực hiện công việc đótốt hơn, thì Java RMI vẫn chấp nhận và vẫn có thể thực thi công việc một cách chínhxác

4- Ứng dụng cụ thể của Load Class động :

Trong cơ chế hoạt động của RMI trình bày ở trên, ở bước thứ (3) sau khi Server đăngký với Registry, thì Registry phải có một tham khảo tới một Object thuộc Stub Class vớiClass này là Class mà Registry chưa có bất kỳ thông tin gì về Class đó Vì vậy, lúc nàyRegistry phải thực hiện việc Load Class động đối với Stub Class

Trong RMI, người ta còn cho phép Client có thể gửi lên cho Server một Object để nhờServer thực thi hộ hành vi của Object đó Do đó, khi Client gửi lên một Object mà

Trang 18

Server chưa có, thì việc Load Class động lại được thực hiện để Server có thể tiếp tụccông việc một cách liên tục.

VIII - Serialization

Đối với lập trình hướng đối tượng, các Object là một chủ thể chính yếu của một hệthống Và trong Distributed Application, các thành phần của Application đó có thể gửiqua lại cho nhau những Object thông qua Network Điều đó có nghĩa là ta phải tìm mộtphương pháp nào đó để có thể chuyển một Object trong bộ nhớ tại host này thành mộtchuỗi các byte(s) để có thể truyền trên network Một trường hợp khác, khi ta cần phảilưu hệ thống các Object đang hoạt động xuống phương tiện lưu trữ để phục vụ một mụcđích nào đó, thì ngay lúc ấy ta có một nhu cầu là phải biểu diễn một Object với đầy đủcác trạng thái và các mối quan hệ với các Object khác trong bộ nhớ thành một chuỗi cácBytes nhớ Nói tóm lại, nhu cầu về việc biểu diễn một Object thành các byte nhớ là mộtnhu cầu thiết yếu trong lập trình hướng đến đối tượng

Object Serialization là việc biểu diễn một Object bằng một số Byte về mặt vật lý và

sau đó, khi cần ta có thể khôi phục lại Object đó bằng các Byte biểu diễn đối tượng đó,

với tất cả các dữ liệu và hành vi giống như Object trước đó Công việc chuyển đổi một Object trong bộ nhớ thành một chuỗi các Byte vật lý gọi là Serialize một Object.

Hình 10 Serialization

Việc lưu trữ và phục hồi những object không đơn giản như việc lưu trữ là phục hồi cáckiểu dữ liệu nguyên thủy Không phải chỉ lưu object bằng cách ghi các byte biểu diễnObject đó xuống, và khi phục hồi một object cũng vậy Những Object được lưu trữ(store) và phục hồi (retrieved) thường xuyên tham khảo đến những object khác Trongkhi đó việc lưu chứa một Object trong bộ nhớ thì dễ dàng nhờ trong bộ nhớ việc biểudiễn các mối liên hệ giữa các Object dễ dàng, nhưng khi lưu Object đó xuống dĩa thì khócó thể biểu diễn được các mối liên hệ đó, và khi khôi phục lại Object đó trong bộ nhớ thìviệc tạo lại mối liên hệ giữa các Object là một vấn đề, vì một lý do đơn giản là khôngchắc lúc nào ta cũng tạo được các Object tại các địa chỉ trong bộ nhớ mà chúng giốngnhư vị trí của Object trước đó Do đó, cần có một cơ chế để quản lý vấn đề này, làm saođể lưu trữ và lấy những object lên mà vẫn đảm bảo chính xác những tính chất , trạng thái, duy trì được những quan hệ giữa những đối tượng Serialization là một cơ chế thựchiện công việc này

Trang 19

Vấn đề Serialization cũng được đặt ra khi truyền một Object từ JVM này đến JVM khác,đó là do khi truyền một Object ta phải truyền thành một chuỗi các Byte, rồi sau đó tacũng phải khôi phục lại Object đó dựa trên các Byte này.

Vì vậy, vấn đề Object Serialization cũng là một vấn đề cần quan tâm trong RMI TrongJava, người ta đã cung cấp cho chúng ta một số các Interface tên là SerializableInterface và Externalizable Interface, nhằm phục vụ cho mục đích Serialize một Object

Do đó, nếu ta khai báo một Interface extends từ java.io.Serializable thì những Objectnào implements từ Interface này đều là những Object có khả năng Serialize, lúc đó tagọi Object đó là Seriaizable Object

Đối với những Java Object, cách Serialized một Object là phải xác định và những địnhnghĩa lớp cho Object phải được kiểm tra bởi Java, để từ đó nội dung của Object đượcstore một cách chính xác và việc restore nội dung thành một instance mới được thựchiện một cách chính xác Đối với serializable objects, stream bao gồm những thông tinđủ để restore những field trong stream thành một Object tương thích của lớp đó

Objects được lưu trữ và phục hồi thường xuyên tham khảo (refer) đến những objectkhác Những object này phải được lưu và phục hồi tại cùng một thời điểm để duy trìđược những quan hệ chính xác giữa những đối tượng Khi một object được lưu trữ, nhữngobject mà object này tham khảo đến cũng được lưu trữ

Tiêu chí của Serializing Java Objects là :

 Đưa ra một cơ chế đơn giản mà vẫn có thể mở rộng

 Có thể mở rộng để hỗ trợ marshaling và unmarshaling khi cần thiết cho nhữngRemote Object

 Có thể mở rộng (extensible) để hỗ trợ tính persistence của Java objects

Object Serialization đưa ra và sử dụng một dòng những byte gồm một hay nhiềuprimitives và những object Những object được ghi xuống stream ,tham khảo đến nhữngobject khác cũng được biểu diễn dưới những stream Object Serialization chỉ đưa ra mộtformat stream giải mã và lưu trữ những contained objects Object Serialization được thiếtkế để cung cấp nhiều đặc tính cho những lớp Java Những container format khác nhưOLE hay OpenDoc biểu diễn hệ thống file và stream khác nhau

Mỗi object hoạt động như một container hiện thực một interface cho phép primitives đóvà objects được lưu trữ vào nó hoặc được khôi phục từ nó

Mỗi object được lưu xuống stream phải cho phép chính nó được lưu và phải hiện thựcnhững protocol cần thiết để lưu (save) và phục hồi trạng thái của nó Những protocolsnày cho phép container yêu cầu object ghi và đọc trạng thái của nó Khi được lưu trongmột Object Stream, mỗi object phải hiện thực Interface Serializable hoặcExternalizable

Trang 20

Đối với lớp hiện thực Interface Serializable, việc Object Serialization có thể tự độngsave và restore những field của mỗi class của một object và tự động quản lý những lớpbằng cách thêm vào những field hay supertypes Một lớp Serializable cũng có thể khaibáo những field của nó là transient (nghĩa là không cần lưu trữ lại và không cần làmthao tác phục hồi khi phục hồi Object đối với field đó).

Đối với lớp Externalizable , Object Serialization giao cho những lớp toàn quyền điềukhiển qua external format và trạng thái của supertype được save và restore như thế vào.Trong việc xây dựng ứng dụng phân bố sử dụng RMI, vấn đề Serialization luôn đượcquan tâm vì có việc truyền các Object xảy ra

IX - MultiThread

1- Khái niệm MultiThread

Có thể nói Process ( Quá trình ) là một chương trình đang chạy Trong một hệ thống, đốivới một Process để nó có thể thực thi được, thì nó cần được hệ thống cung cấp một vùngnhớ để chứa lại các thông tin quản lý Process, vùng nhớ để chứa mã lệnh của chươngtrình, vùng nhớ để chứa dữ liệu của chương trình, một vùng Stack và quan trọng là mộtdòng xử lý (Thread) Dòng xử lý là dòng điều khiển CPU để xử lý công việc nào đó,trong một dòng điều khiển cụ thể sẽ có một số câu lệnh được thực thi một cách tuần tựnhằm mục đích thi hành một việc gì đó Vì vậy, một Process ít nhất phải có một Threadđể có thể làm việc được Và có thể có nhiều Thread thực hiện một số công việc độc lậpnào đó

Một chương trình Multithread là một chương trình ở cùng thời điểm có nhiều Threadcùng chạy, có nghĩa là tồn tại nhiều tập những dãy lệnh tuần tự (Instruction Sequence)được thực thi đồng thời Mỗi Instruction Sequence có một dòng điều khiển độc lập vớinhững dòng khác

Phân biệt Multiprocess và Multithread

Multiprocess cung cấp sự đồng thời giữa các process Mỗi Process được cấp vùng không

gian địa chỉ riêng, có các tài nguyên riêng

Hình 11 Phân biệt MultiThread và MultiProcess.

Trang 21

Multithread cung cấp sự đồng thời trong ngữ cảnh của một Process Multithread chia sẻdòng điều khiển trong một Process Những Thread trong một chương trình MultiThreadđược thực thi trên cùng một vùng dữ liệu chung, chính là vùng dữ liệu của hệ thống cấpcho Process Nếu có một biến global nào đó thay đổi trong một Thread nào đó thì tất cảcác Thread khác cũng bị thay đổi Nói tóm lại, các Thread dùng chung tài nguyên vàcùng không gian địa chỉ.

Lợi điểm của Thread

 Thread mất ít thời gian để tạo và loại bỏ so với việc tạo và loại bỏ Process

 Multithread tốn ít thời gian chuyển đổi ngữ cảnh

 Tiết kiệm tài nguyên

Vì vậy, Multithread có nhiều ưu điểm hơn so với Multiprocess Vì lý do đó mà các ngônngữ lập trình hiện đại đều có hỗ trợ Multithread, Java cũng vậy

2- Lập trình Multithread trong Java

Java hỗ trợ cả Multiprocess và Multithread Multithread không phụ thuộc platform.Lập trình Multithread cũng giống như Single Thread, chỉ khác là nó thực hiện đồng thờinhiều tập những lệnh có trình tự (Intruction Sequence), mỗi Instruction Sequence đó códòng điều khiển riêng, độc lập với những Intruction Sequence khác Những InstructionSequence thực hiện một cách độc lập đó gọi là Thread

Hệ thống có bộ đơn xử lý chỉ hỗ trợ tính đồng thời về mặt Logic (Logical Concurrency).Đặc điểm quan trọng của lập trình Multithread trong Java là hỗ trợ tính tuần tự về mặtLogic (Logical Sequence)

Multithreading của Java tập trung ở lớp java.lang.Thread Lớp Thread cung cấp khảnăng tạo ra những đối tượng của lớp Thread Lớp Thread đóng gói dữ liệu và cácphương thức kết hợp với các thread khác nhau và cho phép Multithreading tích hợptrong một framework hướng đối tượng

Java cung cấp 2 cách để tạo ra thread Đó là cách tạo ra các Object extend ngay từ lớpjava.lang.Thread, và cách thứ hai là implement một Interface do Java cung cấp đó làInterface Runable (Tài liệu tham khảo : Java Developer’ s Guide[6])

3- Các trạng thái của Thread

Trang 22

Một thread rơi vào trạng thái blocked khi một trong bốn action sau đây xuất hiện:

 Hàm sleep () được gọi trong thread

 Hàm suspend() được gọi

 Thread gọi hàm wait

 Thread gọi một thao tác input/output

 Dead:

Một thread dead bởi một trong hai lý do sau:

 Nó dead vì run method exit

 Nó bị kill bởi hàm stop() được gọi

4- Garbage collector thread

Java cung cấp Garbage Collector Thread để giải phóng một cách tự động và định vịlại bộ nhớ động (dynamically allocated memory)

Bộ thu dọn rác của Java chạy như một thread có độ ưu tiên thấp, khi Java xác địnhkhông có một tham khảo nào đến đối tượng điều khiển Thread nhất định nào đónữa, nó đánh dấu đối tượng đó Garbage collector thread chạy khi hệ thống chophép (processor time available) và không có một Runable thread có độ ưu tiêncao hơn Tuy nhiên, garbage collector thread sẽ chạy ngay tức thì khi hệ thống hếtbộ nhớ để cung cấp cho chương trình khác(out of memory)

Cơ chế Garbage Collection của Java không phải là một cơ chế quản lý bộ nhớ độnghiệu quả, nhưng nó là một cơ chế nhằm mục đích an toàn cho người lập trình

5- Thread Synchronization

Một thread đang chạy có thể truy cập bất cứ đối tượng nào mà nó có một referenceđến Điều gì xảy ra khi hai thread cùng truy cập một đối tượng, và mỗi thread gọimột method mà nó modify trạng thái của object đó Synchronization giải quyết vấnđề này

Java dùng monitor để thao tác đồng bộ Mọi đối tượng với method synchoniation làmột monitor Monitor chỉ cho phép tại một thời điểm chỉ có một thread thực hiệnmột method synchronization trên đối tượng Nếu có nhiều phương thứcsynchonization thì chỉ có một method active còn các method còn lại phải chờ Điềunày được thực hiện bởi việc locking đối tượng đó khi có một phương thứcsynchronization đang active Khi method đó hòan thành, lock sẽ được giải phóng vàthread nào ở trạng thái ready có độ ưu tiên cao nhất sẽ được tiếp tục

Trang 23

6- Daemon Thread

Daemon Thread là thread phục vụ cho những thread khác Daemon thread chạyBackground Không như những thrread thông thường, daemon thread không ngănmột chương trình từ Terminating Garbage collection là một daemon thread

Nếu một thread là daemon nó phải được set trước khi method star được gọi Set mộtthread như một daemon : setDaemon(true)

Tóm lại, Multithread là một cơ chế quan trọng trong ngôn ngữ Java Multithreadingcó ý nghĩa lớn trong việc điều khiển sự thực thi chương trình Đặc biệt với ứng dụngsử dụng RMI thì Multithread là cơ chế rất cần thiết

X - Classpath - Codebase

1- Giới thiệu

Java RMI cho phép ta load Class động, nghĩa là trong lúc gọi hàm từ xa nói riêng vàthực thi chương trình nói chung nếu có tham khảo tới một lớp mới mà JVM chưa cóđịnh nghĩa của lớp này thì Java sẽ tự đi load Class này để công việc được tiếp tục

Do đó, việc tìm kiếm Class mới của JVM phải do người lập trình chỉ định để chươngtrình có thể chạy một cách chính xác

Java cho phép người lập trình chỉ định bằng cách định trị cho các biến môi trường doJava quy định trước Một số biến môi trường có thể liệt kê ra như sau :

Với Windows chúng ta có thể có 2 cách để cài đặt giá trị cho biến môi trường này

Ta có thể liệt kê ra như sau :

 Cung cấp Classpath cho trình biên dịch và thông dịch ngay lúc chạy, để khi cầntham khảo tới một Class, các chương trình này có thể tìm kiếm theo Classpath đó.Cú pháp cho cách này như sau :

Javac -classpath <đuờng dẫn> JavaFile.javaJava -classpath <đường dẫn> JavaFile

Trang 24

 Tạo lập một biến môi trường để có thể dùng cho cả phiên làm việc Cú pháp chocách này như sau :

Set CLASSPATH = <đường dẫn> ;

Để hiểu về codebase thì đầu tiên ta sẽ trình bày một cách sơ lược về URL

URL là viết tắt của Uniform Resource Locator, có thể nói URL là một “đường dẫn”của một file hay Directory trên mạng URL dùng để chỉ đến một vị trí xác định trênmạng

Có 5 loại URL : file, http, gopher, news, partials

Cú pháp chung của một URL là :

<protocol>://<địa chỉ máy>:<port>/<đường dẫn resource>/<tên resource>

Trang 25

Không giống như những URL khác, để chỉ tới 1newsgroup tên là "rec.gardening" thìnews URL là:

Vậy thì lúc này chúng ta có thể dùng partial URL, hay relative URL để chỉ tới một

file khác trong cùng một thư mục, cùng một máy với file tên là “afile.html” nhưtrên Ví dụ: trong thư mục trên có file tên là "anotherfile.html", thì lúc này partialURL để chỉ tới file trên là :

b

Codebase hoạt động như thế nào ?

 Codebase sử dụng trong Applet :

Hình 12 Nguyên tắc hoạt động Load Class đối với Applet.

<applet height=100 width=100 codebase="myclasses/" code="My.class">

<param name="ticker">

</applet>

Giải thích :

Trang 26

Khi không tìm thấy Bytecode cho Class mà Applet cần tại JVM Client, Client sẽtự động gửi một yêu cầu về Applet đến cho Server để có thể Load Class mới vềdựa vào codebase đã khai báo như trên.

Chú ý :Ta không cần phải nêu tên máy ở đây bởi vì tên máy lúc này được ngầm

hiểu là WEB Server đang kết nối với Client.

Server gửi trả về Client Bytecode mà Client cần Sau đó, Client sẽ thực thiApplet với Bytecode vừa nhận được từ Server

 Codebase dùng trong RMI :

Với RMI, khi một Client muốn gọi một Method của một Remote Object nào đóthì bắt buộc Client phải có một tham khảo tới Remote Object đó, để có mộttham khảo tới Remote Object thì Client phải có một Intance thuộc Class gọi làStub Class, class này được tạo ra bởi chương trình RMIC Mỗi Remote Object cómột Stub Class để đóng vai trò Proxy trên Client JVM Giá trị của property

java.rmi.server.codebase là một hay nhiều URL chỉ đến nơi chứa Stubnày

Nguyên tắc hoạt động của RMI có dùng codebase như sau :

Hình 13 Nguyên tắc làm việc của cơ chế RMI có dùng codebase.

Giải thích :

(1) Codebase của một Remote Object được xác định bằng cách Remote Objectđó sẽ định trị cho java.rmi.server.codebase Sau đó server sẽ đăng kýRemote Object với RMI registry Codebase này sẽ được ghi chú lại trong cái gọilà tham khảo tới Remote Object và chứa trên RmiRegistry

Chú ý :Sau khi Server đăng ký thì RMIRegistry sẽ thực hiện việc Load Stub Class

dựa vào codebase mà Server cung cấp Việc Load Stub Class này được tự động thực hiện như sau : RmiRegistry sẽ gửi một HTTP Request đến URL trong codebase và ngồi chờ nhận kết quả là file class của Stub.

Trang 27

(2) Client yêu cầu lấy tham khảo tới Remote Object Tham khảo được trả về,thực chất của tham khảo này là một Object thuộc lớp Stub, Object này sẽ đượcClient dùng để gọi các Method của Remote Object.

(3) RMI Registry gửi trả một tham khảo tới Remote Object về cho Client NếuBytecode của Stub Class đã được tìm thấy ngay tại máy Client thông quaCLASSPATH thì Client sẽ thực hiện việc load Class nội bộ Chú ý làCLASSPATH sẽ được tự động dò trước so với codebase Tuy nhiên, nếuBytecode của Stub Class không tìm thấy thông qua CLASSPATH, thì Client sẽcố gắng truy cập Bytecode của Stub Class thông qua codebase của RemoteObject đó

(4) Client yêu cầu định nghĩa Class thông qua codebase Codebase mà Clientdùng là một URL đang chỉ tới nơi chứa Bytecode của Stub Class Chú ý là khiRemote Object được đăng ký với RMI Registry thì một Object của Stub Classđược tạo ra, và RmiRegistry giữ một tham khảo tới Object này Do đó, URLđược đề cập ở trên là URL chỉ đến nơi mà RmiRegistry đã từng tìm thấyBytecode của Stub Class

(5) Bytecode của Stub Class được download về Client

Note : Bước 4 và 5 là những bước được làm tương tự như RmiRegistry load Stub

Class trước đây khi Remote Object được đăng ký với RmiRegistry Khi RMIRegistry cố gắng load Bytecode của Stub Class của Remote Object nó cũng đã dùng codebase.

(6) Client đã có đầy đủ thông tin về Remote Object để có thể gọi các Methodcủa Class này Client thực hiện gọi hàm.(Xem hình sau)

Hình 14 Client thực hiện việc gọi hàm từ xa.

c

Để dùng codebase thì ta phải xác định giá trị của codebase như thế nào ?

Có 2 cách để xác định giá trị cho Codebase:

 Xác định codebase ngay trên dòng lệnh của trình thông dịch Java, cú pháp nhưsau:

Trang 28

Java –Djava.rmi.server.codebase=<URL> FileClass

 Xác định codebase trong chương trình, dùng đoạn chương trình :

Đối với codebase, ta có thể liệt kê một số kinh nghiệm sử dụng như sau :

 Trước khi chạy RmiRegistry không được set Classpath Nếu CLASSPATH đãđược định nghĩa rồi, ta xóa trắng biến môi trường CLASSPATH bằng lệnh sau tạidấu nhắc lệnh :

Phân biệt codebase và name của Remote Object như thế nào ?

Khi Remote Object đăng ký với RMIRegistry thì nó dùng hàm bind của ClassNaming, trong hàm này có một tham số là name Vậy giữa name và codebase khácnhau như thế nào ?

Name là tên của Remote Object khi nó được Export ra cho mọi người có thể thấy vàsử dụng thông qua tên đó

Codebase là URL dùng để chỉ tới nơi chứa Bytecode của Stub Class hay các Classcó liên quan đến quá trình thực thi

Trang 29

Hình 15 Phân biệt giữa Remote Object Name và codebase.

Tóm tắt

Tóm lại, trong Java để các ứng dụng có thể hoạt động một cách uyển chuyển hơn,người ta hỗ trợ cơ chế Load Class động, là cơ chế cho phép JVM tự động tìm và tạomột Instance thuộc một Class mà JVM chưa có Bytecode Và cũng vì mục đích đểcho JVM có thể tự động tìm Bytecode mà người ta định nghĩa và sử dụng các biếnmôi trường như CLASSPATH và các Property như java.rmi.server.codebase vớinhững cách sử dụng và cơ chế hoạt động như đã nêu ở trên

XI - Mô hình Java Security

1- Giới thiệu

Java được thiết kế độc lập platform Bytecode của một chương trình có thể chạy trênnhững platform khác nhau Java cũng được thiết kế cho các ứng dụng network Vì vậyvấn đề Security là một vấn đề rất quan trọng để đảm bảo sự an toàn cho môi trườngđang hoạt động

Java cung cấp hai mức security : security mức thấp (intrinsic) và security mức resource.Intrinsic security giải quyết các vấn đề tính toàn vẹn (integrity) của bytecode khi đượctruyền trên mạng Nó gồm phần bytecode verifier và ClassLoader

Trang 30

Verifier có nhiệm vụ làm thế nào để ngăn chặn bytecode thực hiện các thao táckhông hợp lệ chẳng hạn các vấn đề trong việc truy cập bộ nhớ, hay các hoạt độngkhông được phép khác.

ClassLoader có nhiệm vụ quản lý vấn đề namespace cho các lớp được tải thông quamạng Nó đảm bảo để không xảy ra sự đụng độ về tên của các lớp cũng như một số vấnđề khác về tên các Class ClassLoader cũng đảm bảo rằng những lớp local sẽ được tảilên trước để tránh nhầm lẫn với những class của hệ thống

Security cấp thấp này thì rất quan trọng, tuy nhiên chúng cũng tương đối dễ hiểu đối vớingười lập trình

Security mức resource có liên quan nhiều đến việc phát triển ứng dụng bởi vì chúng tácđộng trực tiếp đến tài nguyên hệ thống mức cao hơn

Mô hình Security của Java thường được miêu tả như một Sandbox, là một vùng đượcxem là an toàn cho những code không đáng tin cậy

2- Mô hình Sandbox nguyên thủy

Mô hình Sandbox này cung cấp một môi trường để chạy những code không đáng tin cậycó được từ trên mạng Mô hình này được phát triển trên JDK 1.1, tính chất của mô hìnhSandbox là những code cục bộ đáng tin cậy thể có thể có quyền truy cập đến những tàinguyên hệ thống quan trọng chẳng hạn như hệ thống file, trong khi đó những code đượcdownload từ bên ngoài thì chỉ được truy cập một số tài nguyên giới hạn nào đó đượccung cấp trong Sandbox

Hình 16 SandBox nguyên thủy

Nói chung, với mô hình trên thì sức mạnh của Java Security được biểu hiện thông qua cơchế sau :

Đầu tiên là ngôn ngữ Java cung cấp các công cụ dễ dàng và an toàn để sử dụng cùng vớinhiều cơ chế nhằm cung cấp tính an toàn Những đặc điểm của ngôn ngữ như quản lý bộnhớ tự động , bộ dọn rác tự động, kiểm tra phạm vi của string và array… Là một số ví dụđể thấy ngôn ngữ giúp người lập trình viết code một cách an toàn

Tiếp theo, compiler và bộ kiểm tra bytecode (bytecode verifier) đảm bảo được rằng chỉnhững bytecode java hợp pháp mới được thực hiện Bộ kiểm tra bytecode cùng với JavaVirtual Machine đảm bảo sự an toàn lúc chương trình chạy

Trang 31

Cuối cùng, việc truy cập đến những tài nguyên hệ thống quan trọng thì phải thông quaJVM làm trung gian, việc truy cập đó cũng được kiểm tra bởi một lớp Security , lớp nầygiới hạn những hoạt động của những code không đáng tin cậy.

Cũng mô hình trên,với JDK 1.1 thì nó đã được phát triển lên một mức cao hơn, đó làviệc JDK 1.1 giới thiệu khái niệm về “signed applet” Khái niệm này như sau : khi mộtbytecode được load về, thì nếu JVM tại Local nhận ra bytecode này có một khóa mà nóđã quy định trước thì bytecode này sẽ được đối xử như một bytecode tại JVM Local Môhình này được biểu diễn như hình sau :

Hình 17 Mô hình SandBox cải tiến.

3- Phát triển mô hình Sandbox

Mô hình Security của Java hiện nay được phát triển từ mô hình SandBox trước đó nhằmcác mục đích :

 Kiểm soát được việc truy cập tài nguyên một các sát sao hơn Chức năng này đãxuất hiện từ JDK ban đầu, nhưng lúc đó, nếu người lập trình muốn sử dụng chứcnăng này thì phải làm nhiều thao tác phức tạp Vì vậy, mô hình này sinh ra là đểthỏa mãn việc lập trình phải vừa đơn giản lại vừa đạt được mục đích kiểm soátviệc truy cập tài nguyên một cách tốt nhất

 Dễ dàng trong việc xác định một quy tắc cho việc truy cập Với mô hình này tacó thể định nghĩa một quy tắc cho việc truy cập tài nguyên mà không cần phảilập trình

 Với JDK 1.1 để cho phép một khóa mới cho các bytecode thì ta phải cung cấpmột Method mới để có thể kiểm tra khóa này Và điều đó có nghĩa là ta phải lậptrình lại nhưng với mô hình này thì tính tiện dụng của nó khá cao nên có thể làmđiều đó mà không cần lập trình

Trang 32

Hình 18 Mô hình Security trong Java 1.2

 Cho phép kiểm tra security đối với tất cả các chương trình Java, ứng dụng cũngnhư applet

Với các yêu cầu nêu trên thì mô hình của cơ chế Security có thể biểu diễn như sau :Với mô hình này thì không có khái niệm tất cả code cục bộ đều là code tin cậy Thayvào đó, những code cục bộ (trừ code hệ thống, những packege ứng dụng được installtrên hệ thống file cục bộ) đều được đưa vào chiến lược security giống như applet hay bấtcứ bytecode nào lấy được từ mạng

XII - Activation

1- Giới thiệu

Trong nguyên tắc hoạt động của RMI ta thấy, khi một Remote Object được tạo rađể cho các Client có thể truy cập các Method của nó thì Remote Object đó luôn tồntại trong hệ thống của JVM Server Điều này có nghĩa là một số tài nguyên của hệthống Server sẽ phải luôn chịu sự điều khiển của Remote Object đó Do đó ta có thểdễ dàng thấy rằng nếu như Remote Object đó không được sử dụng thường xuyên thìtài nguyên mà nó chiếm giữ sử dụng không hiệu quả Ngoài ra, nếu mọi RemoteObject đều ở trạng thái Active như vậy thì chẳng bao lâu, trên máy Server sẽ trànngập Remote Object

Vì vậy, để sử dụng hiệu quả hơn tài nguyên của hệ thống nói chung, trong JavaRMI người ta cung cấp cho ta một kỹ thuật để tạo ra Remote Object khác với kiểucũ, đó là kỹ thuật sử dụng Activation Chú ý là kỹ thuật này chỉ được bắt đầu hỗ trợtrong Java 2

Kỹ thuật này có nguyên tắc hoạt động như sau : khi một Remote Object A đượcđăng ký với Registry, thì thực sự ra, trong hệ thống chưa có Instance nào củaRemote Object A này được tạo ra, mà chỉ khi có một Client nào đó tham khảo đếnRemote Object A đó thì lúc này một Instance của Remote Object A mới được thực

Trang 33

sự tạo ra Và sau khi được tạo ra Remote Object này mới phục vụ yêu cầu củaClient Sau đây, sẽ là phần trình bày một cách rõ ràng cụ thể hơn về kỹ thuật này.

2- Khái niệm chung

a

Activation :

Active Remote Object là một Remote Object đã được khởi tạo ban đầu và đã được

Export ra JVM trên một hệ thống nào đó Nghĩa là nó là một Remote Object đã thựcsự tồn tại và có thể đáp ứng các yêu cầu từ phía Client JVM

Passive Remote Object là một Remote Object mà ngay cả việc khởi tạo ban đầu

cũng chưa được thực hiện

Một Object có thể chuyển đổi trạng thái từ Passive thành Active thì Object đó được

gọi là Activatable Object.

Hình 19 Activate một Object.

Việc chuyển đổi trạng thái từ một Passive Object thành một Active Object gọi là

Activation Activation đòi hỏi phải khởi tạo và phải khôi phục lại các trạng thái của

Object trước khi nó bị đưa xuống trạng thái Passive(nếu cần) Do đó, một số điềukiện được đặt ra là Activatable Object đó phải có một định danh duy nhất

(Activation Identifier) Ngoài ra, khi Activate một Object thì hệ thống còn phải

biết nơi chứa Bytecode của Object đó và nếu cần thì người lập trình phải cung cấpcho hệ thống những thông tin về trạng thái của Object đó để hệ thống có thể khôiphục lại trạng thái cần thiết cho Object đó Vì vậy, khi thực hiện đăng ký mộtActivatable Object với Registry thì ta phải cung cấp các thông tin này cho Registrybằng cách cung cấp cho Registry một Object, Object này gọi là ActivationDescriptor Object Từ đó, ta có thể thấy với mỗi Activation Identifier tương ứng với

một Activation Descriptor Object Do đó, để có được những thông tin trong Activation Descriptor Object ta chỉ cần có Activation Identifier là đủ.

Nội dung cụ thể của một Actavation Descriptor Object là :

 Group identifier của Object đăng ký(ID này sẽ xác định JVM nào sẽ làm côngviệc Activate Object tương ứng)

 Tên file class của Object và cũng là tên class của Object

 URL chỉ đến nơi chứa Bytecode của Object

 Những thông tin về việc khởi tạo Object dưới dạng đã Marshall

Trang 34

b

Faulting Remote Reference :

Thực chất, khi một Activatable Object A đăng ký với Registry thì một Instance củaStub Class của A sẽ được tạo ra và tồn tại mãi, chú ý là Instance này không bị giảiphóng mà Instance này được quản lý bởi Registry Một phần dữ liệu của Instancenày là các thông tin cần thiết cho quá trình Activate một Activatable RemoteObject, những thông tin này được đặt một tên chung là faulting remote reference.Lúc này, faulting remote reference sẽ chứa lại các thông tin :

 Persistent handle hay còn gọi là Activation Identifier của Activatable RemoteObject A Chú ý là dùng ID này ta có thể lấy được các thông tin cần thiết

 Một tham khảo tới Active Remote Object A Khi Remote Object A này chưaActive thì tham khảo này có giá trị là null, nhưng khi Remote Object A này đãđang ở trạng thái Active thì tham khảo này có giá trị là tham khảo tới RemoteObject thực sự Tham khảo này được gọi tên là transient remote reference

Hình 20 Faulting Remote Reference.

Vì vậy, khi có một lời gọi hàm tới A thì công việc của hệ thống lúc này là dựa vàocác thông tin có sẵn trong Faulting Remote Reference để thực hiện quá trìnhActivate một Object

c

Activator – Activation group :

Thường thì tại mỗi Host làm công việc Activate Object này sẽ có một Activator,Activator này sẽ thực hiện các công việc :

 Lấy các thông tin cần thiết, ví dụ như : tên file Bytecode của Object, vị trí củaBytecode đó(URL path), những dữ liệu đặc tả cho Object …

 Khởi động JVM từ xa (nếu cần vì có thể Remote Object nằm trên một máy từ xamà JVM chưa được khởi động) Sau đó gửi một yêu cầu Activate Object đếnactivation group tương ứng trên JVM (từ xa) cùng với những thông tin cần thiết

Trang 35

Hình 21 Activator – Activation Group.

Thông thường trên mỗi JVM có một Activation group, Activation group là một thực

thể đóng vai trò nhận yêu cầu Activate một Object trên Local JVM và trả về thamkhảo tới Object thực sự cho Activator

3- Nguyên tắc hoạt động

Khi có một lời gọi hàm từ xa đến Faulting Remote Reference A nào đó, nó liền sử dụngActivation Identifier để tìm kiếm Activation Descriptor Object và lấy các thông tin đểActivate Object cần thiết Lúc này, nếu nhận thấy Activation Group đã tồn tại thìActivator sẽ gửi yêu cầu Activate Object đến cho Activation Group, nếu ActivationGroup chưa tồn tại thì Activator sẽ khởi động JVM và chạy Activation Group, sau đómới gửi yêu cầu đến cho Activation Group đó

Lúc này, Activation Group sẽ Load Class cho Object tương ứng và dùng một hàm tạođặc biệt với các tham số có trong Activation Descriptor để khởi tạo Object Sau đó,Activation Group sẽ trả tham khảo tới Object về cho Activator Và việc gọi hàm xảy ranhư bình thường

4- Cách tạo ra Activation Remote Object

Từ nguyên tắc hoạt động như trên ta thấy khi tạo một Activatable Remote Object cầncung cấp các thông tin :

 Activation Description Object

 Hàm tạo đặc biệt cho Remote Object và các tham số cho nó

Tóm tắt

Tóm lại, với cơ chế Activation chúng ta có thể tạo ra một môi trường hiệu quả hơnvề lượng tài nguyên sử dụng cho việc xử lý một bài toán, nhưng nó lại có một điểmyếu là thời gian cho việc xử lý là khá lớn do phải tính thêm vào đó một thời gianOverhead cho việc thực hiện Activate một Remote Object

Trang 36

XIII - JNI (Java Native Interface)

Java là một ngôn ngữ hỗ trợ cho việc phát triển các ứng dụng phân bố, do đó ứng dụngsử dụng ngôn ngữ sẽ có thể chạy ở nhiều nơi Điều này làm nảy sinh một vấn đề là sửdụng lại các chương trình đã viết sẵn JNI (Java Native Interface) là một công cụ hỗtrợ cho việc sử dụng lại chương trình có sẵn này

2- Đặc điểm

 JNI như là một phần trung gian giữa Java và native application

Hình 22 Vị trí tương đối của JNI

 Invocation API cho phép nhúng (embed) JVM vào ứng dụng native

 Sử dụng JNI để giải quyết những vấn đề mà được giải quyết tốt hơn ở bên ngoàimôi trường lập trình

 JNI framework cho phép native method dùng Java Object giống như code Java sửdụng những object này Một native method có thể sử dụng object được tạo ra bởicode Java Tóm lại cả native language và Java của một ứng dụng đều có thể tạora,update, truy cập đối tượng Java và sau đó chia sẽ những đối tượng này vớinhau

 Native methods cũng có thể dễ dàng gọi Java method

 JNI cho phép sử dụng những ưu điểm của ngôn ngữ lập trình khác với Java

Trang 37

Tóm lại

Với JNI, về mặt xem xét RMI trong Java nói riêng, thì RMI có thể mạnh hơn do nó cóthể sử dụng lại các thư viện hoặc chương trình đã có trước đó Nhưng nhìn chung JNIgiúp cho Java có thể trở thành một ngôn ngữ có khả năng sử dụng các ưu điểm củangôn ngữ khác vào chương trình viết trong Java

Trang 38

Tổng kết phần lý thuyết

RMI là một cơ chế cho phép một Object trên một Java Virtual Machine(JVM) này gọimột Remote Method của một Remote Object trên một JVM khác

Với RMI, Java đã cung cấp cho ta một số các đặc tính sau :

 RMI cho phép các ứng dụng trên mạng được phát triển dễ dàng bởi thao tác gọi hàm

 Bởi vì RMI được tích hợp trong Java nên nó là một giải pháp mạnh để xây dựng cácứng dụng theo mô hình đối tượng phân bố trong Java Cũng chính vì điểm này màdùng RMI giảm được tính phức tạp do không dùng ngôn ngữ trung gian như một sốmô hình khác như CORBA

 Cung cấp một môi trường phân bố hướng đối tượng : với RMI chúng ta có thể truyềncác tham số không chỉ là các kiểu dữ được định nghĩa trước, mà các tham số này còncó thể là các đối tượng đầy đủ Với đặt điểm này chúng ta có thể gửi một đoạnchương trình dưới dạng một Method của một Object từ Client lên cho Server xử lýhộ

 Thừa kế được tính bảo mật cao của Java

 Không phụ thuộc vào Platform do Java là một ngôn ngữ không phụ thuộc vàoPlatform

 Không phụ thuộc vào phần cứng cấu tạo trên mạng

 Không phụ thuộc vào sơ đồ vật lý của mạng

Stub Class SkeletonClass

Transport Layer

ClientApplication

RemoteObject

Remote Reference

Layer

Mô hình RMI

Trang 39

 Dễ viết và dễ sử dụng : với Server thì người lập trình chỉ quan tâm đến giải thuật làchính yếu Với Client thì công việc chính yếu cũng chỉ là thuật giải.

 Làm theo mô hình Client – Server một cách tiện lợi

 Hỗ trợ việc load Class động, giúp cho hoạt động của ứng dụng có tính uyển chuyển

 Chuẩn giao thức mở, có thể tổ chức địa chỉ toàn cầu, điều này có thể giúp ta xâydựng một hệ thống khá lớn

 RMI còn là một mô hình muti-threaded, nó cho phép các Server khai thác tính chấtthread của Java, điều này làm Server có thể thực hiện tốt hơn cho việc xử lý đồngthời các yêu cầu của các Client

Nhưng kèm theo đó là một số nhược điểm của RMI :

 Điểm mạnh RMI là mô hình đối tượng phân bố cho Java platform cũng là điểm yếucủa RMI Vì RMI là mô hình đối tượng đơn, không có khả năng tương tác với cácmô hình Object khác Do đó, những phiên bản sau này, Sun đã phát triển choCORBA được tích hợp trong Java nên có thể RMI sẽ truy xuất được đối tượng củaCORBA

 RMI không có khả năng tự động tìm kiếm đối tượng, vì muốn có được đối tượng taphải lookup đối tượng đó, so với CORBA thì User chỉ cần biết là có sự tồn tại của đốitượng đó thì đã có thể dùng

 Thời gian Overhead cho việc định vị Object quá lớn, do phải đi tìm địa chỉ ServerObject

 Khó bảo vệ được Server (Agent) khi địa chỉ giao tiếp không còn được bảo mật

 Chuẩn giao tiếp giữa các máy đã bị che giấu do đó khó có được tính mở đối với cácObject được viết ở ngôn ngữ khác

 Hầu hết hoạt động của hệ thống phụ thuộc vào sự tồn tại của Name Server(RMIRegistry)

Từ đó ta có thể thấy ta sử dụng cơ chế RMI này vào trường hợp thích hợp nhất là :

 Khi muốn đơn giản hóa về mặt thực hiện giao tiếp giữa hai máy

 Khi muốn xây dựng một ứng dụng không phụ thuộc Platform

 Khi cần xây dựng một ứng dụng phân bố hướng đối tượng

Và để có được các ưu điểm trên, thì RMI cần phải có sự hỗ trợ của nhiều cơ chế, kỹthuật khác Ví dụ như :

 Cơ chế load class động là cơ chế cho phép một JVM có thể đi lấy định nghĩa Classcho một class mà nó chưa hiểu từ một JVM từ xa, hay cũng có thể từ chính hệ thốngfile của Local JVM

 Ưu điểm của cơ chế :

Trang 40

Cho phép hiện thực một hệ thống uyển chuyển hơn về việc load class trong khichương trình đang chạy.

Giúp cho cơ chế RMI trở nên mạnh hơn, cụ thể hơn là giúp cho RMI có thể hỗtrợ việc cho việc cho phép Client Object có thể gửi lên cho Remote Object mộtObject và nhờ Remote Object thực thi hộ một trong các Method của Object đượcgửi lên đó

 Nhược điểm của cơ chế :

Đôi khi có thể làm kéo dài thời gian Overhead một cách vô ích, đó là trườnghợp Class đó có tại Local JVM nhưng cơ chế tự động này vẫn cứ đi lấy trên mộtJVM khác

Và do việc Load Class này được tự động vì vậy cũng sẽ có lúc sẽ gây ra lỗi khihệ thống tự Load một class sai cùng tên mà User không kiểm soát được Điềunày có thể sẽ làm cho hệ thống bị sai sót

 Serialization Object làmột cơ chế của Java cho phép Java chuyển một Object thực sựtrong hệ thống thành một chuỗi Byte nhớ và truyền đi Cơ chế này giúp cho chúng tacó thể gửi và nhận một Object

 MultiThread : là kỹ thuật cho phép xử lý đa luồng trong một process, với kỹ thuậtnày giúp cho RMI có thể nhận và xử lý yêu cầu theo cơ chế MultiThread

 JNI : là kỹ thuật cho phép sử dụng lại các thư viện đã có sẵn trước đó Điều này làmJava có thể mở rộng khả năng xử lý của một thư viện sẵn có một cách dễ dàng.Và để cho hiệu quả hơn về việc sử dụng tài nguyên cho việc gọi hàm, người ta cũngcung cấp cho ta một cơ chế mà nó được phát triển từ RMI trong Java, đó là cơ chếActivation Như đã trình bày tóm lược ở trên, thì Activation là cơ chế mà hệ thống sẽ tạo

ra Remote Object mỗi khi Object đó nhận được yêu cầu từ phía Client

Ngày đăng: 21/06/2014, 14:08

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Java Network Programming [1997] Merlin and Conrad Hughes-Micheal Shoffner- Maria Winslow Khác
[2] Java Enterprise Applications [1999] Stephen Asbury – Scott R.Weiner [3] Core Java [1996] Gary Cornell – Cay S.Horstmann Khác
[4] LVTN Xây dựng dịch vụ tính toán phân bố [1999] Nguyễn Văn Nối Khác
[5] Computer Network [1996]Andrew S. Tanen Baum - Prentice Hall [6] Java Developer’s Guide [Web Book] Khác
[7] Java 1.2 and Java Script for C and C++ Programmers [1998] Micheal C. Daconta – Eric Monk – Al. Saganich- Martin Snyder Khác
[8] TCP/IP Vol I, Vol II, Vol III [1995] Douglas E. Commer – David Steven Khác
[9] Unix Network Programming [1990] W. Richard Steven Khác
[10] Parallel Programming [1999] Barry Wilkinson, Michael Allen Khác
[11]LVTN Tìm hiểu RMI, áp dụng giải quyết một số bài toán sử lý song song và phân bố Võ Văn Cường [1999] Khác
[12] Web Pages : www.sun.com – www.jini.org – www.mcp.com – www.java.developer.com Khác

HÌNH ẢNH LIÊN QUAN

Hình 1. Remote Object, Remote Method. - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 1. Remote Object, Remote Method (Trang 8)
Hình 2. Name Server. - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 2. Name Server (Trang 8)
Hình 3. Stub – Skeleton. - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 3. Stub – Skeleton (Trang 9)
Hình 4. Cơ chế hoạt động của chương trình RMI. - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 4. Cơ chế hoạt động của chương trình RMI (Trang 10)
Hình 9. ClassA là một Class mới đối với Server. - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 9. ClassA là một Class mới đối với Server (Trang 17)
Hình 13. Nguyên tắc làm việc của cơ chế RMI có dùng codebase. - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 13. Nguyên tắc làm việc của cơ chế RMI có dùng codebase (Trang 26)
Hình 15. Phân biệt giữa Remote Object Name và codebase. - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 15. Phân biệt giữa Remote Object Name và codebase (Trang 29)
Hình 20. Faulting Remote Reference. - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 20. Faulting Remote Reference (Trang 34)
Hình 21. Activator – Activation Group. - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 21. Activator – Activation Group (Trang 35)
Hình 22. Vị trí tương đối của JNI - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 22. Vị trí tương đối của JNI (Trang 36)
Hình 24 : Hoạt động tổng quan của hệ thống. - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 24 Hoạt động tổng quan của hệ thống (Trang 48)
Hình 25: Hoạt động của hệ thống - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 25 Hoạt động của hệ thống (Trang 49)
Hình 26. Lưu đồ cho cơ chế bầu cử - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 26. Lưu đồ cho cơ chế bầu cử (Trang 62)
Hình 28. Cryptographic Authenticate - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 28. Cryptographic Authenticate (Trang 66)
Hình 33 . Machine B không truy cập trực tiếp được File trên Machine A - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 33 Machine B không truy cập trực tiếp được File trên Machine A (Trang 73)
Hình 34. Machine B có thể truy cập File trên Machine A nhờ ClassFileServer. - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 34. Machine B có thể truy cập File trên Machine A nhờ ClassFileServer (Trang 74)
Hình 35. Thuật giải chương trình ClassFileServer - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 35. Thuật giải chương trình ClassFileServer (Trang 75)
Hình 36. Thuật giải cho hàm AddService. - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 36. Thuật giải cho hàm AddService (Trang 78)
Hình 37. Thuật toán cho hàmDeleteService - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 37. Thuật toán cho hàmDeleteService (Trang 81)
Hình 49. Giải thuật cho hàm AddService trên Agent. - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 49. Giải thuật cho hàm AddService trên Agent (Trang 93)
Hình 50. Xuất nhập cho hàm addUser trên Agent - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 50. Xuất nhập cho hàm addUser trên Agent (Trang 94)
Hình 55. Lưu đồ thuật toán cho hàm ServiceExecute - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 55. Lưu đồ thuật toán cho hàm ServiceExecute (Trang 96)
Hỡnh 56. Vũ trớ cuỷa chửụng trỡnh admin trong heọ thoỏng. - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
nh 56. Vũ trớ cuỷa chửụng trỡnh admin trong heọ thoỏng (Trang 98)
Hình 57. Lưu đồ thuật giải cho chương trình Admin - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 57. Lưu đồ thuật giải cho chương trình Admin (Trang 99)
Hình 59. Lưu đồ thuật toán Addservice trong chương trình Admin. - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 59. Lưu đồ thuật toán Addservice trong chương trình Admin (Trang 103)
Hình 61. Lưu đồ thuật giải cho hàm AddUser - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 61. Lưu đồ thuật giải cho hàm AddUser (Trang 104)
Hình 62. Xuất nhập cho hàm getServiceName - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 62. Xuất nhập cho hàm getServiceName (Trang 105)
Hỡnh 64. Vũ trớ cuỷa chửụng trỡnh Client trong heọ thoỏng - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
nh 64. Vũ trớ cuỷa chửụng trỡnh Client trong heọ thoỏng (Trang 106)
Hình 65. Lưu đồ thuật toán chung cho chương trình Client. - Tìm hiểu cơ chế RMI của Java và xây dựng một môi trường hỗ trợ tính toán song song và phân bố
Hình 65. Lưu đồ thuật toán chung cho chương trình Client (Trang 107)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w