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
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ạn thự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 trong suố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 1 Giới thiệu đề tài - IĐề tài 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ố . - IIGiới thiệu Luận văn này giới thiệu một phương hướng suy nghó và hiện thực một môi trường hỗ trợ việc tính toán song song và phân bố bằng cách sử dụng cơ chế RMI trong Java. Chương trình hiện thực của luận văn này là một ứng dụng cung cấp cho người sử dụng những tính năng cơ bản để có thể điều khiển môi trường tính toán một cách dễ dàng tiện dụng. Về những tính năng kỹ thuật của môi trường ta có thể nói rằng môi trường cho phép người sử dụng có thể sử dụng các tài nguyên phân bố trên mạng. Cụ thể hơn, môi trường cung cấp cho người sử dụng khả năng sử dụng bộ nhớ và khả năng xử lý của CPU của những máy tính được nối với nhau trên mạng. 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ản lý 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 nhu cầ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ề Fault Tolerance 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. - IIISơ 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ên mộ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 song và phân bố. Cơ chế hỗ trợ để xây dựng đề tài là RMI trong Java, là một cơ chế Distributed Object. 1 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ài việ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òn có 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ương trì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ụng mô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ông qua 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 động củ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 Admin sẽ 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ương trì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ũng như 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ải như 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ệc xâ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ân bố, 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. 1 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ác nhau 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ụng phâ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ới nhau. Đ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 Format dữ 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ế cho việc đònh vò object cung cấp dòch vụ, điều này nhằm cung cấp công cụ cho việc thô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 đối vớ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ữ. 1 ♦ 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 giao tiế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ống hoạt động một cách ổn đònh chính xác. ♦ Persistence : Sự giao tiếp với những object thông qua một network cũng đặt ra những vấn đề như làm thế nào duy trì một tham khảo đến một remote object . ♦ Standardization Một yêu cầu đối với các cách giải quyết vấn đề của một ứng dụng có sử dụng Distribited Object là chúng phải chuẩn. Điều này là nhằm mục đích là để cho ứng dụng được viết ra được chấp nhận bởi nhiều người sử dụng, nhiều hệ thống. 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êu cầ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 qua cá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ên mạ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ư: 1 • CORBA ( Common Object Request Broker Architecture) được phát triển bởi Object 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ột trong những cơ chế về distributed object ,đó là RMI. 1 Chương 2 : Giới thiệu về RMI - IVKhái niệm chung - 1Java 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ày gọ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 Java Remote Method Invocation, hệ thống này cung cấp một số phương pháp truyền thông giữ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ôn ngữ Java, vì vậy RMI cũng phải đối phó với những vấn đề như là RPC đối phó với nhữ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ởi Java, 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ình trong RMI là phương pháp hướng đối tượng, do đó các thao tác hay các lời gọi hàm đều liê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ột Object đến cho Server xử lý, và Object này cũng có thể được xem là tham số cho lời gọi hà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 vi như một Object thực sự. - 2Remote 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ựng bởi các Interface và các Class. Interface đònh nghóa các Method, và các Class hiện thực cá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 Virtual Machine khác, hay nói khác đi là chỉ có những Method khai báo trong Remote Interface mớ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 khai bá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ột JVM khác gọi tới nó. Remote Object chứa một số các Method, những Method này cho 1 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 Method này gọi là các Remote Method. Hình 1. Remote Object, Remote Method. - 3Name Server Như trong RPC, Name Server là một Process đóng vai trò trung gian trong việc tìm kiếm tham khảo tới một Remote Object nào đó, cụ thể là nó giúp Client tìm kiếm một tham khảo (Reference) tới một Remote Object mà Client đó cần. Trong hệ thống Java RMI, Name Server có thể là một máy bất kỳ trong hệ thống của chúng ta, Name Server phả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. - 4Stub 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ọi thực thi các Remote Method của các Remote Object trên một máy Server nào đó là các 1 chương trình Client Stub và Server Stub (Java RMI gọi là Stub và Skeleton). Để có một cá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ột tham khảo tới Remote Object để Remote Object không bò Giải phóng bởi trình Gabage 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ọi hà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) : 0. Stub khác với Client Stub ở chỗ là Stub đóng vai trò là một người nắm giữ một tham 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. 1 1. Stub còn đóng vai trò quan trọng trong việc Serialize một Object, và việc truyền khai báo Class cho Skeleton khi có yêu cầu. Skeleton (RMI) so với Server Stub(RPC) : 2. 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 đó. - VNguyê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 Client và 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ác tham 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 Remote Object mà nó cần từ một máy Name Server nào đó, sau đó gọi các Method của Remote Object đó. 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. - 1Cơ 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 : 1 [...]... thì nhìn chung có 6 bước nhưng Java đã đảm nhận cho ta mộ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 Thread trong 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 cho Server thực thi hộ một vài Method Điều này lợi thế... tự động tìm và tạo mộ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ến môi trường như CLASSPATH và các Property như java .rmi. server.codebase với những cách sử dụng và cơ chế hoạt động như đã nêu ở trên - XIMô hình Java Security - 1Giới thiệu Java được thiết kế độc lập platform Bytecode của một chương... 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ơn về 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ểm yế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 gian Overhead cho việc thực hiện Activate một Remote Object 1 - XIIIJNI (Java Native Interface) Java là một ngôn ngữ hỗ trợ cho... of memory) Cơ chế Garbage Collection của Java không phải là một cơ chế quản lý bộ nhớ động hiệ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 - 5Thread 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ọi một method mà nó modify trạng thái của object đó... biên dòch và thông dòch ngay lúc chạy, để khi cần tham 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 JavaFile .java Java -classpath JavaFile 1 • 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 cho cách này như sau : Set CLASSPATH = ; Javac JavaFile .java Java JavaFile... truyền nhận dữ liệu của các Object này vậy - VIMộ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ải quyết vấn đề truyền tham số trong lời gọi hàm như thế nào, vấn đề đònh vò Remote Object 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... tượng Khi một object được lưu trữ, những object 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ững Remote 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... độ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ày giải quyết việc đònh vò Remote Object bằng cơ chế Name Server như đã... 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ột tham 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... 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ương trình mà Java phải tham khảo đến một Object thuộc một Class A mới nào đó mà JVM hiệ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