Kiến trúc logic của Liferay Portal

Một phần của tài liệu Nghiên cứu xây dựng công nghệ Liffray Portal xây dựng cổng giao tiếp điện tử (Trang 39)

Kiến trúc logic của Liferay được thể hiê ̣n trong hình sau:

Hình 11. Kiến trúc logic của Liferay Liferay hỗ trơ ̣ các hê ̣ điều hành Windows, Mac and Linux.

JRE (Java Runtime Environment) được cài đặt trên hệ điều hành hỗ trợ để lưu trữ máy ảo Java JVM (Java Virtual Machine).

Một máy chủ ứng dụng đươ ̣c yêu cầu để chứa các thực thể Liferay . Các máy chủ đươ ̣c hỗ trợ chính thức bao gồm Apache Tomcat , Glassfish, Geronimo, Jetty, JOnAS, JBoss, và Resin. Hầu hết các máy chủ có sẵn phiên bản đóng gói , người dùng có thể tải về và triển khai trong JVM container . Các máy chủ cung cấp kết nối và khả năng tương tác bằng cách sử dụng một Enterprise Service Bus (ESB), và có nhiều dịch vụ

được cung cấp bởi các máy chủ được thừa hưởng bởi Liferay . Một số các dịch vụ chủ yếu được sử dụng bởi Liferay trên máy chủ ứng dụng , bao gồm : JNDI, JDBC, JTS, JMS, JAAS, JDO, JWS, JSP/Servlets, JavaMail.

Các ứng dụng có thể được triển khai trên máy chủ giống như bô ̣ máy (engine) tìm kiếm SOLR, hoă ̣c bô ̣ máy Rule DROOLS , hoặc Servlets Tunneling mà hơn nữa nó có thể cung cấp mở rộng hoặc tích hợp các ứng dụng bên ngoài với Liferay.

Liferay sử dụng một số công nghệ trong lõi (core) của nó để cung cấp nhiều dịch vụ khác nhau. Những công nghệ này bao gồm EJB, Hibernate, Spring và JBPM. Liferay cài đă ̣t bô ̣ máy t ìm kiếm Lucene mặc định và có thể được cấu hình để sử du ̣ng bô ̣ máy tìm kiếm SOLR , SOLR là bô ̣ máy tìm kiếm được xây dựng trên Lucene để mở rộng khả năng cung cấp phân nhóm (clustering), tìm kiếm bề mặt , lọc với những cải tiến bổ sung và mở rộng . Các portlet bridge được cung cấp để triển khai các portlet theo chuẩn JSR 168/286 và hỗ trợ các ứng dụng RIA. Liferay có chứa các bô ̣ thích ứng (adaptors) ngôn ngữ như Python , Ruby và PHP cho phép các portlet viết bằng các ngôn ngữ này được tích hợp dễ dàng vào Liferay.

Lõi quản trị (Administration Kernel ) cung cấp nền tảng cơ sở cho viê ̣c tí ch hợp và hỗ trợ tất cả các mô -đun, các công cụ hỗ trợ , các trình wizard , các dịch vụ , các thông số cấu hình listeners and runtime , để tinh chỉnh các ứng dụng máy chủ trong thời gian cha ̣y . Các s ervices builder cung cấp nền t ảng cơ bản để xây dựng và triển khai các di ̣ch vu ̣ sử du ̣ng phương pháp tiếp câ ̣n Model Driven Development (MDD)

Portlet plug -in thúc đẩy các portlet bridge nhằm sinh các portlet tự đô ̣ng cho người dùng cuối và gia tăng tích hợp RIA.

Hooks plug-in cung cấp truy cập thuận tiện để ngăn chă ̣n và thay thế các di ̣ch vu ̣ và chức năng chuẩn của Liferay (cho phép “móc” vào hê ̣ thống các thành phần xây dựng bên ngoài).

