Nuxeo – system zarządzania dokumentacją typu Open Source

evelopeZarządzanie dokumentami oraz szeroko pojęte zarządzanie zasobami od zawsze stanowiło kluczową kwestię organizacyjną przedsiębiorstwa. Dokumenty, przechowywane niegdyś wyłącznie w niezliczonej ilości segregatorów oraz przekazywane sobie przez asystentów były stosunkowo często gubione, a sposób komunikacji pomiędzy poszczególnymi uczestnikami ich obiegu pozostawiał wiele do życzenia. Gdy komputery stały się coraz częściej wykorzystywanym narzędziem we wszelkiego rodzaju przedsiębiorstwach i instytucjach, ich rola w procesie organizacji zasobów była od początku znacząca. Współdzielony dysk sieciowy czy przesyłanie dokumentów w elektronicznej formie za pomocą wiadomości e-mail było pierwszym krokiem do standaryzacji danych firmy i procesów wokół nich zachodzących. Następnie pojawiły się systemy klasy DMS.
System DMS (Document Management System) tłumaczony jest na język polski jako system zarządzania dokumentami. W ogólności są to narzędzia informatyczne, służące do organizowania, zarządzania i przetwarzania dokumentów. Użytkownicy systemu DMS mają możliwość wspólnego dostępu, gromadzenia oraz modyfikacji dokumentów należących do centralnego repozytorium. Najpopularniejszym rozwiązaniem klasy DMS typu Open Source jest system Nuxeo.

System Nuxeo EP, wcześniej znany pod nazwą CPS Project technologicznie w pełni oparty jest na środowisku Java, jednak z projektu można wydzielić kilka odrębnych produktów wyróżniających się funkcjonalnością.

Sercem Nuxeo jest część serwerowa znana pod nazwą Nuxeo EP, zbudowana w oparciu o środowisko Java EE. Nuxeo EP jest w zasadzie repozytorium danych wszelkiej postaci, do których dostęp zapewniony jest za pomocą przeglądarki internetowej (korzystając z interfejsu użytkownika utworzonego przez programistów EP) lub innych narzędzi z rodziny Nuxeo. Jednym z nich jest wtyczka do popularnych pakietów biurowych (OpenOffice.org, Microsoft Office) umożliwiająca zapis edytowanego dokumentu bezpośrednio do repozytorium Nuxeo EP. Innym ciekawym narzędziem jest Nuxeo RCP (Rich Client Platform) – jest to tzw. „gruby klient” repozytorium centralnego, oparty o aplikację Eclipse. Nuxeo RCP umożliwia m.in. edycję treści w trybie offline wraz z synchronizacją z repozytorium na żądanie – taki tryb pracy może być nieoceniony w przypadku użytkowników mobilnych, nie zawsze mających dostęp do Internetu. W ramach tego artykułu przedstawione zostaną przede wszystkim możliwości oferowane przez część serwerową pakietu Nuxeo.

Nuxeo EP tuż po instalacji jest gotowe do użytku, jednak należy wziąć pod uwagę, że środowisko „z pudełka” stanowi produkt bazowy, który dopiero może zostać dostosowany do specyficznych potrzeb przedsiębiorstwa. Jako że Nuxeo EP w głównej mierze pełni funkcję repozytorium danych, ułatwiając również ich procesowy obieg, przed jego wdrożeniem należy dokładnie określić wymagania, które system powinien spełniać. Zwykle ich szczegółowy opis powstaje w wyniku przeprowadzenia analizy przedwdrożeniowej przez firmę zewnętrzną. Następnie można przystąpić do jego realizacji, traktując Nuxeo EP jako bazę do stworzenia oczekiwanego rozwiązania. Nuxeo nie należy zatem traktować jako gotowego narzędzia, lecz jako platformę udostępniającą szereg funkcjonalności, która umożliwi sprawną implementację systemu klasy ECM.

Nuxeo EP jako aplikacja JEE oferowana jest w prekonfigurowanych wersjach opartych na serwerze aplikacji JBoss, bądź kontenerze aplikacji Tomcat. Przewagą pierwszego rozwiązania jest dostęp do technologii oferowanych przez JEE, takich jak choćby EJB, JSF lub model OSGi, jednak Nuxeo z powodzeniem sprawdzi się również jako aplikacja działająca pod kontrolą Apache Tomcat w przypadku mniejszych, mniej wymagających wdrożeń. Paczki dostępne na stronie projektu Nuxeo wyposażone są również w kompaktową bazę danych H2 (również opartą o technologię Java). W celu uzyskania lepszej wydajności (wszelkie dane binarne przechowywane są w bazie danych jako obiekty typu blob!) należy po instalacji dokonać przełączenia Nuxeo z bazy H2 na PostgreSQL, Oracle (również Express Edition) czy MS SQL. Baza MySQL, mimo iż obsługiwana, nie jest zalecana do pracy z Nuxeo.

Kolejnym etapem jest implementacja własnych funkcjonalności. Nuxeo tuż po instalacji funkcjonuje jako repozytorium danych zdefiniowanych przez deweloperów projektu. Zakładając hipotetycznie, że Nuxeo służyć ma do przechowywania informacji dotyczących np. kontaktów biznesowych, należy zdefiniować w systemie nowy typ danych oraz mechanizmy jego obsługi. W system Nuxeo, jako platformie bazowej dobrze przemyślano koncepcję dalszej rozbudowy własnych rozszerzeń. W architekturze systemu należy zwrócić uwagę na model komponentowy – wszelkie nowe rozszerzenia dostarczane są jako pakiety – komponenty. Autorzy Nuxeo skorzystali w tym celu z architektury OSGi (Open Services Gateway initiative), umożliwiającej dynamiczne zarządzanie komponentami w środowisku Java. OSGi zapewnia między innymi zarządzanie zależnościami międzykomponentowymi, zarządzanie komponentami oraz usługami przez nich oferowanymi. Nowa funkcjonalność dostarczona zostanie zatem jako komponent zgodny z OSGi. Rodzi się zatem kolejne pytanie – jakie mechanizmy udostępnia Nuxeo w celu rozszerzenia domyślnej funkcjonalności? Nuxeo EP oferuje szereg gotowych klas oferujących metody umożliwiające rozszerzenie repozytorium o nowe, zdefiniowane przez programistę funkcje. Ciekawy jest jednak sposób, w jaki został zapewniony dostęp do wspomnianych klas. Idea polega na udostępnianiu usług jako tzw. punktów rozszerzeń. Z punktów tych korzysta się za pomocą rozszerzeń („kontrybucji”), czyli w praktyce za pomocą plików xml definiujących atrybuty konfigurujące rozszerzaną klasę. Pomysł rozszerza filozofię komponentowości OSGi i zaczerpnięty został z projektu Eclipse Equinox. Przyjrzyjmy się podstawowemu przykładowi – rejestracji nowego typu dokumentu. Poprzez typ dokumentu rozumie się zestaw jego atrybutów zdefiniowanych za pomocą pliku XML Schema – niech będzie to wcześniej wspomniany kontakt biznesowy opisany w następujący sposób:

evolpe1

Plik schematu o nazwie wizytowka.xsd zapisany będzie w katalogu schemas zasobów nowego komponentu. Wszelkie rozszerzenia punktów rozszerzeń deklaruje się w pliku MANIFEST. MF w katalogu META-INF zasobów komponentu (po szczegółowy opis struktury komponentu zachęcam zajrzeć do naprawdę dobrze przygotowanej dokumentacji). Przykładowa „kontrybucja” rejestrująca nowy schemat w silniku Nuxeo może wyglądać tak:

evolpe2

