Mục Lục
Lời mở đầu 4
Chương I: Tổng quan về công nghệ Portal 6
I. Giới thiệu về cổng điện tử-Portal 6
1. Định nghĩa 6
2. Lịch sử phát triển 6
3. Phân loại Portal 7
4. Thuộc tính cơ bản của Portal 8
5. Chức năng của Portal 8
6. Kiến trúc của Portal 9
II. Giới thiệu về ứng dụng cổng điện tử - Portlet 12
1. Ứng dụng cổng điện tử - Portlet 12
2. Các chuẩn giao tiếp giữa Portal Server và Portlet. 13
2.1. Chuẩn IChannel 13
2.2. Chuẩn WSRP ( Web Services for Remote Portlets ) 13
2.3. Chuẩn JSR 168 ( Java Specification Request 168 ) 14
3. Ứng dụng Portal theo chuẩn JSR 168. 14
3.1. Định nghĩa 14
3.2. Những nền tảng chung của Portlet 14
Chương II: Nghiên cứu các mô hình và các công cụ hỗ trợ triển khai 26
I. Đề xuất mô hình kiến trúc tối ưu của Portlet 26
1. Giới thiệu qua về các mô hình phát triển Web thông dụng hiện nay 26
2. Đặc điểm của các ứng dụng chạy trên nền Portal (Portlet) 30
2.1 Mô hình hoạt động của một ứng dụng Portal. 30
2.2 Các yêu cầu đặt ra đối với các ứng dụng Portlet. 31
3. Nghiên cứu mô hình và công cụ truy xuất cơ sở dữ liệu 32
3.1. Mô hình truy xuất cơ sở dữ liệu theo kiểu truyên thống 32
3.2. Mô hình truy xuất dữ liệu sử dụng Hibernate Framework 34
3.2.1. Sơ lược về Hibernate Framework 34
3.2.2. Mô hình kiến trúc của Hibernate Framework 34
3.2.3. Điểm mạnh và điểm yếu của Hibernate 36
3.3. Lựa chọn mô hình truy xuất cơ sở dữ liệu 37
3.3.1. Các yêu cầu đặt ra với mô hình truy xuất cơ sở dữ liệu 37
3.3.2. Mô hình lựa chọn 38
4. Đề xuất mô hình kiến trúc đối với một ứng dụng Portlet 38
4.1 Các yêu cầu đối với mô hình kiến trúc 39
4.2 Mô hình kiến trúc tối ưu 39
II. Môi trường phát triển 40
1. Eclipse là gì ? 41
2. Yêu cầu hệ thống 41
3. Cài đặt Eclipse 41
4. Khởi động Eclipse 42
5. Các ưu điểm và nhược điểm của Eclipse. 42
6. Phân tích các đặc điểm nổi bật của Eclipse 42
7. Hoàn thành nhanh một chương trình Java 48
Chương III. Thiết kế chương trình hỗ trợ phát triển ứng dụng 51
I. Cấu trúc tổng thể của hệ thống 51
II. Mục tiêu tổng quát của hệ thống 52
III. Phân tích hệ thống 52
1. Các yêu cầu cần đạt được của hệ thống 52
2. Mô hình chức năng hệ thống 55
3. Mô hình kiến trúc tổng quan của hệ thống 57
3.1. Sơ đồ mô hình hoạt động của hệ thống 57
3.2. Mô hình hoạt động của các thành phần trong hệ thống 58
3.2.1. Kiến trúc tầng dịch vụ 58
3.2.2. Các dịch vụ cơ sở dữ liệu 60
3.3. Chương trình cắm thêm – Plugins 61
3.3.1 Mục tiêu 61
3.3.2. Thiết kế chức năng chương trình 61
3.3.3. Mô hình kiến trúc hệ thống 62
4. Mô tả kết quả của chương trình sau khi chạy thử nghiệm 65
KẾT LUẬN 70
Danh mục tài liệu tham khảo 71
71 trang |
Chia sẻ: lynhelie | Lượt xem: 1387 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Đồ án Thiết kế chương trình hỗ trợ phát triển Portlet trên cơ sở mô hình chuẩn, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
g tìm thấy), và nó trả về phần tử đầu tiên của mảng các giá trị tham chiếu.
- getValues(): truyền cho nó tên tham chiếu bạn muốn và một mảng String các giá trị mặc định và nó trả về một mảng String của các giá trị của nó.
- setValues(): truyền cho nó tên tham chiếu và một mảng String biểu diễn giá trị của tên đó, và nó thiết lập các giá trị tham chiếu. Phương thức này đưa ra một biệt lệ nếu tham chiếu không bị thay đổi UnmodifiableException .
- isReadOnly(): truyền cho nó tên tham chiếu và nó trả về một giá trị Boolean xác định tham chiếu có thể thay đổi được hay không.
- reset(): truyền cho nó tên tham chiếu và nó trả về một giá trị mặc định, nếu không, nó sẽ xoá tham chiếu.
- store(): lưu trữ các tham chiếu. Bởi đó chỉ có thể hoàn thành bên trong processAction(), nó sẽ đưa ra một biệt lệ IllegalStateException nếu nó hoàn tất trong một lời triệu gọi hồi đáp, phương thức cũng sẽ đưa ra biệt lệ ValidatorException nếu không hợp lệ.
- getMap(): trả về map của các tham chiếu. Map bao gồm các khoá String và một mảng String[ ] chứa các giá trị. Map này cũng không thể thay đổi.
Phiên làm việc
Bởi vì portal được xây dựng trên cơ chế request - response (và chủ yếu dựa trên giao thức HTTP), phải có một vài cơ chế thích hợp để bảo trì trạng thái qua các triệu gọi. Chẳng hạn, không thể thấy việc xác thực người dùng (authenticate users) với mọi yêu cầu. Có rất nhiều kĩ thuật để quản lý phiên làm việc sessions, với cookies và mã hoá URL là 2 cách thông dụng nhất của ứng dụng Web.
Session là điểm then chốt đối với nhà phát triển portlet, nhưng có nhiều cái để cài đặt chúng (implement), vì thế portlet API cung cấp giao tiếp PortletSession interface. Khi một client tạo một request, server gửi đi một định danh session trong response. Nếu client muốn kết nối vào session, client cung cấp định danh session đó cho các request tiếp sau của họ.
PortletSession có thể được sử dụng để nắm giữ các thuộc tính. PortletSession hoạt động giống như HTTPSession trong mặt này, việc cung cấp khả năng lưu trữ cặp đôi khoá - giá trị (key-value ), với đối tượng bất kỳ. Có một điểm khác nhau chủ yếu
PortletSession có 2 phần khác nhau :
- APPLICATION_SCOPE thì tương tự như phạm vi HTTPSession. Một đối tượng được đặt trong phạm vi này là thích hợp cho tất cả các portlets bên trong phiên làm việc (session).
- PORTLET_SCOPE chỉ đến khi một đối tượng là thích hợp chỉ một portlet đó. PORTLET_SCOPE là thống nhất trong cách đặt không gian tên cho một thuộc tính cho trước. Ví dụ, một thuộc tính nó tên là city.name sẽ được lưu trữ trong javax.portlet.p.47?city.name. ("47" là số định dạng được gán bên trong). Tên thuộc tính này ngăn cản namespace (không gian tên) xung đột với các portlets khác lưu trong biến session của chúng với các tên tương tự.
- Mặc dù việc có một hệ thống đặc biệt để đặt tên những thuộc tính của nó, PORTLET_SCOPE lại không bảo vệ các thuộc tính của nó với các thành phần web khác. Thêm vào đó, ứng dụng namespace (không gian tên) là hoàn toàn thực hiện dưới hood. Bạn chỉ việc gọi các phương thức getAttribute() và setAttribute() để chỉ định PORTLET_SCOPE và sự chuyển đổi không gian tên namespace được thực hiện bởi đối tượng PortletSession. Để làm cho nó thuận lợi hơn, các thành phần web khác có thể nhân tính năng này thông qua phương thức PortletSessionUtil.decodeAttribute() bằng cách truyền tên thuộc tính đơn giản, ví dụ như "city.name".
Cấu tạo ứng dụng portlet
Ứng dụng portlet được cấu tạo giống như ứng dụng Web trong đó ta có các tính năng sau :
- Có thể bao gồm servlets, JSPs, classes, file JAR (java archives), và các file tĩnh khác.
- Được đóng gói - tất cả các ứng dụng Web đều được đóng gói trong thư mục root chung.
- Có thư mục WEB-INF/classes để lưu giữ các lớp độc lập có thể tải bởi classloader.
- Có thư mục WEB-INF/lib để lưu giữ Java Archives (JAR) có thể tải bởi classloader.
- Được đóng gói thành file Web Archive (WAR)
Thêm vào các tính năng này, ứng dụng portlet còn bao gồm một file mô tả triển khai ứng dụng Web, được đặt tại WEB-INF/portlet.xml. File này được mô tả chi tiết ở chương sau "Portlet Application Deployment Descriptor.”
Các định nghĩa kiểu CSS (Cascading Stylesheets)
Nhằm đặt đến một giao diện chung và có thể plug cho các portlets, Java Portlet API định nghĩa tập các kiểu CSS (Cascading Stylesheets) mà portlet có thể sử dụng để hồi đáp các markup của chúng. Bằng cách sử dụng một tập các kiểu chuẩn, portal có thể hỗ trợ skin, tuỳ biến hoá màu sắc và font chữ. Những kiểu nầy có nghĩa đồng thời với chuẩn OASIS Web Services for Remote Portlets (WSRP).
Bằng cách sử dụng những styles này, nhà phát triển portlet đảm bảo rằng các portlet của họ có thể sử dụng lại trong các ứng dụng portlet khác, và thống nhất tương thích với WSRP. Thêm nữa, nhà phát triển có thể áp dụng các "skins" từ những ứng dụng portlet khác vào portlet của họ.
Chương II: Nghiên cứu các mô hình và các công cụ hỗ trợ triển khai
Đề xuất mô hình kiến trúc tối ưu của Portlet
Giới thiệu qua về các mô hình phát triển Web thông dụng hiện nay
Việc nghiên cứu các hệ thống Portal Engine không là chưa đủ để hỗ trợ việc phát triển ứng dụng Portal vì các ứng dụng Portal là các ứng dụng chạy trên nền tảng Web-base nên chúng ta cũng cần phải nghiên cứu về những ứng dụng Web nói chung, mô hình phát triển Web thông dụng trên thế giới và đánh giá lựa chọn những mô hình phù hợp nhất. Hiện nay trên thế giới cũng đã có nhiều mô hình xây dựng ứng dụng Web, chúng em đã thực hiện nghiên cứu các mô hình phát triển ứng dụng Web đặc biết là các mô hình được sử dụng nhiều trong công nghệ Java. Các mô hình đã được nghiên cứu một cách chi tiết bao gồm:
Mô hình tổng quan để phát triển ứng dụng Web
Hình 6: Mô hình chung của các hệ thống Web
Đây là mô hình phát triển ứng dụng Web đơn giản nhất bao gồm các thành phần cơ bản để có thể thực hiện một ứng dụng Web.
Một ứng dụng Web (Web Application) thường bao gồm các thành phần chủ yếu sau :
Web Server
Web Server là chương trình ứng dụng đón nhận tất cả các yêu cầu của người sử dụng, phân tích các yêu cầu này xem người sử dụng cần gì và sau đó sẽ gọi đến những ứng dụng dịch vụ cần thiết và sau đó trả kết quả về cho người sử dụng. Các ứng dụng dịch vụ ở đây có thể là các Application Server cũng có thể là các hệ thống quản lý File đơn giản. Kết quả được Web Server trả về là dữ liệu có cấu trúc dạng HTML để Web Browser có thể hiểu được và hiển thị cho người sử dụng.
Application Server
Đây là hệ thống thực hiện các các yêu cầu mà Web Server đưa ra. Toàn bộ những việc xử lý nghiệp vụ sẽ được thực hiện ở Application Server. Application Server có thể là những hệ thống có độ phức tạp khác nhau và các Application Server này sẽ được phát triển tùy theo độ phức tạp của nghiệp vụ.
Để xử lý được các yêu cầu của người sử dụng thì Web Application Server có thể phải sử dụng đến các hệ quản trị cơ sở dữ liệu, hay các hệ thống dịch vụ bên ngoài hoặc hệ thống File System.
File System
Trong trường hợp đơn giản một ứng dụng Web chỉ có các thành phần cơ bản là các File dạng HTML tĩnh (có nội dung không thay đổi) và được lưu trữ bởi hệ thống quản lý File. Khi người sử dụng có yêu cầu thì Web Server sẽ sử dụng hệ thống File System để đọc các File này và trả kết quả trở lại cho Browser.
Database System
Đối với những ứng dụng Web tương đối phức tạp thì thường phải có lưu trữ dữ liệu và cập nhật dữ liệu, để làm được điều này thì các Application Server phải sử dụng các hệ quản trị cơ sở dữ liệu.
Chúng ta thấy rằng với các hệ thống Web (Web Application) thì phần quan trọng nhất là Application Server. Việc phát triển các Application Server có thể ứng dụng nhiều mô hình khác nhau tùy thuộc vào các ứng dụng cụ thể. Dưới đây là một số mô hình thông dụng hiện nay.
Mô hình JSP đơn thuần
Hình 7: Mô hình JSP
Là mô hình thực hiện việc xây dựng các ứng dụng Web thông thường, mô hình này có những ưu và nhược điểm như sau:
Ưu điểm
Có thể sử dụng để phát triển các ứng dụng đơn giản, nội dung thông tin có thể thực hiện một cách khá linh động
Dễ phát triển
Nhược điểm
Vì là mô hình chỉ có hai lớp nên việc quản lý chương trình sẽ gặp khó khăn
Quá đơn giản nên khó mở rộng.
Mô hình MVC
Mô hình MVC là mô hình phát triển phát triển phần mềm có sự phân định các thành phần mô hình (model), hiển thị (View), và điều khiển (control) một cách độc lập. Việc này sẽ giúp cho hệ thống hoạt động tốt hơn và dễ kiểm soát hơn vì các phần tách biệt sẽ làm cho việc phát triển hệ thống được thực hiện một cách độc lập.
Hình 8 : Mô hình MVC
Model: Mô hình dữ liệu và các quy trình nghiệp vụ mà hệ thống cần thực hiện để thông qua đó hệ thống có thể cập nhật dữ liệu.
View: Thực hiện việc trình diễn nội dung của phần mô hình cho người sử dụng. Để làm được việc này phần View sẽ nhận những thông tin cần thiết từ phía bộ phận điều khiển để có dữ liệu hiển thị cho người sử dụng. Người sử dụng sẽ giao tiếp trực tiếp với hệ thống thông qua thành phần này.
Controller: Là bộ phận điều khiển chịu trách nhiệm thực thi tất cả các yêu cầu của người sử dụng. Việc xử lý các quy trình nghiệp vụ sẽ được thực hiện tại thành phần này của hệ thống. Sau khi thực hiện xong thành phần này sẽ tiến hành trả kết quả lại cho bộ phận View để hiển thị cho người sử dụng.
Điểm mạnh của mô hình MVC là có sự phân chia rõ ràng giữa các thành phần của hệ thống điều này giúp cho hệ thống hoạt động một cách hiệu quả hơn và chương trình cũng dễ dàng cập nhật hơn.
Mô hình JSP Model 2 architecture
JSP Model 2 architecture là mô hình lập trình sử dụng JSP nhưng áp dụng kiến trúc kiểu MVC đây là mô hình kiến trúc được sử dụng rất nhiều trong các ứng dụng Web hiện nay.
Hình 9: Mô hình JSP Model 2 architecture
Trong mô hình này bộ phận điều khiển sẽ là một Servlet Servlet này sẽ có chức năng đón nhận tất cả cá yêu cầu của người sử dụng và thực hiện việc xử lý nghiệp vụ cần thiết sau đó trả kết quả trở lại cho bộ phận hiển thị để trả lại kết quả lại phía Browser.
Bộ phận hiển thị (View) sẽ là các File JSP chuyên làm nhiệm vụ nhận kết quả của Controller và thực hiện việc tạo ra (render) dữ liệu dạng HTML để trả về cho người sử dụng.
Bộ phận Model: Là bộ phận thực hiện việc mô hình hóa các quy trình xử lý, dữ liệu cần thiết của hệ thống.
Sau khi thực hiện việc nghiên cứu và đánh giá về các mô hình kiến trúc dùng để thực hiện việc phát triển các ứng dụng Web thông thường và các ứng dụng Portal chúng em quyết định thực hiện lựa chọn mô hình kiến trúc tối ưu thực dựa trên nền tảng mô hình MVC để hỗ trợ phát triển các ứng dụng Portal. Do điều kiện về thời gian không cho phép nên chương trình hỗ trợ phát triển ứng dụng Portal của chúng em chỉ thực hiện việc hỗ trợ các ứng dụng Portal tuân thủ chuẩn JSR 168.
Đặc điểm của các ứng dụng chạy trên nền Portal (Portlet)
Mô hình hoạt động của một ứng dụng Portal.
Hình 10: Mô tả quy trình hoạt động của Portlet
Trong mô hình này Portlet là một bộ phận trên trang Web hiển thị trên Browser của người sử dụng. Portlet sẽ không giao tiếp trực tiếp với người sử dụng mà thông qua Portal Server. Tất cả các yêu cầu (request) gửi tới đều thông qua Portal Server, Portal Server sẽ làm nhiệm vụ invoke request tới Portlet Container và Portlet Container sẽ làm nhiệm vụ xác định Portlet nào phải thực hiện yêu cầu. Sau đó Portlet sẽ xử lý yêu cầu và gửi kết quả trở lại Portal Server. Portal Server lúc này sẽ làm nhiệm vụ đẩy dữ liệu nhận được từ Portlet ra vùng dữ liệu được quy định dành cho Portlet này.
Như vậy ở đây chúng ta thấy quá trình vận hành của một Portlet là rất phức tạp thông qua nhiều bước. Trong đó có quá trình giao tiếp giữa Portal Server và Portlet là quan trọng nhất. Nếu có bất cứ sự thay đổi nào từ phía này sẽ làm ảnh hưởng đến phía kia và ngược lại. Chính vì vậy nên cần thiết phải có một chuẩn giao tiếp giữa Portal Server và Portlet. Hiện nay chuẩn thông dụng nhất và được hầu hết các hãng lớn (IBM, Sun, Oracle, ) thống nhất sử dụng đó là JSR 168.
Các yêu cầu đặt ra đối với các ứng dụng Portlet.
Tính độc lập với các Portal Engine
Các ứng dụng Porlet cần phải được xây dựng độc lập với các Portal Engine có nghĩa là các Portlet cần phải chạy tốt trên các ứng dụng Portal Engine khác nhau. Điều này đảm bảo khi nâng cấp thành phần nền tảng của hệ thống thì không cần phải chỉnh sửa lại các ứng dụng và sẽ bảo toàn được đầu tư xây dựng các ứng dụng.
Hệ thống phải hoạt động được với nhiều hệ quản trị cơ sở dữ liệu
Ứng dụng Portlet cần phải hoạt động được với nhiều hệ quản trị cơ sở dữ liệu khác nhau. Đây là một trong những yêu cầu rất quan trọng vì yêu cầu thay đổi hệ quản trị cơ sở dữ liệu là một yêu cầu hoàn toàn thực tế.
Nghiên cứu mô hình và công cụ truy xuất cơ sở dữ liệu
Như chúng ta đã biết tất cả các phần mềm ứng dụng thì luôn cần phải thực hiện các thao tác với dữ liệu. Với các ứng dụng tương đối lớn thì cần có các hệ cơ sở dữ liệu chuyên dụng để thực hiện việc này. Vì vậy với mọi hệ thống phần mềm thì việc truy xuất cơ sở dữ liệu là một trong những yêu cầu bức thiết được đặt ra. Các thao tác với cơ sở dữ liệu là những thao tác đòi hỏi thực hiện một cách thường xuyên bởi vậy nên nếu các thao tác này thực hiện không hiệu quả thì sẽ làm ảnh hưởng rất lớn đến hiệu quả hoạt động của hệ thống.
Ngoài ra với các hệ thống có nhu cầu thay đổi và nâng cấp thường xuyên để đảm bảo luôn luôn có được những nền tảng công nghệ tốt nhất của cổng giao tiếp điện tử thì việc thay đổi và nâng cấp các hệ thống quản trị cơ sở dữ liệu là một yêu cầu tất yếu được đặt ra.
Bởi vậy việc lựa chọn mô hình kết nối cơ sở dữ liệu là một trong những yêu cầu quan trọng nhất của việc xây dựng các ứng dụng chạy trên cổng giao tiếp điện tử. Trong phần này chúng em sẽ đề câp tới các mô hình truy xuất cơ sở dữ liệu thông dụng trên thế giới cùng với những phân tích sơ lược về các mô hình và công cụ truy xuất cơ sở dữ liệu và cuối cùng sẽ đưa ra mô hình truy xuất cơ sở dữ liệu tối ưu được lựa chọn.
Mô hình truy xuất cơ sở dữ liệu theo kiểu truyên thống
Đây là mô hình truy xuất cơ sở dữ liệu thông dụng nhất được dùng trong các ứng dụng sử dụng công nghệ Java. Theo mô hình này các ứng dụng sẽ thực hiện việc giao tiếp trực tiếp với cơ sở dữ liệu mà không thông qua một ứng dụng trung gian nào cả.
Hình 11: Mô hình truy xuất cơ sở dữ liệu truyền thống
Mô tả mô hình:
Theo mô hình này hệ thống sẽ thực hiện việc truy xuất cơ sở dữ liệu thông qua các JDBC Driver. Các JDBC Driver sẽ thực hiện các thao tác trực tiếp với hệ quản trị cơ sở dữ liệu và trả về kết quả cho chương trình ứng dụng. Ngôn ngữ truy vấn trong kiểu truy xuất này là ngôn ngữ truy vấn SQL thông thường.
Các hệ quản trị cơ sở dữ liệu khác nhau thường có sự khác biệt về ngôn ngữ truy vấn cũng như về kiểu dữ liệu nên việc khi thay đổi chương trình quản lý cơ sở dữ liệu thì các câu truy vấn này sẽ phải thay đổi theo.
Bên cạnh đó các JDBC Driver chỉ hỗ trợ việc truy vấn cơ sở dữ liệu thông thường mà không hỗ trợ việc quản lý các giao dịch (transaction) nên người lập trình sẽ phải tự quản lý các giao dịch nếu có các truy xuất phức tạp. Đây chính là nguyên nhân gây ra khá nhiều lỗi trong các chương trình có truy xuất cơ sở dữ liệu đặc biệt là các chương trình yêu cầu thời gian phát triển ngắn và người lập trình chưa thật sự có kinh nghiệm. Đây cũng là một điểm đáng lưu ý vì chương trình hỗ trợ phát triển Portlet là chương trình được sử dụng bởi những người lập trình có năng lực khác nhau được sử dụng tại nhiều đơn vị khác nhau nên việc hỗ trợ quản lý Transaction là một trong những tiêu chí quan trọng.
Ngoài ra một điểm đáng lưu ý trong mô hình này là các JDBC Driver này sẽ khác nhau đối với các hệ quản trị cơ sở dữ liệu khác nhau. Nên khi thay đổi hệ quản trị cơ sở dữ liệu cũng phải thay đổi thư viện chứa JDBC Driver. Qua phân tích sơ bộ như vậy chúng ta có thể thấy mô hình này có những ưu điểm và nhược điểm như sau:
Ưu điểm:
Tốc độ thực hiện nhanh
Cách viết lệnh theo kiểu truyền thống
Nhược điểm:
Khi thay đổi hệ quản trị cơ sở dữ liệu sẽ phải thực hiện viết lại chương trình.
Không tiện dụng đối với người lập trình
Mô hình truy xuất dữ liệu sử dụng Hibernate Framework
Chúng ta đều biết Java là một ngôn ngữ lập trình hướng đối tượng, trong Java mọi loại thực thể đều được mô hình hóa thành các đối tượng. Ngoài ra các hệ thống cơ sở dữ liệu thông dụng hiện nay đều là các hệ quản trị cơ sở dữ liệu quan hệ (relational database). Bởi vậy với các ứng dụng sử dụng ngôn ngữ lập trình Java và có kết nối với hệ quản trị cơ sở dữ liệu quan hệ thì việc thực hiện ánh xạ các quan hệ của dữ liệu với các SQL – base Schema là một trong những vấn đề được quan tâm.
Để việc kết nối giữa các ngôn ngữ lập trình hướng đối tượng và các hệ quản trị cơ sở dữ liệu quan hệ thì cần phải có một công cụ (tool) thực hiện việc ánh xạ này. Đến nay cũng đã có một số công cụ thực hiện các thao tác này và trong số đó Hibernate là một trong những công cụ được đánh giá cao nhất.
Sơ lược về Hibernate Framework
Hibernate là một framework cho phép thực hiện ánh xạ các đối tượng và cơ sở dữ liệu quan hệ. Hibernate không chỉ thực hiện việc ánh xạ các class của Java với các bảng trong cơ sở dữ liệu quan hệ mà còn cung cấp một dịch vụ truy vấn thông qua một hệ lệnh gọi là HQL (Hibernate Query Language) việc thực hiện các thao tác cơ sở dữ liệu thông qua dịch vụ dịch vụ này sẽ làm giảm thiểu thời gian thực hiện các thao tác thực hiện một cách thủ công thông qua các câu lệnh SQL và chạy bởi JDBC.
Hibernate đã được phát triển một thời gian tương đối dài và đến nay phiên bản 3.0 với nhiều tính năng hỗ trợ lập trình nổi trội đã được hoàn thiện.
Mô hình kiến trúc của Hibernate Framework
Hình 12: Mô hình kiến trúc Hibernate
Mô tả mô hình
Ứng dụng sử dụng Hibernate để truy xuất cơ sở dữ liệu sẽ thực hiện các thao tác với cơ sở dữ liệu một cách gián tiếp. Hệ thống sẽ không trao đổi trực tiếp với hệ quản trị cơ sở dữ liệu mà thực hiện thông qua các Persistent Objects là các đối tượng tương ứng với các bảng trong cơ sở dữ liệu.
Tầng Hibernate sẽ thực hiện việc ánh xạ các bảng với các đối tượng quản lý của chương trình và việc ánh xạ này sẽ được thực hiện thông qua các File XML. Các File XML này sẽ tiến hành định nghĩa các bảng trong cơ sở dữ liệu và các class tương ứng với các đối tượng dữ liệu. Hibernate Framework sẽ thực hiện việc đọc các File XML này và tiến hành việc ánh xạ giữa các bảng và các đối tượng dữ liệu tương ứng. Sau đó các thao tác với cơ sở dữ liệu sẽ được tiến hành bởi Hibernate Framework.
Về bản chất thì Hibernate sẽ thực hiện việc ánh xạ các câu lệnh từ HQL sang câu lệnh SQL tương ứng với hệ quản trị cơ sở dữ liệu được sử dụng. Hibernate thực hiện được điều này nhờ các tham số trong File cấu hình XML. Trong File cấu hình này sẽ có các thông số về hệ quản trị cơ sở dữ liệu, các JDBC Driver tương ứng
Mô hình kiến trúc chi tiết sẽ được thực hiện như mô hình bên dưới.
Hình 13: Mô hình kiến trúc chi tiết
Khi ứng dụng muốn thực hiện các thao tác với cơ sở dữ liệu thì Hibernate Framework sẽ tiến hành thực hiện việc xác định các cấu hình của cơ sở dữ liệu được sử dụng thông qua SessionFactory, thành phần này sẽ xác định việc kết nối với cơ sở dữ liệu thông qua ConnectionProvider và gọi đến JDBC Driver tương ứng với cơ sở dữ liệu mà ứng dụng được sử dụng. Sau đó các JDBC Driver này sẽ thực hiện các thao tác trực tiếp tới cơ sở dữ liệu.
Điểm mạnh và điểm yếu của Hibernate
Cũng như mọi hệ thống dịch vụ nền tảng khác, Hibernate có nhiều điểm mạnh nhưng cũng có những điểm yếu của nó. Sau đây chúng em phân tích chi tiết các điểm mạnh và điểm yếu của Hibernate Framework và đưa ra những phân tích đánh giá để làm cơ sở cho việc quyết định cho việc lựa chọn mô hình kết nối cơ sở dữ liệu cho các ứng dụng được xây dựng bởi hệ thống hỗ trợ phát triển Portlet.
Điểm mạnh
Đặc điểm của Hibernate là có thể thực hiện được với mọi cơ sở dữ liệu mà không cần thay đổi lại các câu lệnh vì việc truy vấn không sử dụng câu truy vấn trực tiếp SQL mà thông qua hệ thống truy vấn HQL. Nếu muốn thay đổi hệ quản trị cơ sở dữ liệu thì chỉ cần thay đổi cấu hình để truy xuất tới hệ quản trị cơ sở dữ liệu. Đây chính là ưu điểm lớn nhất của Hibernate Framework.
Ngoài ra Hibernate cũng được trang bị những thư viện truy vấn chuẩn rất tiện lợi cho người sử dụng nên hiệu quả lập trình được cải thiện đáng kể vì người sử dụng không phải thực hiện một số thuật toán mà nếu dùng SQL thông thường sẽ tốn rất nhiều thời gian và công sức như thuật toán phân trang (Paging), thuật toán lọc dữ liệu (Filter),
Bên cạnh đó Hibernate từ phiên bản 3.0 đã hỗ trợ việc quản lý các giao dịch (transaction) nên việc thực hiện các thao tác cơ sở dữ liệu phức tạp sẽ được tiến hành một cách dễ dàng thuận tiện.
Như vậy có thể thấy điểm mạnh của các hệ thống sử dụng Hibernate Framework sẽ là:
Có thể chạy được với nhiều hệ quản trị cơ sở dữ liệu khác nhau mà không cần thay đổi mã nguồn chương trình
Được cung cấp một số thư viện để thực hiện một số thao tác phức tạp mà không cần phải thực hiện một cách thủ công.
Có hỗ trợ quản lý các giao dịch (transaction) nên quá trình truy xuất cơ sở dữ liệu có thể thực hiện một cách dễ dàng không gặp phải trở ngại nào.
Điểm yếu
Như trên đã trình bày về cơ chế hoạt động của Hibernate thì để truy cập vào cơ sở dữ liệu chương trình sẽ phải thực hiện một số thao tác ánh xạ:
Ánh xạ các class với các bảng trong cơ sở dữ liệu
Ánh xạ câu truy vấn từ HQL sang SQL thông thường tương ứng với hệ quản trị cơ sở dữ liệu được sử dụng. Về bản chất thì đây là quá trình biên dịch câu lệnh từ HQL sang SQL và quá trình này thường chạy tương đối chậm. Bởi vậy nên hệ thống sẽ hoạt động chậm hơn với các hệ thống sử dụng truy vấn trực tiếp thông qua các câu lệnh SQL thuần túy.
Bởi vậy có thể nói bên cạnh các ưu điểm thì Hibernate cũng có nhược điểm là làm cho việc thực hiện truy vấn sẽ chậm hơn là cách truy vấn trực tiếp thông qua JDBC.
Tuy nhiên do quá trình phát triển hệ thống nền tảng toàn bộ quá trình thông dịch từ HQL sang SQL đã được tối ưu một cách tương đối nên độ chênh lệch về mặt tốc độ giữa sử dụng Hibernate và truy vấn trực tiếp qua JDBC là không đáng kể. Qua những đánh giá của nhóm nghiên cứu chúng em thì khi sử dụng Hibernate tốc độ chương trình sẽ bị giảm 10% so với việc thực hiện thao tác trực tiếp thông qua JDBC. Bởi vậy Hibernate vẫn được sử dụng ngày càng rộng rãi nhờ những ưu điểm không thể tranh cãi của nó.
Lựa chọn mô hình truy xuất cơ sở dữ liệu
Các yêu cầu đặt ra với mô hình truy xuất cơ sở dữ liệu
Các ứng dụng Portal (Portlet) được sản xuất ra bởi hệ thống hỗ trợ phát triển Portlet sẽ là những ứng dụng hết sức đa dạng và sẽ được triển khai tại nhiều nơi khác nhau và có thể phải thực hiện với nhiều Portal Server khác nhau và quan trọng nhất có thể sẽ cần phải có khả năng làm việc với nhiều hệ quản trị cơ sở dữ liệu khác nhau. Bởi vậy cần phải có mô hình truy xuất cơ sở dữ liệu hợp lý nếu không hiệu quả của chương trình hỗ trợ phát triển Portlet sẽ bị giảm đi một cách đáng kể và khó có thể được ứng dụng rộng rãi. Yêu cầu quan trọng nhất của mô hình truy xuất cơ sở dữ liệu truy xuất cơ sở dữ liệu là phải đảm bảo không phụ thuộc vào các hệ quản trị cơ sở dữ liệu.
Như vậy các yêu cầu đặt ra với mô hình truy xuất cơ sở dữ liệu của các Portlet:
Có thể hoạt động được với các hệ quản trị cơ sở dữ liệu khác nhau
Dễ dàng trong việc thực hiện các truy xuất cơ sở dữ liệu
Đảm bảo tương đối về mặt tốc độ thực hiện
Mô hình lựa chọn
Qua những phân tích ở trên chúng em nhận thấy việc sử dụng Hibernate Framework đem lại nhiều lợi ích cho việc hỗ trợ phát triển Portlet và sẽ làm cho việc phát triển được tiến hành một cách nhanh chóng hơn nhiều so với việc sử dụng mô hình cổ điển kết nối qua JDBC.
Chúng em đề xuất mô hình kết nối cơ sở dữ liệu sử dụng Hibernate Framework để thực hiện hỗ trợ cho các ứng dụng phát triển bởi chương trình hỗ trợ phát triển Porlet. Mô hình kiến trúc hệ thống được lựa chọn thể hiện qua hình vẽ sau.
Hình 14: Mô hình truy xuất cơ sở dữ liệu
Theo mô hình hình các dịch vụ tác nghiệp (Business Logic Layer) sẽ thực hiện việc truy xuất cơ sở dữ liệu thông qua việc sử dụng Hibernate Framework. Các câu lệnh truy vấn sẽ được viết theo ngôn ngữ truy vấn HQL chứ không thực hiện truy vấn trực tiếp qua SQL.
Việc thực hiện truy xuất tới các hệ quản trị cơ sở dữ liệu sẽ hoàn toàn do Hibernate thực hiện. Ngoài ra các cấu hình để xác định hệ quản trị cơ sở dữ liệu sẽ được thực hiện bởi các File cấu hình, các File cấu hình này sẽ được thay đổi khi cần có sự chuyển đổi cơ sở dữ liệu.
Với mô hình truy xuất cơ sở dữ liệu này người sử dụng sẽ không cần quan tâm đến hệ quản trị cơ sở dữ liệu được sử dụng.
Đề xuất mô hình kiến trúc đối với một ứng dụng Portlet
Tương tự như các mô hình phát triển Web thông thường, có rất nhiều mô hình phát triển ứng dụng Portal. Qua nghiên cứu chúng ta nhận thấy các mô hình phát triển Portal về bản chất cũng giống như các mô hình phát triển Web thông thường. Tuy nhiên do các ràng buộc của các các chuẩn tương tác giữa Portal Server và ứng dụng chạy trên nền Portal mà giữa các mô hình phát triển Portlet cần có sự sửa đổi cho phù hợp. Hiện nay chuẩn phát triển ứng dụng Portal có các chuẩn cơ bản là IChannel