KHO TRI THỨC KHO TRI THỨC

Tiêu chuẩn JSR 168 và JSR 286 – Tiêu chuẩn kết nối ứng dụng cổng thông tin điện tử (63)
Ngày đăng 06/04/2017 | 14:08

Tiêu chuẩn JSR 168 và JSR 286 – Tiêu chuẩn kết nối ứng dụng cổng thông tin điện tử, là hai phiên bản của yêu cầu đặc tả kỹ thuật Java (Java Specification Request – JSR), được phát triển nhằm đạt được khả năng tương tác giữa các portlets (giải thích bên dưới) và portal (cổng thông tin điện tử) bằng việc định nghĩa các APIs (Application Programming Interface – Giao diện lập trình ứng dụng) cho portlets và bằng việc tiêu chuẩn hóa các quy tắc các ưu tiên, dữ liệu người dùng, yêu cầu và phản hồi của portlet, việc triển khai, đóng gói và bảo mật.

Tổng quan về JSR

Tiêu chuẩn JSR 168 và JSR 286 – Tiêu chuẩn kết nối ứng dụng cổng thông tin điện tử, là hai phiên bản của yêu cầu đặc tả kỹ thuật Java (Java Specification Request – JSR), được phát triển nhằm đạt được khả năng tương tác giữa các portlets (giải thích bên dưới) và portal (cổng thông tin điện tử) bằng việc định nghĩa các APIs (Application Programming Interface – Giao diện lập trình ứng dụng) cho portlets và bằng việc tiêu chuẩn hóa các quy tắc các ưu tiên, dữ liệu người dùng, yêu cầu và phản hồi của portlet, việc triển khai, đóng gói và bảo mật.

JSR 168 – Java Portlet Specification 1.0, được phát triển bởi Nhóm Cộng động Java (Java Community Process – JCP, chuyên phát triển các đặc tả kỹ thuật tiêu chuẩn cho công nghệ Java), và xuất bản vào tháng 10 năm 2003 với sự hỗ trợ chính của các công ty phần mềm IBM và Sun Microsystems. Kể từ khi phát hành, JSR 168 đã trải qua nhiều thử nghiệm thực tế trong xây dựng và triển khai cổng thông tin điện tử. JSR 168 định nghĩa một đặc tả portlet hướng đến một mô hình lập trình đơn giản, có tính khả chuyển, tương thích với đặc tả Servlet phiên bản 2.3.

JSR 286 – Java Portlet Specification 2.0, được xuất bản vào tháng 1 năm 2008 bởi Nhóm JCP để nâng cấp một số đặc tính mới của JSR 168. JSR 286 không phá vỡ tính tương thích mã nhị phân của JSR 168 mà duy trì các tương thích với tất cả các phương thức API. Điều này có nghĩa là tất cả các portlet trong JSR 286 có thể chạy như trong JSR 168, portlet container của JSR 286 phải hỗ trợ triển khai các portlet và các mô tả triển khai JSR 168.

Đặc điểm kỹ thuật

Một số khái niệm cơ bản

Cổng thông tin điện tử (portal)

Cổng thông tin điện tử là một ứng dụng dựa trên web – phổ biến - cung cấp thông tin cá nhân hóa, xác thực, tổng hợp nội dung từ nhiều nguồn khác nhau và lưu trữ tầng trình diễn của các hệ thống thông tin. Tổng hợp (Aggregation) là hành động tích hợp nội dung từ các nguồn khác nhau trong một trang web. Một cổng thông tin có thể có các tính năng cá nhân hóa nâng cao để cung cấp những nội dung được tùy chỉnh đến người dùng. Các trang (page) trong cổng thông tin có thể có một tập các portlet khác nhau để tạo ra nội dung cho nhiều người dùng khác nhau.

Portlet

Một portlet là một ứng dụng cung cấp một phần cụ thể của nội dung (thông tin hoặc dịch vụ) như là một phần của một trang portal. Nó được quản lý bởi một portlet container, xử lý các yêu cầu và tạo ra nội dung động. Portlet được sử dụng bởi các cổng thông tin như các thành phần giao diện người dùng có khả năng cung cấp một tầng trình diễn đến các hệ thống thông tin.

Các nội dung được tạo ra bởi một portlet cũng được gọi là một mảnh thông tin (fragment). Một fragment là một đoạn (piece) của đánh dấu (ví dụ như HTMLXHTMLWML), kế thừa một số quy tắc nhất định và có thể được tổng hợp với các fragment khác để tạo thành một tài liệu đầy đủ. Nội dung của một portlet thường được tổng hợp với nội dung của các portlet khác để tạo thành các trang của portal. Vòng đời của một portlet được quản lý bởi portlet container.

Các máy khách web tương tác với các portlet thông qua một mô hình truyền thống yêu cầu/trả lời, được thực hiện bởi các cổng thông tin. Thông thường, người dùng tương tác với nội dung được sản xuất bởi các portlet, ví dụ bằng cách theo các liên kết hoặc nộp các biểu mẫu, dẫn đến hành động portlet được nhận bởi portal, portal được chuyển tiếp đến các portlet mà tương tác người dùng hướng đến.

