Áp dụng OSGi trong việc xây dựng hệ thống dựa thành phần

81 1.6K 8
Áp dụng OSGi trong việc xây dựng hệ thống dựa thành phần

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ LÊ HỒNG HÀ ÁP DỤNG OSGi TRONG VIỆC XÂY DỰNG HỆ THỐNG DỰA THÀNH PHẦN LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN Hà Nội - 2014 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ LÊ HỒNG HÀ ÁP DỤNG OSGi TRONG VIỆC XÂY DỰNG HỆ THỐNG DỰA THÀNH PHẦN Ngành: Công nghệ thông tin Chuyên ngành: Kỹ thuật phần mềm Mã số: 60480103 LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN NGƢỜI HƢỚNG DẪN KHOA HỌC: TS.TRẦN THỊ MINH CHÂU Hà Nội - 2014 i LỜI CAM ĐOAN Tôi xin cam đoan rằng, luận văn thạc sĩ công nghệ thông tin “Áp dụng OSGi trong việc xây dựng hệ thống dựa thành phần” là sản phẩm nghiên cứu của riêng cá nhân tôi dưới sự giúp đỡ rất lớn của giảng viên hướng dẫn là TS. Trần Thị Minh Châu, tôi không sao chép lại của người khác. Nhữngđiềuđã được trình bày trong toàn bộ nội dung của luận văn này hoặc là của chính cá nhân tôi, hoặc là được tổng hợp từ nhiều nguồn tài liệu. Tất cả các tài liệu tham khảo đều có nguồn gốc rõ ràng và được trích dẫn hợp pháp. Tôi xin hoàn toàn chịu trách nhiệm và chịu mọi hình thức kỷ luật theo quy định cho lời cam đoan của mình. Hà nội, ngày 26 tháng 10 năm 2014 Người cam đoan Lê Hồng Hà ii LỜI CẢM ƠN Trước tiên, tôi xin bày tỏ lòng biếtơn chân thành và sâu sắc đến cô giáo, TS. Trần Thị Minh Châu - ngườiđã dành nhiều tâm huyết, tận tình chỉ bảo và giúp đỡ tôi trong suốt quá trình kể từ khi tôi xin cô hướng dẫn đề tài, cho đến khi tôi hoàn thànhluận văn này. Tôi xin gửi lời cảmơn chân thành tới các thầy cô giáo khoa Công nghệ thông tin, trườngĐại học Công nghệ, Đại học Quốc Gia Hà Nội- nơi tôi đã theo họctừ bậc đại học cho đến nay. Các thầy cô đã cung cấp cho tôi những kiến thức quý báu, tạođiều kiện tốt nhất cho tôi trong suốt quá trình học tập và nghiên cứu tại trường. Cuối cùng, tôi xin chân thành cảmơn những người thân trong gia đình, đặc biệt là bố mẹ tôiđãluôn động viên vàủng hộ tôi. Xin cảmơn bạn bè cùng khóađãgiúp đỡ tôi trong quá trình học tập. iii MỤC LỤC GIỚI THIỆU 1 1.1. Giới thiệu hệ thống dựa thành phần 3 1.2. Kiến trúc phần mềm dựa thành phần 4 1.3. Đặc tính của thành phần phần mềm 5 1.4. Một số mô hình thành phần hiện tại 6 2.1. OSGi framework 10 2.1.1. Tổng quan về OSGi 10 2.1.2. Lớp Module 12 2.1.3. Lớp Lifecycle 23 2.1.4. Lớp Service 28 2.2. OSGi trong phát triển phần mềm dựa thành phần 33 2.2.1. Mô hình thành phần 33 2.2.2. Mô hình thành phần trong OSGi 33 Chương 3. ÁP DỤNG XÂY DỰNG ỨNG DỤNG BÁN HÀNG TRỰC TUYẾN 38 3.1. Phân tích kiến trúc và lựa chọn các công nghệ 40 3.1.1. Kiến trúc phân tầng và dựa thành phần 42 3.1.2. Áp dụng kiến trúc phân tầng và dựa thành phần vào ứng dụng 43 3.2. Phát triển ứng dụng 51 3.2.1. Biên dịch ứng dụng với Bndtool 51 3.2.2. Triển khai ứng dụng với Apache Felix 52 3.2.3. Các chức năng của ứng dụng 53 3.3. Đánh giá so với việc phát triển hệ thống với phương pháp truyền thống 61 4.1. Các kết quả đạt được 67 4.2. Định hướng nghiên cứu trong tương lai 68 PHỤ LỤC 1 71 PHỤ LỤC 2 72 iv BẢNG CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT STT Ký hiệu Diễn giải Tiếng Việt 1 API Application Programming Interface Giao diện lập trình ứng dụng 2 CIDL Component Implementation Definition Language Ngôn ngữ định nghĩa cài đặt thành phần 3 CIF Component Implementation Framework Framework cài đặt thành phần 4 COM Component Object Model Mô hình đối tượng thành phần 5 CORBA Common Object Request Broker Architecture Kiến trúc chung gian yêu cầu đối tượng chung 6 DS Declarative Services Một trong những mô hình thành phần để khai báo và sử dụng dịch vụ trong OSGi 7 EJB Enterprise JavaBeans Mô hình thành phần dùng cho phát triển ứng dụng doanh nghiệp với Java 8 GPS Global Positioning System Hệ thống định vị toàn cầu 9 IDE Integrated Development Environment Môi trường phát triển tích hợp 10 IDL Interface Defination Language Ngôn ngữ định nghĩa giao diện 11 JMS Java Message Service Dịch vụ truyền tin trongJava 12 JRE Java Runtime Environment Môi trường chạy Java 13 JVM Java Virtual Machine Máy ảo Java 14 REST Representational State Transfer Một phong cách kiến trúc cho hệ thống mạng. Ứng dụng phổ biến là cho dịch vụ Web 15 SCA Service Component Architechture Kiến trúc thành phần dịch vụ 16 SCR Service Component Runtime Môi trường chạy thành phần dịch vụ 17 SOA Service-Oriented Architecture Kiến trúc hướng dịch vụ 18 SOAP Simple Object Access Protocol Giao thức truy cập đối tượng đơn giản v DANH MỤC HÌNH VẼ STT Số hiệu Tên hình vẽ 1 1.1 Phát triển hệ thống phần mềm dựa thành phần 2 1.2 Kiến trúc hệ thống dựa thành phần 3 1.3 Ví dụ hệ thống dựa thành phần 4 1.4 Sự kết hợp có thể giữa client cũ và mới và các thành phần của nó 5 2.1 Kiến trúc OSGi 6 2.2 Một module định nghĩa phạm vi logic. Module tự nó cũng tường minh chỉ định lớp nào được đóng gói bên trong, lớp nào được hiện diện ra bên ngoài 7 2.3 Các lớp có phụ thuộc tường minh vì các tham chiếu trong mã nguồn. Các module có phụ thuộc ngầm định vì mã nguồn chúng bao gồm 8 2.4 Mặc dù hướng đối tượng và tính module đều cung cấp những khả năng như nhau nhưng ở các cấp độ khác nhau 9 2.5 Cấu trúc của bundle 10 2.6 Classloader trong OSGi 11 2.7 Chuỗi Classloader, nếu một Classloader không thể nạp một lớp nó sẽ chuyển cho Classloader tiếp theo 12 2.8 Khả năng thay thế 13 2.9 Một bundle fragment được gắn với một bundle chủ của nó và cùng chia sẻ một Classloader 14 2.10 Cấu trúc đánh phên bản 15 2.11 Các phụ thuộc của phụ thuộc có thể có các phiên bản không tương thích. OSGi cho phép cùng tồn tại bằng cách cô lập chúng với cái kia 16 2.12 Class Path trong Java và quản lý vòng đời trong OSGi framework 17 2.13 Vòng đời của bundle trong OSGi 18 2.14 Các lệnh OSGi tương ứng với các thao tác khi triển khai ứng dụng 19 2.15 Một dịch vụ được cung cấp bởi một bundle và được sử dụng bởi một bundle khác. Hình tam giác có đỉnh trỏ về bên cung cấp dịch vụ 20 2.16 Một service consumer có thể sử dụng nhiều instance của một dịch vụ 21 3.1 Đối tượng người dùng và chức năng của hệ thốngđặt hàng 22 3.2 Các bước xử lý khi khách hàng đặt hàng vi 23 3.3 Kiến trúc và các thành phần công nghệ trong ứng dụng 24 3.4 Kiến trúc ba tầng 25 3.5 Phụ thuộc vòng 26 3.6 Chia các tầng thành các thành phần nhỏ hơn 27 3.7 Các tầng trong ứng dụng 28 3.8 Các thành phần trong ứng dụng 29 3.9 Các thành phần và giao tiếp giữa chúng 30 3.10 Cấu trúc bundle chipshop.admin.general.ui trong Bnd project 31 3.11 Cấu trúc bundle chipshop.admin.general.ui sau khi build 32 3.12 Tương tác giữa các bundle liên quan đến sản phẩm thông qua dịch vụ 33 3.13 Các bundle xử lý đơn hàng 34 3.14 Các bundle của toàn bộ ứng dụng 35 3.15 Phát triển ứng dụng với Bndtool 36 3.16 Chạy ứng dụng trực tiếp trong Eclipse 37 3.17 Kết quả chạy unit test 38 3.18 Danh sách và trạng thái các bundle 39 3.19 Danh sách sản phẩm trên frontend 40 3.20 Xem thông tin trong giỏ hàng 41 3.21 Đăng ký và đăng nhập 42 3.22 Đặt hàng 43 3.23 Đặt hàng thành công 44 3.24 Xem lại đơn hàng đã đặt 45 3.25 Đăng nhập vào trang quản trị 46 3.26 Xem thông tin và sửa sản phẩm 47 3.27 Thêm sản phẩm, danh mục hoặc xóa danh mục 48 3.28 Sản phẩm mới tạo trên backend 49 3.29 Sản phẩm mới tạo trên frontend 50 3.30 Xem và cập nhật trạng thái các đơn hàng 51 3.31 Các bundle cung cấp chương trình khuyến mại sau khi được triển khai 52 3.32 Thực đơn khuyến mại tự động xuất hiện sau khi các bundle được triển khai 53 3.33 Thông tin khuyến mại vii 54 3.34 Dừng bundle chipshop.discounts.mongo 55 3.35 Bundle chipshop.discounts.mongo chuyển sang trạng thái Resolved 56 3.36 Thực đơn “khuyến mại” biến mất sau khi bundle chipshop.discounts.mongo bị dừng 57 3.37 Các thành phần liên quan đến khuyến mại có thể được triển độc lập và động 58 3.38 Các bundle không thể chuyển sang trạng thái Active khi các phụ thuộc và ràng buộc chưa được thỏa mãn 1 GIỚI THIỆU Các hệ thống phần mềm ngày càng trở nên phức tạp, cùng với nhu cầu phát triển nhanh và cập nhật thường xuyên, từ đó tạo ra nhu cầu cần một kiến trúc để đáp ứng được những nhiệm vụ khó khăn này. Kiến trúc dựa thành phần là một giải pháp, đặc tính cơ bản của kiến trúc dựa thành phần là chia mã nguồn thành những thành phần nhỏ, độc lập giúp ta dễ dàng hiểu, nâng cấp và bảo trì. Khái niệm hệ thống phần mềm dựa thành phần và việc phát triển hệ thống phần mềm dựa thành phần không còn là mới. Nhưng những ưu điểm của việc phát triển phần mềm theo mô hình dựa thành phần vẫn còn nguyên giá trị và ngày càng phổ biến hơn. Chia hệ thống thành các phần mã nguồn nhỏ giúp ta có thể thay đổi, cập nhật hoặc đơn giản thay thế nó mà không ảnh hưởng đến các phần khác của hệ thống. Để đưa kiến trúc dựa thành phần từ thiết kế áp dụng vào thực tế không hề đơn giản và dễ dàng và không thể thực hiện được nếu chỉ sử dụng Java thuần túy. OSGi giúp ta thực hiện được điều này cùng với Java. Ngoài việc giúp ta phát triển một hệ thống dựa thành phần OSGi cũng khắc phục một số nhược điểm còn tồn tại của class path trong Java, tránh được những lỗi khi hệ thống đang chạy (run time) rất thường xuyên xảy ra với một hệ thống lớn và phức tạp. Triển khai hay cập nhật các thành phần khi hệ thống vẫn đang chạy mà không phải khởi động lại, điều này không thể có được với một hệ thống phát triển với Java thông thường. Những ưu điểm mà OSGi mang lại là rất rõ ràng, tuy nhiên trước đây OSGi thường có tiếng là quá phức tạp và khó sử dụng, do vậy OSGi còn chưa được sử dụng rộng rãi. Gần đây có nhiều sự thay đổi về công cụ phát triển cũng như framework. Trong luận văn tôi đã tìm hiểu và đưa ra những kinh nghiệm lập trình, áp dụng những công nghệ, kỹ thuật được cho là tốt nhất hiện có với nhiều ưu điểm như dịch vụ Web RESTful đang dần thay thế SOAP và WSDL, NoSQL hay AngularJS [21,23,16]. Kết hợp với OSGi để đưa ra lựa chọn cho một kiến trúc hiệu quả giúp ta không còn tốn nhiều thời gian để lựa chọn kiến trúc cũng như công nghệ trước khi phát triển một hệ thống, nhất là hệ thống lớn và phức tạp. Giúp ta có nhiều thời gian tập trung vào phát triển nghiệp vụ cho hệ thống. Nội dung luận văn chia thành bốn chương. Chương 1 tìm hiểu về các khái niệm trong hệ thống dựa thành phần, kiến trúc dựa thành phần và phát triển hệ thống phần mềm dựa thành phần. Tìm hiểu, phân tích một số mô hình thành phần hiện tại và đưa ra lựa chọn mô hình phù hợp cho phát triển phần mềm hiện nay. Chương 2 tìm hiểu về lịch sử, kiến trúc và các đặc tính của OSGi. Từ đó hiểu rõ về kiến trúc, mục đích thiết kế giúp OSGi có được những đặc tính phù hợp với việc phát triển hệ thống dựa thành phần, bổ sung và khắc phục những nhược điểm còn tồn tại trong Java chuẩn. Chương 3 trình bày việc áp dụng OSGi để xây dựng một hệ thống bán hàng trực tuyến theo kiến trúc dựa thành phần. Trình bày việc phân tích kiến trúc hệ thống, tìm hiểu những [...]... TRIỂN PHẦN MỀM DỰA THÀNH PHẦN 1.1 Giới thiệu hệ thống dựa thành phần Xây dựng hệ thống dựa thành phần là hướng tiếp cận dựa trên ý tưởng sử dụng lại các thành phần phần mềm thay vì phát triển các thành phần lại từ đầu” [4] Từ quan điểm đó các thành phần được định nghĩa, cài đặt và sau đó các thành phần độc lập, có mối quan hệ không chặt chẽ với nhau được kết hợp đưa vào hệ thống Xây dựng hệ thống dựa thành. .. thành phần khác qua giao diện này Khi một thành phần cung cấp dịch vụ cho phần 5 còn lại của hệ thống, nó thông qua giao diện để xác định dịch vụ mà các thành phần khác có thể sử dụng và sử dụng như thế nào Giao diện này có thể được xem như là chữ ký của thành phần Hình 1.3 mô tả các thành phần trong một hệ thống dựa thành phần và giao tiếp giữa các thành phần trong hệ thống Hình 1.3: Ví dụ hệ thống dựa. .. sử dụng lại các thành phần có sẵn và chỉ phải phát triển những thành phần nghiệp vụ riêng của ứng dụng Hình 1.2 mô tả kiến trúc của một hệ thống dựa thành phần, ứng dụng 1 có thể sử dụng chung thành phần 2 và A với ứng dụng 2 và nó chỉ phải phát triển các thành phần A, B, C Hình 1.2: Kiến trúc hệ thống dựa thành phần Mỗi thành phần có một giao diện được định nghĩa rõ ràng và chúng giao tiếp với các thành. .. hình thành phần Các thành phần giao tiếp với nhau thông qua các giao diện (interface) Thành phần phần mềm có thể được triển khai (deploy) độc lập, là đối tượng để cấu thành hệ thống phần mềm và cũng là đối tượng được cung cấp bởi bên thứ ba (third party) trong phát triển phần mềm dựa thành phần [6] Mô hình thành phần: “Mô hình thành phần định nghĩa định dạng và giao diện chuẩn giữa các thành phần. .. dựa thành phần 1.3 Đặc tính của thành phần phần mềm Một thành phần phần mềm có những đặc tính sau [6]: - Đóng gói (Encapsulated): Client có thể sử dụng mà không cần biết về cài đặt cụ thể cũng như là các công việc bên trong của thành phần Ví dụ hệ thống trong hình 1.3 trên thì thành phần đặt phòng khách sạn sẽ sử dụng dịch vụ của thành phần thanh toán Nó chỉ cần biết đến giao diện IBilling để sử dụng. .. các thành phần có thể được triển khai và giao tiếp với nhau” [4] Phần mềm dựa thành phần được cấu tạo nên bởi các thành phần phần mềm Tất cả các quy trình của hệ thống được đặt trong các thành phần tách biệt, do đó tất cả các chức năng và dữ liệu bên trong mỗi thành phần là có liên quan với nhau về mặt ý nghĩa nào đó Do vậy người ta thường nói các thành phần có tính module và gắn kết Các thành phần. .. dựa thành phần mang lại nhiều ưu điểm như phát triển nhanh, giảm giá thành, khả năng sử dụng lại tốt hơn Hình 1.1 minh họa việc sử dụng lại các thành phần từ các nguồn cung cấp sau đó sắp xếp và cài đặt thành một hệ thống phần mềm Hình 1.1: Phát triển hệ thống phần mềm dựa thành phần Các hệ thống phần mềm ngày càng trở nên phức tạp và cung cấp nhiều tính năng hơn Để có thể tạo ra các sản phẩm phần mềm... cấp thường sử dụng công nghệ dựa thành phần thay vì phát triển tất cả các phần của hệ thống từ đầu Động lực đằng sau việc sử dụng các thành phần là giảm thiểu giá thành phát triển, nhưng về sau nó trở thành việc quan trọng hơn đó là giảm thiểu thời gian để đưa sản phẩm ra thị trường, nhằm áp ứng nhu cầu cấp thiết của khách hàng Các kỹ sư phần mềm quan tâm đến các thành phần như một phần nền móng cho... và không cần biết thành phần thanh toán sử dụng thanh toán qua credit card, tiền mặt hay một phương thức thanh toán nào khác - Chuẩn hóa (Standardised): Chuẩn hóa thành phần có nghĩa là các thành phần sử dụng trong hệ thống dựa thành phần phải tuân theo một số mô hình thành phần đã được chuẩn hóa Mô hình này có thể định nghĩa các giao diện cho thành phần, meta-data, cấu tạo của thành phần, triển khai... công cụ sau này cũng hỗ trợ việc sử dụng lại các thư viện Java thông thường trong OSGi Với những đặc tính như đã phân tích rõ ràng OSGi là một lựa chọn hàng đầu cho việc phát triển hệ thống phần mềm dựa thành phần hiện nay 10 Chƣơng 2 OSGi VÀ PHÁT TRIỂN PHẦN MỀM DỰA THÀNH PHẦN 2.1 OSGi framework 2.1.1 Tổng quan về OSGi OSGi xuất hiện lần đầu tiên năm 1999 Ban đầu OSGi được gọi là “Open Service Gateway . của thành phần. Hình 1.3 mô tả các thành phần trong một hệ thống dựa thành phần và giao tiếp giữa các thành phần trong hệ thống. Hình 1.3: Ví dụ hệ thống dựa thành phần 1.3. Đặc tính của thành. cho hệ thống. Nội dung luận văn chia thành bốn chương. Chương 1 tìm hiểu về các khái niệm trong hệ thống dựa thành phần, kiến trúc dựa thành phần và phát triển hệ thống phần mềm dựa thành phần. . Phát triển hệ thống phần mềm dựa thành phần 2 1.2 Kiến trúc hệ thống dựa thành phần 3 1.3 Ví dụ hệ thống dựa thành phần 4 1.4 Sự kết hợp có thể giữa client cũ và mới và các thành phần của

Ngày đăng: 04/09/2015, 22:55

Tài liệu cùng người dùng

Tài liệu liên quan