Bằng cách phát triển các đă ̣c điểm , chức năng mở rô ̣ng của Liferay , lớp Enterprise Services nằm trên cùng cung cấp các giải pháp mở rô ̣ng , đó là quản lý portal (Portal Management), quản lý nội dung (Web Content Management), quản lý tư liệu (Document Management), quản lý người dùng (User Management), quản lý luồng (Workflow Management), quản lý bảo mật (Security Management ). Những di ̣ch vu ̣ này lần lượt cung cấp các tính năng như cá nhân hóa , cô ̣ng tác, ảo hóa, mạng xã hội và tích hợp các kênh phân phối năng động, và các dịch vụ Tunneling.

3. Phát triển hệ thống trên nền tảng Liferay

Các portlet thể hiện chức năng của portal , và do đó trọng tâm của việc phát triển hê ̣ thống cổng điê ̣n tử chính là xây dựng các ứng du ̣ng porlet này.

Cổng điê ̣n tử có thể được phát triển theo hai cách sau : mô ̣t là các portlet được viết cung cấp số lươ ̣ng nhỏ các chức năng , nhiều portet được kết hợp với nhau trong portal ta ̣o thành mô ̣t ứng du ̣ng lớn; hoă ̣c hai là toàn bô ̣ ứng du ̣ng có thể được viết trong chỉ một hay một vài portlet . Trọng tâm của viê ̣c xây dựng portal chính là xây dựng các ứng dụng porlet này. Các nhà phát triển chỉ cần quan tâm đến những vấn đề xử lý xảy ra trong chính portlet ; portal server Liferay điều khiển viê ̣c thể hiê ̣n các trang và hiể n thị trên trình duyệt người dùng.

Người sử du ̣ng có thể dàn trang , sắp xếp các portlet , thay đổi giao diê ̣n trên toàn trang bằng cách cấu hình để cho ̣n khung trang (layout template) và bộ giao diện sẵn có (theme). Theme và layout template cũng có thể được tạo và tích hợp dễ dàng vào hệ thống.

Như ứng du ̣ng servlet, ứng dụng portlet trở thành chuẩn java được cài đă ̣t bởi rất nhiều nhà cung cấp portal server . Chuẩn java đi ̣nh nghĩa đă ̣c tả portlet . Chuẩn portlet JSR 168 hoă ̣c JSR 268 (JSR 268 được hỗ trợ từ Liferay 5.x trở lên) được triển khai trên bất kỳ portlet container nào hỗ trợ những chuẩn này .

Viê ̣c xây dựng các ứng du ̣ng portlet , portlet theo chuẩn java có thể được viết bởi bất kỳ nhà phát triển java nào có kinh nghiê ̣m xây dựng các ứng du ̣ng web . Liferay cung cấp mô ̣t bô ̣ plugin (Plugin Software Development Kit ) sử du ̣ng phát triển dự án portlet mô ̣t cách dễ dàng. Ta có thể xem kỹ hơn trong chương 3, phần hướng dẫn “Xây dựng ứng du ̣ng portlet trong Liferay”.

Hơn thế, Liferay hỗ trơ ̣ viết portlet trên nhiều ngôn ngữ lâ ̣p trình khác nhau như PHP, Ruby, Groovy, hay Python . Ta có thể xem và download các ví du ̣ trên

