KIL O B
2.4. Giới thiệu về RMI (Remote Method Invocation)
Mục đích là để tạo ra một Java distributed object model. Trong kiến trúc của RMI, cĩ một yếu tố khá quan trọng mà ta cần phải xác định rõ ràng, đĩ là việc định nghĩa ra các method và việc thực thi các method đĩ là hồn tồn khác nhau. RMI cho phép ta định nghĩa 1 method với mã thực thi của nĩ trên 1 JVM (Java Virtual Machine) và cĩ thể gọi để thực thi method đĩ trên một JVM khác.
Hình 2.8: gọi thực thi phương thức thơng qua RMI
RMI Architecture Layers: kiến trúc của RMI cĩ thể phân vào 3 lớp sau:
• Stub and Skeleton layer: lớp này cĩ nhiệm vụ giao tiếp trực tiếp với ch ng trình ng d ng, ti p nh n các l i g i method c a server t client.
KILOB OB OO KS .CO M
• Remote Reference layer: lớp này quản lý các tham khảo được thiết lập từ client đến remote object service trên server. Đây cũng là lớp dùng để thiết lập kết nối từ client đến remote object service trên server.
• Transport layer: thiết lập kết nối TCP/IP giữa các máy với nhau trên mạng để truyền dữ liệu khi lớp Remote Reference yêu cầu.
Kiến trúc 3 lớp của RMI được thể hiện như hình vẽ sau:
Hình 2.9: sơđồ kiến trúc ba lớp của RMI
Làm thế nào một client cĩ thể tìm ra một RMI remote service?
Client tìm remote service thơng qua việc sử dụng naming or directory service, (1 naming or derectory service được chạy trên một well-known host và port). Trên máy host, 1 chương trình server tạo ra một remote service bằng cách: đầu tiên nĩ tạo ra một local object để thực thi service đĩ, sau đĩ nĩ export object đĩ đến RMI. Khi một object được export, RMI tạo ra một listening service để chờ client kết nối đến. Sau quá trình export, server đăng ký object đĩ trong RMI với một public name và public name này cĩ thể được client sử dụng để kết nối với object tương ứng.
RMI (Java Remote Method Invocation) system là một cơ cấu cho phép 1 object trên 1 JVM (Java Virtual Machine) gọi method của 1 object trên 1 JVM khác. Bất kỳ các object cĩ method cĩ thểđược gọi “từ xa” đều phải thực thi (implement) interface java.rmi.Remote. Khi 1 object được gọi, các giá trị truyền cho method được gửi từ JVM cục bộ (JVM cĩ chứa chương trình phát sinh lời gọi remote method) đến JVM chứa object cĩ method đĩ và kết quả trả vềđược gửi về lại cho JVM cục bộ.
Để tạo nên 1 remote object, chương trình phải đăng ký object đĩ với RMI registry. Chương trình phải cung cấp 1 cái tên cho object đĩ khi đăng ký. Khi một chương trình nào đĩ muốn truy xuất đến 1 remote object, nĩ phải cung cấp cho RMI system tên của object mà nĩ muốn truy xuất và hệ thống sẽ trả về cho chương trình 1 reference đến remote object đĩ (gọi là stub). Khi chương trình nhận được stub của 1 remote object thì nĩ cĩ thể gọi các method của remote object đĩ cĩ trong stub.
Chuỗi tên của 1 object được RMI register chấp nhận phải cĩ cú pháp như sau “rmi:hostname:port/remoteObjectName” trong đĩ hostname và port chỉđịnh máy và port mà trên đĩ RMI registry đang chạy, và remoteObjectName là tên của remote object được đăng ký. Chú ý rằng, hostname, port và tiếp đầu ngữrmi là tuỳ chọn. Nếu hostname khơng được đặt tả thì giá trị default là localhost, giá trị default của port là 1099.
KILOB OB OO KS .CO M
trên IIOP cho phép các Java remote object khơng chỉ giao tiếp với các CORBA object viết bằng Java mà cịn bằng bất kỳ ngơn ngữ khác.
2.5.Tổng quan về Enterprise JavaBean(là thành phần chính trong đặc tả
J2EE)
Enterprise JavaBean là mơ hình lập trình ứng dụng đa tầng. Cấu trúc EJB là cấu trúc Component để phát triển và triển khai các ứng dụng nghiệp vụ phân tán. Các ứng dụng được viết với cấu trúc EJB cĩ thể bảo mật đa người dùng, chia mức và thực hiện giao tác. Những ứng dụng này cĩ thể được viết một lần sau đĩ được triển khai trên bất kỳ nền server nào mà hỗ trợđặc tả EJB.
Mơi trường mà các đối tượng Bean sẽ hoạt động gọi là trình chứa (Container). Các trình chứa sẽ kiểm sốt việc khởi tạo, cung cấp tài nguyên cho đối tượng, lưu trữ phục hồi đối tượng.
EJB server cung cấp các dịch vụ hệ thống và quản lý Container(hình 2.10). EJB server cĩ khả năng cung cấp các dịch vụ giao tác và dịch vụđăng ký và truy tìm tên đối tượng (JNDI-Java Naming and Directory Interface). EJB object bao bọc các thể hiện bean. Nĩ được sinh ra bởi các tiện ích của nhà cung cấp EJB Container. EJB object cài đặt remote interface của bean.
Hình 2.10 Quan hệ giữa EJB server và EJB container
EJB home gần giống với EJB object, nĩ được tự động sinh ra khi cài đặt enterprise bean trong Container. Nĩ cài đặt các phương thức được định nghĩa bởi
home interface và chịu trách nhiệm hỗ trợ container quản lý vịng đời bean. Kết hợp với EJB container, EJB home chịu trách nhiệm tạo, đặt, và loại bỏ enterprise bean. Khi phương thức tạo được gọi trên home interface thì EJB home tạo một thể hiện của EJB object mà tham chiếu tới thể hiện bean cĩ kiểu tương ứng. Khi thể hiện bean được kết hợp với EJB object thì phương thức ejbCreate() tương ứng của thể hiện đĩ sẽ được gọi. Khi hồn thành phương thức ejbCeate(), EJB
KILOB OB OO KS .CO M
Để cài đặt Enterprise JavaBean, chúng ta cần hai định nghĩa interface và một hoặc hai lớp: Home interface: định nghĩa phương thức vịng đời của bean: tạo một thể hiện bean mới, loại bỏ bean, và tìm kiếm bean.
Remote interface: đểđịnh nghĩa các phương thức nghiệp vụ, (mở rộng javax.ejb. EJBObject-đối tượng này lại là mở rộng của java.rmi.Remote).
Bean class: cài đặt các phương thức nghiệp vụ của bean, khơng cài đặt các phương thức của home interface và remote interface.
Primary key: là một lớp cực kỳđơn giản, cung cấp con trỏ tới cơ sở dữ liệu. Chỉ bean thực thể(entity bean) mới cần primary key.
Hoạt động: client khơng bao giờ tương tác trực tiếp với lớp bean mà nĩ luơn luơn sử dụng các phương thức giao tiếp home interface và remote interface của bean để thực hiện cơng việc của nĩ. Client sử dụng dịch vụ JNDI tham chiếu tới lớp chủ. Lớp chủ sẽ triệu gọi phương thức tạo ra tham chiếu đến lớp giao tiếp của bean rồi trả về trình khách. Trình khách triệu gọi bean thơng qua lớp giao tiếp trung gian mà do lớp chủ trả về. Lớp trung gian này là giao tiếp giữa trình chứa Container và đối tượng bean thực sự.
Như ta đã giới thiệu ở trên, enterprise bean là một thành phần phần mềm ở phía Server mà cĩ thể triển khai trong một mơi trường phân tán. Một enterprise bean cĩ thể gồm một hay nhiều các đối tượng java tại vì một thành phần cĩ thể là nhiều hơn một đối tượng đơn giản.
Cĩ các loại Bean:(Type of Beans)
Session Beans:(Bean thao tác) chỉ cĩ nhiệm vụ phục vụ trình khách trong một phiên kết nối. Bean thao tác chỉ thực hiện các hành vi xử lý, tính tốn đơn thuần khơng địi hỏi đến việc thể hiện dữ liệu. Các Session bean cĩ thể dùng bởi một máy khách tại một thời điểm, chúng khơng chia xẻ cho các máy khách khác. Khi máy khách đang dùng một session bean máy khách đĩ là máy khách duy nhất giải quyết session bean đĩ. Điều này trái ngược với entity bean, trạng thái của nĩ được chia xẻ giữa các máy khách với nhau.
Trong session bean được chia làm hai loại: Stateful Session Bean và Stateless Session Bean:
Stateful Session Bean: là các thành phần bean cần lưu lại kết quả hay vị trí giao dịch trước đĩ để phục vụ cho các lần giao dịch tiếp theo - thường phục vụ cho những thao tác địi hỏi qua nhiều bước triệu gọi trước khi trả về kết quả cuối cùng.
Stateless Session Bean: là các thành phần bean khơng lưu lại trạng thái của giao dịch trước đĩ để sử dụng lại cho lần giao dịch sau.
Session beans quản lý các xử lý nghiệp vụ. Các session bean cĩ thể sử dụng entity beans để thể hiện dữ liệu mà chúng dùng. Một điểm khác biệt giữa Session Bean và Entity Bean là: Entity Bean cĩ vịng đời lâu hơn Session Bean nhiều. Khi ứng dụng Server bị sự cố thì Entity Bean cĩ thểđược xây dựng lại trong bộ nhớ bằng cách đơn giản là đọc lại dữ liệu từ cơ sở dữ liệu bền vững.
Entity Bean:
Một phần cơ bản khác của một nghiệp vụ là bền vững dữ liệu mà xử lý nghiệp vụ sử dụng. Entity Bean chính là một thành phần mà đại diện cho bền vững dữ liệu. Entity Bean khơng chứa xử lý nghiệp vụ logic.
KILOB OB OO KS .CO M
Cĩ hai loại bean thực thể (entity bean)
Bean thực thể tự quản lý(Bean – Managed Persistent Entity Beans): là các thành phần bean cĩ khả năng tự truy vấn các hệ cơ sở dữ liệu để lấy về dữ liệu nĩ thể hiện. BMP (Bean Managed Persistent) cĩ những ưu điểm: mình cĩ thể viết mã cho các phương thức, nhất là các phương thức thao tác với nhiều bảng dữ liệu cùng một lúc. Đồng thời sẽ tiện hơn khi tạo mới dữ liệu, vì ta cĩ thể sử dụng định dạng sequence – tăng tựđộng chỉ số id trong bảng dữ liệu. Nhưng cĩ một nhựơc điểm là sẽ tốn thời gian để viết, mà chính ta viết thì cĩ thể bị lỗi.
Bean thực thể quản lý bởi trình chứa: (Container –Managed Persistent Entity Beans)
Là các thành phần bean khơng cần sử dụng lệnh SQL để tìm kiếm hay tạo mới dữ liệu mà chỉ cần khai báo các tên trường hay cột dữ liệu tương ứng với các bảng trong hệ CSDL. Trình chứa sẽ tựđộng thực hiện cơng việc truy vấn dữ liệu giúp thành phần bean. CMP(Container – Managed Persistent) lại cĩ một ưu điểm rất lớn là chúng ta khơng phải viết mã, trình chứa đã thực hiện điều này. Và như thế chương trình khơng bao giờ cĩ lỗi. Nhưng nĩ lại bất lợi ở chỗ: trường primary key cĩ kiểu java.math.BigDecimal nên khơng tận dụng được định dạng sequence của cơ sở dữ liệu. Hơn nữa, khi chúng ta cần thao tác với nhiều bảng cùng một lúc(cĩ sự join giữa các bảng) thì sẽ phức tạp hơn- cần viết thêm lớp bean kết nối hai thực thể bean của hai bảng dữ liệu kia.
Message – driven bean: xử lý các thơng điệp ( message một cách khơng đồng bộ. Nĩ tương tự như stateless session bean ở chỗ nĩ khơng lưu trữ trạng thái giao dịch. Điểm khác với Session và Entity Bean là client khơng thể truy cập chúng qua interface. Message – driven bean chỉ là một lớp bean, khơng cĩ
interface. Chỉ cần một bean này nĩ vẫn cĩ thể xử lý nhiều message từ nhiều hoặc một client. Bean này là một khối mã ứng dụng mà cĩ thể thực hiện khi message đến.