Friday, August 3, 2012

Tổng quan CMIS, Apache Chemistry và ứng dụng trong Alfresco, Android

I -  Tổng quan CMIS
1. Khái niệm
Mục tiêu của Content Management Interoperability Services (CMIS) là cung cấp một tập các dịch vụ (services) tương tác với các hệ quản trị nội dung. Chuẩn này được sáng lập bởi IBM, Microsoft và EMC và mở rộng ra năm 2007 với Alfresco, Open Text, SAP, và Oracle. Hiện tại CMIS sở hữu bởi Hội đồng kỹ thuật (Technical Committee) OASIS.
CMIS không phải là một đặc tả ngôn ngữ, nó không diễn giải cách mà một hệ quản trị nội dung làm việc và không phải là các dịch vụ giúp mở rộng tính năng cho các hệ quản trị nội dung. Mục tiêu của CMIS là định nghĩa tập các hàm thông dụng khi làm việc với các hệ quản trị nội dung và các dịch vụ. Cả REST và SOAP đều được hỗ trợ bởiCMIS. Những người quan tâm đến CMIS thường nói rằng chuẩn này có tầm quan trọng với các hệ quản trị nội dung ngang với tầm quan trọng của SQL với các ứng dụng database cuối những năm 80 đầu những năm 90. Ngay lúc này đây, cộng đồng phát triển đang rất quan tâm đến CMIS, các công cụ client và tích hợp dựa trên CMIS đang dần lộ diện. CMIS ngày càng có được hỗ trợ nhiều từ các nhà cung cấp ECM lớn trên toàn thế giới.
Xuất phát từ vấn đề hầu hết các doanh nghiệp lớn đều sử dụng nhiều công nghệ trong việc trình bày nội dung và nhiều hệ quản trị nội dung khác nhau. Nếu muốn tập hợp nội dung và trình bày dưới một giao diện đồ họa chung, các doanh nghiệp, tổ chức phải tốn nhiều thời gian và tiền bạc để viết riêng cho mình những service riêng giúp tích hợp chúng lại với nhau. Vấn đề ở chỗ các hệ quản trị nội dung có giao diện đặc trưng của riêng mình. Lúc này, CMIS sẽ giải quyết vấn đề bằng cách cung cấp một tập những dịch vụ nằm phía trên các hệ quản trị nội dung. Chỉ cần tầng trình bày (website, portal) hỗ trợ REST hay SOAP, nó có thể làm việc với bất kỳ hệ quản trị nội dung(ECM) nào tương thích với CMIS, bất chấp cài đặt bên dưới. Front-end không còn phụ thuộc vào back-end. Bất kỳ ứng dụng front-end nào cũng có thể giao tiếp với hệ quản trị nội dung bất kỳ. Một nhà phát triển Drupal có thể dùng module Drupal CMIS để giao tiếp với Alfresco và không cần phải làm gì thêm khi chuyển từ Alfresco sang dùng Open Text hay Sharepoint. Và những ai đã từng tham gia tìm hiểu CMIS module của Drupal sẽ có thể chuyển qua phát triển các module tương tự cho các ứng dụng khác mà không cảm thấy khó khăn vì kết quả trả về của Alfresco hoàn toàn tương tự.

Đặc tả kỹ thuật