W praktyce silnik OSGi przy inicjalizacji komponentu stworzy na podstawie powyższego pliku XML obiekt klasy języka Java i przekaże go jako parametr do metody registerContribution klasy implementującej interfejs org.nuxeo.ecm.core.schema.TypeService. Namiar na ową klasę i definicja interfejsu znajdują się w plikach silnika Nuxeo, i można je w miarę zainteresowania odnaleźć. Wszystkie standardowe rozszerzenia są również udokumentowane na stronach projektu Nuxeo. Efektem powyższego przykładu będzie zarejestrowanie nowego schematu o nazwie „wizytówka” w repozytorium Nuxeo. Pozostaje jeszcze zarejestrowanie nowego typu dokumentu, korzystającego z nowo utworzonego schematu – operację przeprowadza się w identyczny sposób – definicja nowego rozszerzenia w pliku MANIFEST.MF, oraz stworzenie samego pliku xml z rozszerzeniem. W tym konkretnym przypadku będzie to rozszerzenie punktu doctype komponentu org.nuxeo.ecm.core.schema.TypeService. Wszelkie operacje związane z rozszerzeniem repozytorium Nuxeo EP dokonuje się za pomocą opisanego mechanizmu – będą to m.in. definicje rozszerzeń w interfejsie użytkownika (sposobu wyświetlania metadanych w portalu Nuxeo, definicja nowych zakładek, itd.), sposoby indeksowania dokumentu przez silnik wyszukiwarki, model wyszukiwania określony poprzez wewnętrzny język SQL zwany NXQL, definicje event-listener’ów reagujących na zdarzenia towarzyszące cyklowi życia dokumentu (np. nadanie pewnych parametrów w chwili utworzenia dokumentu) oraz wiele innych. Dodatkowo jako programiści mamy możliwość definiowania własnych punktów rozszerzeń w swoim komponencie.

Nuxeo oferuje programistom silnik testowania oparty na pakiecie JUnit. Możliwa jest emulacja środowiska repozytorium i wszystkich akcji dokonywanych na nim, jako zestaw testów jednostkowych. Niepodważalną zaletą takiego rozwiązania jest możliwość testowania bez potrzeby ponownego uruchamiania serwera aplikakacji JEE. Testowanie zmian bezpośrednio w środowisku serwera aplikacji byłoby procesem żmudnym i uciążliwym. Przy pomocy framework’a testowego możliwe jest zasymulowanie operacji dodania dokumentu do repozytorium, wyszukiwania, wywoływanie zdarzeń, na które powinny reagować zarejestrowane event-listener’y oraz wiele więcej.

Rozpatrując Nuxeo pod kątem technologii towarzyszących dostosowaniu interfejsu użytkownika, będą to głównie JSF (Java Server Faces) oraz JBoss Seam będący pomostem między JSF a modelem danych.

W ogólności rozwiązanie Nuxeo jest godnym uwagi produktem pod wieloma aspektami. Standardowa funkcjonalność (która zostanie szerzej opisana w następnym numerze) pozwala na szeroko pojęte zarządzanie zasobami, w tym dokumentami o różnych formatach, zawartością strony internetowej oraz plikami graficznymi, a także wspomaga obieg dokumentów (Workflow) i komunikację grupową (fora, możliwość dodania komentarzy itp.). System został także stworzony w oparciu o nowoczesne technologie, umożliwiające jego dalszą rozbudowę. Ostatnim głównym kryterium przewagi Nuxeo nad innymi systemami klasy DMS jest brak jakichkolwiek opłat licencyjnych (Open Source), pozwalający na znaczną redukcję kosztów wdrożenia, co w konsekwencji niesie duże oszczędności dla przedsiębiorstwa.

Źródło: www.evolpe.pl

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://nuxeo.org/schemas/upcoming/"

xmlns:wi="http://kir.com.pl/schemas/wizytowka/">

<xs:element name="imie" type="xs:string" />

<xs:element name="nazwisko" type="xs:string" />

<xs:element name="pesel" type="xs:string" />

<xs:element name="telefon" type="xs:string" />

<xs:element name="email" type="xs:string" />

<xs:element name="firma" type="xs:string" />

<xs:element name="stanowisko" type="xs:string" />

<xs:element name="dzial" type="xs:string" />

<xs:element name="opis" type="xs:string" />

</xs:schema>

PRZECZYTAJ RÓWNIEŻ:


Back to top