Các nội dung được tạo ra bởi một portlet có thể thay đổi từ một người dùng này đến một người dùng khác tùy thuộc vào cấu hình của người sử dụng cho các portlet.

Portlet Container

Một portlet container chạy các portlet và cung cấp cho chúng môi trường thời gian chạy yêu cầu. Một portlet container chứa các portlet và quản lý vòng đời của chúng. Nó cũng cung cấp lưu trữ liên tục cho sở thích của portlet. Một portlet container nhận các yêu cầu từ các cổng thông tin để thực hiện yêu cầu trên portlet được tổ chức bởi nó.

Một portlet container không thực hiện việc tập hợp các nội dung được sản xuất bởi các portlet, công việc này là trách nhiệm của các cổng thông tin.

Một cổng thông tin và một portlet container có thể được xây dựng cùng nhau và có thể được coi là một thành phần của một bộ phần mềm ứng dụng hoặc là hai thành phần riêng biệt của một ứng dụng trên cổng thông tin.

Servlet

Một Servlet là một thành phần web dựa trên công nghệ Java, được quản lý bởi một container. Cũng giống như các thành phần dựa trên Java khác, servlet là các lớp độc lập với nền tảng, có thể được biên dịch bytecode (định dạng tập lệnh được thiết kế để thực thi bởi biên dịch phần mềm) trên nền tảng trung lập mà có thể nạp vào tự động và chạy bởi một máy chủ web kích hoạt Java. Container, đôi khi được gọi là động cơ servlet, là phần mở rộng máy chủ web cung cấp chức năng servlet. Servlets tương tác với khách hàng web thông qua một mô hình yêu cầu/trả lời được thực hiện bởi các container.

JSR 168

JSR 168 định nghĩa portlet như các thành phần Web dựa trên Java, được quản lý bởi một portlet container (vật chứa portlet). Portal sử dụng các portlet như các thành phần giao diện người dùng có cung cấp một layer (lớp) biểu diễn đến các hệ thống thông tin. Mục tiêu của JSR 168 là: Xác định môi trường thời gian chạy (runtime) hoặc các portlet container cho các portlet; Xác định các API giữa portlet container và các portlet; Cung cấp cơ chế để lưu trữ dữ liệu tạm thời và liên tục cho các portlet; Cung cấp một cơ chế cho phép các portlet chứa các servlet và JSP (JavaServer Pages); Định nghĩa cách đóng gói các portlet để cho phép dễ dàng triển khai; Cho phép tính khả chuyển của portlet nhị phân trong cổng thông tin JSR 168; Chạy JSR 168 portlet như các portlet từ xa bằng cách sử dụng các dịch vụ Web cho Giao thức Portlet từ xa (WSRP).

Vòng đời cơ bản của một portlet JSR 168 gồm 3 giai đoạn: Init (khởi tạo portlet và đặt portlet vào dịch vụ); Handle requests (xử lý các loại yêu cầu khác nhau); Destroy (bỏ portlet ra khỏi dịch vụ). Portlet container sẽ quản lý vòng đời của portlet và gọi phương thức tương ứng trên giao diện.

Giao diện Portlet

Giao diện portlet bao gồm các phương thức:

- init(PortletConfig congif): khởi tạo portlet. Phương thức này còn được sử dụng để tạo ra các đối tượng/các nguồn tài nguyên được sử dụng bởi portlet;

- processAction(ActionRequest request, ActionReponse response): để thông báo cho portlet mà người dùng kích hoạt một hành động trên portlet đó;

- render(RenderRequest request, RenderResponse response): để sinh ra đánh dấu; destroy(): để chỉ ra cho portlet điểm kết thúc vòng đời.

Chế độ (mode) Portlet

JSR 168 chia chế độ portlet thành ba loại:

- Chế độ bắt buộc: Bất cứ cổng thông tin nào cũng phải hỗ trợ chế độ Edit, Help, và View. Một portlet ít nhất phải hỗ trợ chế độ View, dùng để đưa ra đánh dấu cho một trang. Chế độ Edit được sử dụng để thay đổi các thiết lập cho mỗi người dùng tùy chỉnh các đánh dấu portlet, chế độ Help được sử dụng để hiển thị một màn hình trợ giúp.

- Chế độ tùy chọn: Đây là các chế độ mà một cổng thông tin có thể hỗ trợ; khi đang ở chế độ tùy chọn, một portlet có thể không được gọi. Các chế độ tùy chọn bao gồm chế độ About để hiển thị về một thông điệp; chế độ Config cho phép các quản trị cấu hình portlet; Chế độ Edit_defaults cho phép quản trị viên cài sẵn các giá trị của chế độ Edit; chế độ Preview để xem trước hiển thị của portlet; chế độ Print để biểu diễn hình ảnh phục vụ việc in ấn.

- Chế độ theo nhà cung cấp: Các chế độ này không được định nghĩa trong đặc tả mà theo từng nhà cung cấp cụ thể.

Trạng thái cửa sổ (window states)

Một trạng thái cửa sổ chỉ ra số lượng không gian trang thuộc cổng thông tin sẽ nhận được các nội dung được tạo ra bởi một portlet. Khi gọi một portlet, portlet container sẽ cung cấp các trạng thái cửa sổ hiện tại cho portlet. Portlet có thể sử dụng trạng thái cửa sổ để quyết định bao nhiêu thông tin cần biểu diễn. Các portlet có thể thay đổi trạng thái cửa sổ của họ khi xử lý một yêu cầu hành động. JSR 168 định nghĩa ba trạng thái cửa sổ chính như sau:

- Bình thường: Chỉ ra một portlet có thể chia sẻ trang với các portlet khác. Đây là trạng thái cửa sổ mặc định.

- Tối đa: Chỉ ra một portlet có thể là một portlet duy nhất trên trang cổng thông tin hoặc portlet có nhiều không gian hơn so với các portlet khác trong trang cổng thông tin, và do đó có thể tạo ra nội dung phong phú hơn khi ở trạng thái cửa sổ bình thường.

- Tối thiểu: Chỉ ra một portlet chỉ nên biểu diễn đầu ra (output) tối thiểu hoặc không có đầu ra.

JSR 286

Trong khi JSR 168 cung cấp mô hình thành phần giao diện người dùng tổng thể thì JSR 286 tập trung vào xây dựng các ứng dụng tổng hợp được tích hợp trên các thành phần đó. JSR 286 có một số tính năng mới so với JSR 168, cụ thể:

- Sự kiện (event): cho phép một portlet để gửi và nhận các sự kiện và thực hiện các thay đổi trạng thái hoặc gửi các sự kiện như một kết quả khi xử lý một sự kiện. Cụ thể, cho phép các portlet trả lời các hành động hoặc thay đổi trạng thái không liên quan trực tiếp đến sự tương tác của người dùng với portlet. Sự kiện này có thể là một portal hoặc portlet container, được sinh ra hoặc là kết quả của một tương tác người dùng với một portlet khác. Mô hình sự kiện portlet là một mô hình trung gian, liên kết lỏng lẻo, cho phép tạo ra các portlet như các portlet độc lập, có thể được kết nối với nhau bằng các portlet khác tại thời gian chạy. Điều này có nghĩa là các portlet không cần phải là thành phần của một ứng dụng web duy nhất, nhưng vẫn có thể giao tiếp một cách độc lập.

- Tham số biểu diễn chung: cho phép portlet chia sẻ các tham số với các portlet khác. Cụ thể, tham số biểu diễn chung hướng đến chia sẻ trạng thái xem được qua các portlet. Sử dụng các tham số biểu diễn chung thay vì các sự kiện sẽ tránh được việc gọi sự kiện xử lý bổ sung và cho phép người dùng cuối sử dụng điều hướng trình duyệt và đánh dấu nếu cổng thông tin lưu trữ các tham số này trong URL (Uniform Resource Locator - Định vị tài nguyên thống nhất). Tham số biểu diễn chung được thiết lập bằng phương thức setRenderParameter (như tham số biểu diễn bình thường).

- Phục vụ nguồn tài nguyên: cung cấp khả năng cho một portlet để phục vụ một tài nguyên. Cụ thể, nó cho phép portlet phục vụ nội dung động, được thực hiện bởi kiểu URL mới, ResourceURL gọi phương thức serveResource của một portlet.

- Bộ lọc Portlet: cho phép chuyển đổi thông tin nhanh trong cả yêu cầu và trả lời từ một porle0.

JSR 286 bổ sung thêm 2 phương thức trong vòng đời portlet, bao gồm: processEvent(EventRequest request, EventResponse response) liên quan đến việc truyền thông giữa các portlet, được coi là một phản hồi cho một sự kiện; serveResource(ResourceRequest request, ResourceResponse response) được sử dụng để phục vụ nội dung động.

Ứng dụng

JSR được phát triển để cung cấp khả năng liên thông giữa các portlet và portal, được hỗ trợ bởi nhiều cổng thông tin nguồn mở và thương mại, ví dụ như: IBM, Oracle, Sun, Tibco, Apache, eXo, Jboss, Liferay, uPortal,... Trong Thông tư số 22/2013/TT-BTTTT ngày 23/12/2013 của Bộ trưởng Bộ Thông tin và Truyền thông Công bố Danh mục tiêu chuẩn kỹ thuật về ứng dụng công nghệ thông tin trong cơ quan nhà nước quy định Bắt buộc áp dụng JSR 168, Khuyến nghị áp dụng JSR 286 và được xếp vào nhóm Tiêu chuẩn về truy cập thông tin.

Cổng thông tin điện tử do FDS phát triển sử dụng nền tảng Liferay 6.2 và 7.0 đáp ứng tiêu chuẩn JSR 168 và JSR 286 (Nội dung này được bổ sung thêm vào bài viết gốc).

Trần Quốc Tuấn, P.HTTT, Cục Tin học hóa