Đặc tả của CMIS gồm 226 trang nhưng hầu hết là tài liệu cơ bản về API, ta có thể bỏ qua đến khi nào cần có thể tra lại. Tài liệu đặc tả là thứ nhất thiết phải có khi làm việc với CMIS.
Trong tài liệu đặc tả, CMIS định nghĩa: một Domain Model, một ngôn ngữ truy vấn, các giao thức kết nối, một tập các dịch vụ chuẩn.
Dưới đây là những vấn đề chính trong đặc tả kỹ thuật của CMIS:
Domain Model:
Domain Model định nghĩa các khái niệm và quan hệ giữa các hệ quản trị nội dung giúp tìm được tiếng nói chung, thứ ngôn ngữ chung cho tất cả. Ví dụ, một Repository là một kho chứa các đối tượng. Kho chứa có một tập các khả năng “capabilities” có thể khác biệt tùy thuộc vào kiến trúc của từng repository. Một Repository có thể có các khả năng tùy biến khác nhau nhưng vẫn tương thích với CMIS.
Đối tượng(Objects) là các phần tử mà Repository quản lý. Tất cả Object đều có một Object Type. Một Object Type là một lớp các đối tượng sẽ có chung tính chất và các thuộc tính. Cấu trúc của lớp đối tượng mang tính thừa kế nên các lớp con sẽ thừa kế các thuộc tính của cha chúng.
Chỉ có 4 dạng đối tượng chính: Document, Folder, Relationship, và Policy. Trong đó Policy là chính sách phần quyền cho đối tượng.
Dưới đây là hình ảnh của mô hình CMIS Domain Model:
CMIS Domain Model
Hình 2.4: Mô hình dữ liệu của CMIS
Như trong hình trên, cả 4 lớp đối tượng đều chia sẻ một tập các thuộc tính như type ID, tên hiển thị, đối tượng có thể truy vấn được không, đối tượng có thể được quản lý bởi policy không…
Một đối tượng có nhiều thuộc tính, mỗi thuộc tính có một tập các tính chất như property ID, tên hiển thị, tên truy vấn… CMIS cho phép mở rộng các lớp mặc định của mình tạo nên những lớp đối tượng đặc biệt. Việc làm thế nào những lớp đối tượng đặc biệt được định nghĩa phụ thuộc vào cấu trúc bên dưới của Repository.
Đối tượng Document là đối tượng duy nhất có thể thực hiện phiên bản hóa. Mỗi phiên bản của một Document là một bản sao của nó và có một ID của riêng mình. Nhiều phiên bản của một đối tượng sẽ chia sẻ một series ID.
Một Content Stream là một dòng byte dữ liệu, ta có thể hình dung như một file. Một đối tượng Document không nhất thiết phải có một content stream. Folder không có content stream. Repository có thể có những quy trình khác nhau cho việc cập nhật content stream. Đó là phần việc của hệ quản trị nội dung. Nhiệm vụ của CMIS là cung cấp thông tin và thông báo cho các ECM biết chúng cần làm gì.
Ngôn ngữ truy vấn (Query Language )
CMIS đặc tả một ngôn ngữ truy vấn dựa trên SQL – 92. Ngôn ngữ này hỗ trợ join khá giới hạn. Tùy vào Repository, nó có thể thực hiện cả truy vấn toàn văn bản (full text) hoặc chỉ metadata.
Các giao thức kết nối. (Protocol Bindings)
Để tương thích hoàn toàn với CMIS, một repository cần cung cấp 2 dạng kết nối yêu cầu bởi đặc tả: RESTful AtomPub và Web Services (SOAP). Khi đó, cách mà các repository sẽ tiến hành cài đặt kết nối tùy thuộc vào từng repository.
Hình dưới đây cho thấy cách Alfresco cài đặt CMIS ở cấp cao:
alfresco cmis
Hình 2.5: Mô hình cơ chế hoạt động bậc cao của CMIS trên Alfresco
Sử dụng dạng kết nối RESTful AtomPub, một client sẽ bắt đầu với URL của trang thông tin từ Repository (dịch vụ getRepositoryInfo). Máy khách có thể dựa vào những liên kết trên được Repository cung cấp để tạo những request GET, POST, PUT, DELETE với Repository.
Response từ request tạo qua kết nối AtomPub hầu hết đều ở dạng một feed Atom XML hay một entry Atom XML. Thông thường response được mở rộng để kèm theo các tag đặc biệt của CMIS. Ta có thể dùng thư viện đặc tả Atom như Apache Abdera để rút trích kết quả.
cmis connection
Hình 2.6: Mô hình tổng quan giao thức kết nối của CMIS
Webservice kết nối dùng SOAP. Có 2 tài liệu XSD tạo nên WSDL cho service: một định nghĩa data model, cái còn lại định nghĩa format của message. Những dịch vụ được Webservice hỗ trợ hoàn toàn giống với danh sách các dịch vụ được liệt kê dưới đây.

Các dịch vụ (Services)

