III. Kiến trúc uPortal
4. Kênh (channel)
Các kênh là đơn vị thông tin của uPortal, uPortal tạo ra các kênh nhằm mục đích thực hiện các mục đính chứ không bắt buộc mọi thứ phải làm như thế nào.
Chu trình của một kênh được quản lý bới giai đoạn sau. Khởi tạo :
1. Trong giai đoạn này tất cả các lớp của kênh và các tập tin
cấu hình liên quan cần thiết sẽ được tạo ra. Một tài liệu xuất bản kênh (channel publishing document-CPD ) cũng được tạo, tài liệu này sẽ cung cấp các thông tin mô tả về
mục đích của kênh, xác định lớp java của kênh, mô tả những tham số cấu hình, phát thảo quy trình để xuất bản kênh. Những bước mô tả trên thường được giải quyết bởi tác giả kênh. Sau bước này kênh có thể được phân phối để cài đặt vào uPortal.
Đăng ký :
2. Khi người quản trị về cài đặt của uPortal yêu cầu một
kênh mới, kênh đó sẽ được đăng ký với hệ thống, trong suốt quá trình đăng ký này, uPortal sẽ kiểm tra xem kênh này có tồn tại không, và kênh sẽ được gán bới channelTypeId.
Xuất bản :
3. Để một kênh đã được đăng ký có giá trị với người dùng
thì nó phải thông qua một quá trình xuất bản. Trong suốt quá trình này cấu hình của kênh sẽ được quyết định bằng cách đăng ký giá trị với tham số của kênh. Và cấu hình kênh được đăng ký với một channelPublishId. Sau đó sẽ
______________________________________________________________________________________
Subscription :
4. Người sử dụng uPortal có thể đi xuyên xuốt quá trình
đăng ký để đưa một kênh vào trang sử dụng của mình. Kênh này sẽ được gán một channelSubcribeId duy nhất trong phạm vi người sử dụng đó.
Kênh là những đối tượng java thực thi giao diện
org.jasig.portal.IChannel, và là những thực thể lưu vết trạng thái. Các giao diện (interface) của kênh
IChannel :
Đây là giao diện chính của kênh trong uPortal, các phương thức sau đây sẽ được gọi tuần tự.
1.setStaticData() sẽ được gọi chỉ một lần ngay sau khi có đối
tượng kênh.
2.Mỗi vòng thể hiện sẽ bao gồm việc gọi tới phương thức
setRuntimeData(), cuối cùng là gọi phương thức renderXML().
3.Phương thức receiveEvent() có thể được gọi trong suốt vòng
thể hiện, luôn luôn được gọi trước phương thức renderXML().
4.Phương thức getRuntimeProperties() sẽ được gọi trong suốt
chu trình hiển thị, trước phương thức renderXML() và sau phương thức setRuntimeData().
IPrivileged :
Một vài kênh muốn truy cập trực tiếp vào cấu trúc của khung sườn uPortal, giao tiếp rõ ràng với các đối yêu cầu và đáp ứng HTTP, và tiến trình ưu tiên. Các kênh này phải thực thi giao diện org.jasig.portal.IPrivileged, và được coi như là những kênh được tin cậy. Những kênh này được đưa vào các đối tượng PortalControlStructure tại mỗi chu trình hiển thị, các đối tượng này sẽ cung cấp cho chúng với những truy cập trực
______________________________________________________________________________________
tiếp vào nhân của uPortal. uPortal bảo đảm rằng nếu tham số yêu cầu được chỉ đến kênh đặc biệt, phương thức setRuntimeData() của kênh đó sẽ được gọi trước tất cả các phương thức của kênh khác trong phiên hiện tại bắt đầu chu trình hiển thị của chúng. uPortal giả định rằng các kênh đặc biệt sẽ không tự xóa nó trong bố cục người dùng.
ICacheable
Kênh có thể thực thi giao diện này nếu muốn lưu vêt nội dung của nó vào trong khung sườn uPortal, trong hầu hết các trường hợp thì lưu vết cho phép làm tăng tính hiệu năng của chương trình, giao diện này yêu cầu kênh phải phát sinh ra những khóa duy nhất theo các trạng thái của kênh.
IMutilthreadedChannel
Một vài trường hợp có nhiều hơn một kênh là rất quan trọng, các kênh có thể chọn để có một thực thể của lớp của nó mà phát sinh ra nội dung cho toàn bộ các biến cố của kênh đó trong bố cục người dùng, điều này có thể làm được nhờ thực thi giao diện org.jasig.portal.IMutilthreadedChannel thay vì thực thi org.jasig.portal.IChannel.
Inter-channel communication
uPortal cung cấp cho các kênh trong cùng một bố cục khả năng tương tác lẫn nhau, ngữ cảnh JNDI được lấy về từ đối tượng ChannelStaticData, chứa một “/channel_ids/” của kênh nằm trong bố cục người dùng. Một khi channelSubscriberId được biết sự giao tiếp giữa các kênh sẽ được thiết lập thôngqua hai cách đó là tham số URL hay định vị một channel-bound ngữ cảnh con trong “/channel-obj” là một
______________________________________________________________________________________
tên giống theo channelSubsribeId của kênh chứa ngữ cảnh con đó
Channel Services
Những thực thể cung cấp các chức năng thông thường cho kênh trong uPortal, có thể được đăng ký và giữ trong “/services” của JNDI. Mà trong đó sẽ có giá trị trong ngữ cảnh mà được đưa ra cho các kênh trong đối tượng ChannelStaticData. Dịch vụ có thể được sử dụng để cung cấp cấu trúc, các cách khác nhau để các kênh có thể giao tiếp với nhau.
Workers
Khung sườn uPortal cố gắng hạn chế khả năng của các thành phần đơn lẻ (chẳng hạn như kênh) trong việc điều khiển những thông tin xuất của servlet. Trong một vài trường hợp, người ta mong muốn rằng một vài đơn vị giành được việc kiểm soát toàn bộ đáp ứng HTTP trong khi đó vẫn để lại một phần cho uPortal. Ví dụ một kênh có thể được yêu cầu để phục vụ việc đáp ứng tập tin hay phim ảnh (bianry stream). Chức năng đó có thể thực hiện được nhờ vào việc sử dụng
workers, với việc thực thi phương thức
ChannelRuntimeData.getWorkerActionURL(), workers được cấu hình trong tập tin worker.properties.
Phân loại channel trong uPortal
Trong các phiên bản uPortal trước đây, uPortal chỉ hổ trợ các loại channel sau :
1. Image
o Đây là một loại kênh đơn giản nhất, sử dụng trong các mục
______________________________________________________________________________________
với các tinh chỉnh tùy biến (rộng, cao và các thuộc tính của hình ảnh)
o Sử dụng loại kênh này, người sử dụng phải cung cấp các địa
chỉ hình ảnh từ một nguồn nào đó (có thể là địa chỉ của một trang web chứa hình), liên kết, chiều cao, độ rộng, độ sáng tối của hình ảnh.
2. Inline Frame
Kênh này được sử dụng nhằm đưa toàn bộ một trang định dạng HTML lên uPortal thông qua một khung, tuy nhiên chỉ chạy được trên các phiên bản IE 5.0, Netscape 6.0 trở lên. Và chạy không ổn định trên các phiên bản Netscape. Sử dụng loại kênh này, người sử dụng phải cung cấp địa chỉ của trang web cần đưa lên một khung định sẵn trong uPortal.
3. RSS (Rich Site Summary)
o Đây là một loại kênh thông thường, tất cả nội dung được định
nghĩa dưới dạng một tài liệu XML, được gắn vào rss xác định.Sử dụng loại kênh này, người sử dụng phải cung cấp địa chỉ của tập tin rss.
4. Simple XML Transformation
o Nội dung của channel được định nghĩa dưới dạng một tập tin
XML, và định dạng phải được chuyển đổi bởi tài liệu XSL (hay còn gọi là XSLT) Sử dụng loại kênh này, người sử dụng phải cung cấp địa chỉ của tập tin XML và XSL.
5. Web Proxy
o Đây là một trong những cách để tích hợp một ứng dụng web
có sẵn vào trong uPortal thay vì phải viết một kênh sử dụng xml và xslt.
______________________________________________________________________________________
6. Custom
o Đây là loại kênh được sử dụng để xuất bản những kênh với
nội dung động, phục vụ mục đích cụ thể, đây là một kênh linh động và mạnh mẻ, được khuyến khích sử dụng trong uPortal. Tất cả các loại kênh khác đều được kế thừa từ loại kênh này.
o Người sử dụng phải biết lập trình, và các định dạng xml, xslt.
Ngoài ra trong các phiên bản uPortal sau này, uPortal còn hổ trợ thêm portlet. Porlet là một chuẩn chung có thể chạy trên các hệ thống cổng thông tin khác nhau, như lifefray, stringbeans… hay các hệ thống cổng thông tin doanh nghiệp như Oracle portal, WebSphere portal. Để tích hợp được portlet trong uPortal, những người phát triển uPortal đã tích hợp vào nhân của uPortal một hệ thống chứa (cotainer system) là ‘pluto’ (một cổng thông tin nhỏ gọn, thường làm môi trường kiểm tra). Pluto phục vụ như là một nơi chứa portlet thực thi portlet API và cung cấp cho các lập trình viên một môi trường kiểm tra các portlet mà họ phát triển. Hiện nay pluto đã có phiên bản 1.1, dễ sử dụng và dể dàng tích hợp và trong hệ thống cổng thông tin bất kỳ.