Sourceforce (http://sourcefore.net/projects/lportal).

4. Cơ chế sinh mã tự đô ̣ng

Liferay Portal hỗ trơ ̣ rất tốt khả năng sinh mã tự đô ̣ng bằng cách sử du ̣ng mô ̣t tiê ̣n ích là Service Builder. Service Builder đươ ̣c d ùng để sinh tự động tất cả mã lệnh mức thấp làm viê ̣c với CSDL . Điều này cho phép các nhà phát triển tự đô ̣ng sinh m ã tất cả các thành phần “ model” của mô ̣t portlet . Các lớp tầng bussiness và persistance được sinh mã tự đô ̣ng dựa trên file service.xml. Mỗi portlet có mô ̣t file service .xml, file này đi ̣nh nghĩa portlet và từng thực thể (entity) trong portlet. Mỗi entity tương ứng với mô ̣t bảng trong CSDL , bao gồm mô ̣t khóa chính , các trường kiểm toán (đó là các trường companyId, userId, creatDate, modifiedDate), các trường khác trong bảng, các phương thức tìm kiếm, các biệt lệ . Service builder không chỉ sinh tự đô ̣ng các interfaces cho mã lệnh java mà còn có thể sinh tự độngcả các web service và javascript.

5. Mô hình dữ liệu

Liferay đưa ra mô hình Cơ sở dữ liệu lõi như sau [27]:

6. Cài đặt, triển khai portal

6.1. Công cu ̣, môi trường phát triển

Công cu ̣ phát triển Tên công cu ̣ áp du ̣ng Miêu tả

Quản lý source code SVN Lưu trữ tài liệu, code dùng chung của nhóm

JDK 1.5.0 jdk-1_5_0_06-windows-i586-

p.exe

Application Server Tomcat 6.0.10

Database (adsbygoogle = window.adsbygoogle || []).push({});

Postgre install postgresql-8.4.2- 1-windows hoặc

SQLServer2005

Ant Ant 1.6.5/Ant 1.7.0

Dùng để deploy ứng dụng. Đã được tích hợp vào trong eclipse

IDE Eclipse

Đây là môi trường lập trình do IBM phát triển, hỗ trợ khá tốt Java Source code liferay-portal-src-5.1.2.zip liferay-portal-ext-5.1.2.zip Gói liferay-portal-ext- 5.1.2.zip có thể down trên mạng hoặc tạo môi trường phát triển Ext bằng cách build ext từ liferay-portal- src-5.1.2.zip

Các tool khác Emeditor, Dreamware,…

6.2. Các tùy chọn cài đặt

Sử du ̣ng gói demo có sẵn (open source bundle)

- Nhannh nhất, dễ dàng nhất

- Database được nhúng vào trong bộ cài

- Phù hợp để tìm hiểu chức năng Liferay Portal or để làm việc nhanh nhất với Liferay Portal

Cài đặt chi tiết sản phẩm (detailed installation proceduce)

- Cài đặt portal với application server đã có sẵn trước đó

- Phù hợp khi muốn cài đặt trên app server đã có sẵn và không muốn thay đổi

Sử du ̣ng môi trường phát triển mở rô ̣ng - Ext environment

- Cài đặt môi trường phát triển đầy đủ

- Dùng khi muốn phát triển các ứng dụng mở rộng trên Liferay Portal - Sử dụng tùy chọn cài đặt này để phát triển ứng dụng

7. Xây dựng portlet trong Liferay

Liferay hỗ trơ ̣ phát triển các ứng du ̣ng portlet viết bằng Struts, JSF, v.v. Trong phần này, ta tiến hành xây dựng mô ̣t ứng du ̣ng Struts có các tính năng cơ bản như thêm, sửa, xóa và kết nối CSDL Postgres làm ví dụ minh họa.

7.1. Tạo thư mục chứa portlet và file service.xml

Tạo thư mục demo chứa portlet trong ext- impl\src\com\ext\portlet. Sau đó tạo file service.xml trong thu mục này. Đây là file định nghĩa cấu trúc portlet. Liferay sẽ dựa vào file này để xây dựng cấu trúc database và bộ khung mã java cơ bản để tương tác với database của portlet. Nội dung file service.xml như sau:

<?xml version="1.0"?>

<!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder

4.2.0//EN" "http://www.liferay.com/dtd/liferay-service-builder_4_2_0.dtd">

<service-builder root-dir=".." package-path="com.ext.portlet"> <portlet name="demo" short-name="Demo" />

<entity name="Demo" local-service="false" remote- service="true">

<!-- PK fields -->

<column name="id" type="String" primary="true" />

<!-- Other fields --> (adsbygoogle = window.adsbygoogle || []).push({});

<column name="name" type="String" />

<column name="description" type="String" />

<!-- Order -->

<order by="desc">

<order-column name="name" /> </order>

<finder name="Name" return-type="Collection"> <finder-column name="name" />

</finder> </entity>

<exceptions>

<exception>Name</exception> </exceptions>

</service-builder>

7.2. Xây dựng cấu trúc, mã khung của portlet từ file service.xml

Thiết lập build service: Vào file ext-impl\build.xml, bổ sung nội dung (được đánh dấu)

<target name="build-service-portlet-demo"> <antcall target="build-service">

<param name="service.file"

value="src/com/ext/portlet/demo/service.xml" /> </antcall>

</target>

<target name="build-services">

<antcall target="build-service-portlet-reports" /> <antcall target="build-service-portlet-demo" />

</target>

Kích chuột phải build-service/run as/Ant Build để tự động phát sinh cấu trúc portlet và mã khung

Kết quả

7.3. Tạo, kết nối database

Ant build CSDL

Tạo bảng sử dụng trong portlet

Vào sql/portal mở file xml tương ứng với CSDL sử dụng, ở đây ta dùng portal- postgressql.xml tương ứng với CSDL Postgres

Tìm đến cấu trúc bảng đã thiết lập trong file service.xml, các trường kiểu String có kích thước mặc định là 75, có thể thay đổi kích thước các trường cho phù hợp. Lưu ý: Các kích thước thay đổi tại đây sẽ bị ghi đè nếu vì một lý do nào đó ta cần build service lại. Tuy nhiên có thể khắc phục như sau:

Thay cách thiết lập thông thường

<column name="field1" type="String" />

Bằng:

<field name="field1" type="String"> <hint name="max-length">200</hint> </field> (adsbygoogle = window.adsbygoogle || []).push({});

Sau đó copy đoạn code tạo bảng này sang màn hình SQL của database để tạo bảng. Ngoài ra có thể copy index sang màn hình SQL của database để tạo index từ sql/indexes/indexes-sql-server.xml

Lưu ý: Nếu chưa có CSDL thì xây dựng từ đầu bằng cách copy toàn bộ nội dung file portal-postgressql.xml sang past vào màn hình SQL của database để xây dựng mới CSDL

Kết nối cơ sở dữ liệu:

..\servers\tomcat\conf\Catalina\localhost\ROOT.xml

7.4. Viết các hàm trong impl

(Xem chi tiết trong mã nguồn demo kèm theo).

7.5. Thiết lập cấu hình portlet

Thiết lập cấu hình trên các file portlet-ext.xml, liferay- portlet-ext.xml, liferay- display.xml, struts-config.xml, tiles-defs.xml.

(Xem chi tiết trong mã nguồn demo kèm theo).

Định nghĩa portlet

portlet-ext.xml

liferay-portlet-ext.xml

Định nghĩa việc điều khiển hiển thị các trang

tiles-defs.xml

7.6. Viết các java action

Tạo thư mục action trong portlet , viết các file action trong đó . Các java action này có nhiệm vụ lấy dữ liệu từ các trang JSP, xử lý dữ liệu thông qua các hàm java rồi trả kết quả cho các file .JSP hiển thị dữ liệu trên trình duyệt.

(Xem chi tiết các file .jsp trong mã nguồn demo kèm theo).

7.7. Tạo các trang .JSP

Đây là nơi thể hiện việc hiển thị của portlet, các trang giao diện tương tác với người sử dụng. Ta thường tạo một file init.jsp để tạo các giá trị khởi đầu cho portlet. Sau đó các trang khác sẽ include file này.

(Xem chi tiết các file .jsp trong mã nguồn demo kèm theo).

Ngoài ra, chúng ta cũng có thể sử dụng portals bridges để chuyển một ứng dụng web đã phát triển tr ước đó thành portlet và tích hợp vào portal . Mô ̣t số bridge hỗ trợ chuyển thành các portlet, bao gồm:

 JSF portlet

 Struts portlet

 PHP portlet

 Perl portlet

Ta có thể tham khảo chi tiết và tải về các bridge này ta ̣i trang web

http://portals.apache.org/bridges/download.html

8. Xây dựng giao diê ̣n người dùng

8.1. Bô ̣ giao diê ̣n người dùng(theme)

Liferay giới thiệu khái niệm theme từ version 3.5 để giúp người sử dụng dễ dàng trong việc thay đổi “look and feel” của portal. Theme trong liferay quy định cách thức hiển thị của các thành phần dựa trên các file CSS, JavaScript, template và image. (adsbygoogle = window.adsbygoogle || []).push({});

Để tùy biến một theme phải qua 4 bước cơ bản sau: - Cấu hình các thuộc tính

- Chỉnh sửa template - Định nghĩa CSS - Chỉnh sửa JavaScript

Tất cả theme trong Liferay được dựng trên một “master theme” được biết là “Classic”. Sau đây là cấu trúc cơ bản của mô ̣t theme :

Hình 13. Cấu trúc của theme

Trong đó:

Templates: Templates gồm có các file sau:

- portal_normal.vm: file này chứa toàn bộ cấu trúc, nó bao gồm header, footer và bao gồm 2 template dock.vm, navigation.vm.

+ Thẻ <div id="wrapper"> bao gồm toàn bộ phần nội dung của portal.

+ $theme.include() được dùng để chèn nội dung của các thành phần khác vào như header, footer.

- doc.vm: file này bao gồm tất cả mã html cho dock

- navigation.vm: file này bao gồm tất cả mã html cho navigation

- portal_pop_up.vm: file này bao gồm toàn bộ cấu trúc html của cửa sổ popup - portlet.vm: file này chứa mã html mà bao bọc các portlet, bao gồm cả portlet

title và portlet-icons.

Các file template này dựa trên cấu trúc của Velocity template. Velocity template là một bộ máy template dựa trên ngôn ngữ Java. Nó là cách đơn giản nhất để phối hợp nội dung của website.

Liferay hỗ trợ các thẻ thư viện Taglib cho phép người dùng có thể nhúng các hàm thư viện này vào các file template một cách dễ dàng . Các taglib này được định nghĩa trong portal \util-taglib\src\com\liferay\taglib và người sử dụng có thể gọi chúng ra . Chẳng ha ̣n:

$theme.language(): sẽ gọi ra các ngôn ngữ mà liferay hỗ trợ $theme.journalContentSearch(): gọi ra thanh search.

$theme.search()

Các taglib này được khai báo trong portal\util-

taglib\src\com\liferay\taglib\util\VelocityTaglib.java CSS: CSS gồm các file sau:

- main.css: file này bao gồm các file css khác.

- custom.css: file này cho phép nhà phát triển chỉnh sửa thành phần của css trong các file khác nhưng không làm thay đổi các file này mà các thành phần đó được định nghĩa lại trong custom.css, điều này giúp cho việc sửa đổi và nâng cấp dễ dàng.

- base.css: file này bao gồm các style cơ bản như là style cho các element không được chỉ định trực tiếp trong các file css khác. File này sẽ thiết lập các thuộc tính css chung nhất của portal

- form.css: file này chứa toàn bộ style cho các thành phần form như : textbox, textarea, các button submit, reset …

- layout.css: file này chứa style dùng cho layout template như độ rộng của các cột, khoảng cách giữa các cột …

- navigation.css: file này chứa toàn bộ style dùng cho navigation. Navigator thường được dùng để chứa menu, ngôn ngữ hoặc thanh search của portal.

- portlet.css : file này chứa style dùng cho portlet. - tab.css : file này chứa style dùng cho tab trong portlet. JavaScript :

Liferay bao gồm thư viện javascript jQuery, điều này làm cho việc viết các mã javascript phức tạp trở nên đơn giản hơn rất nhiều.

Có 2 cách để triển khai theme, đó là:

 Triển khai theme như là một phần của portal

 Triển khai theme như một ứng dụng độc lập (adsbygoogle = window.adsbygoogle || []).push({});

Cách 1: Xây dựng theme như là một phần của portal

Chẳng hạn, ở đây ta xây dựng theme có tên là my -training theo các bước sau:

- Copy thư mục class trong ..\servers\tomcat\webapps\ROOT\html\themes vào thư mục ..\ext-web\docroot\html\themes và đổi tên thư mục classic thành my - training.

- Cấu hình các thuô ̣ c tính và đăng ký theme với portal bằng cách tạo file ..\ext-

Một phần của tài liệu Nghiên cứu xây dựng công nghệ Liffray Portal xây dựng cổng giao tiếp điện tử (Trang 39)