Không phụ thuộc vào dạng kết nối, CMIS cung cấp một tập các service bao gồm:
Repository Services: dùng tìm hiểu thông tin và năng lực của repository
Navigation Services: dùng để di chuyển trên hệ thống cây thư mục của repository.
Object Services: dùng thực hiện các hàm CRUD trên các đối tượng.
Multi-filing Services: nếu repository hỗ trợ việc đặt một file vào nhiều folder, dịch vụ này sẽ thực hiện.
Discovery Services: dùng để truy vấn tài liệu lưu trữ.
Versioning Services: dùng để check out và làm việc về phiên bản với các đối tượng.
Relationship Services: dùng để truy vấn các đối tượng dựa trên quan hệ của chúng.
Policy Services: dùng thiết lập, hủy và truy vấn chính sách trên các đối tượng.
ACL Services: có thể không được hỗ trợ bởi một số repository, dịch vụ này dùng để lấy thông tin và quản lý ACL của một đối tượng.
Các dịch vụ trên chia sẻ một vài đặc tính chung. Ví dụ:
  • Hầu hết các dịch vụ trả về một danh sách có thể được chuyển thành một tập kết quả có thể phân trang.
  • Dịch vụ trả về đối tượng có thể thường trả về thông tin kèm theo về những đối tượng đó nếu bạn yêu cầu ví dụ relationships, ACL, rendition và những hành vi hợp lệ.
  • Mọi service đều có thể trả về các ngoại lệ (exception).
2. Ứng dụng trong Alfresco

Để tích hợp Alfresco với CMS ta có 2 giải pháp: sử dụng WebService API được Alfresco cung cấp hoặc CMIS. So với Alfresco WebService API, CMIS có các ưu điểm sau:
Chỉ cần viết một lần, chạy với tất cả các Repository. CMIS là chuẩn đặc tả chung do các nhà phát triển ECM lớn nhất lập ra. Ngày càng nhiều ứng dụng ECM tham gia hỗ trợ. Do đó, việc tích hợp chỉ cần làm một lần. Nếu cần kết nối thêm một Repository của ECM khác, nhà phát triển chỉ cần thiết lập các thông số.
Tích hợp đa Repository. CMIS cho phép làm việc cùng lúc với một hoặc nhiều ECM. Ưu điểm này có được do phần lớn các nhà phát triển ECM đồng thuận hỗ trợ CMIS.
Hỗ trợ Quản lý quy trình nghiệp vụ xuyên suốt các Repository. Hiện nay phiên bản 0.9 của đặc tả CMIS chưa hỗ trợ. Tuy nhiên tính năng này được các nhà phát triển hứa hẹn sẽ ra mắt trong phiên bản tiếp theo.
Người dùng chỉ cần học cách dùng một giao diện cho tất cả Repository. Điều này có được do khả năng tích hợp đa Repository. Việc này rất tiện lợi cho người dùng vì một lần tiếp xúc với giao diện mới họ sẽ gặp nhiều khó khăn gần như học lại từ đầu.
Việc sử dụng CMIS tạo cho giải pháp tích hợp khả năng mở rộng cao trong tương lai, khi cần tích hợp thêm một hoặc nhiều Repository của nhà cung cấp khác.
II - Tổng quan Apache Chemistry
1. Khái niệm
Apache Chemistry là một hệ thống mã nguồn mở, tích hợp và hỗ trợ CMIS. 
Apache Chemistry bao gồm các hệ thống nguồn mở sau đây
  • OpenCMIS - Thư viện CMIS client và server cho Java
  • cmislib - Thư viện CMIS client cho Python
  • phpclient - Thư viện CMIS client cho PHP
  • DotCMIS - Thư viện CMIS client cho  .NET


2. OpenCMIS và ứng dụng trong Android 


Apache Chemistry OpenCMIS là một thư viện mã nguồn mở, hỗ trợ ngôn ngữ lập trình Java theo chuẩn CMIS.


- Bản release mới nhất : 
Release Version: Release 0.7.0
Date: 2012-04-26
Hỗ trợ Android: Không


- Phiên bản Beta đã hộ trợ cho Android
Version: 0.8.0 (beta)
Hỗ trợ Android: CÓ
Tài liệu về API: KHÔNG
Code Sample : KHÔNG


Tham khảo : Giải pháp mở, Wikipedia

1 comment: