-
Notifications
You must be signed in to change notification settings - Fork 2
Akubra
Tato stránka poskytuje detailní technický přehled modulu Akubra repository. Slouží jako hlavní referenční dokumentace pro vývojáře, kteří Akubru integrují nebo nad ní staví aplikační logiku.
Akubra je Java knihovna určená pro práci s Fedora/Akubra filesystemovým repozitářem a je navržena pro použití v distribuovaném prostředí s více instancemi aplikace.
Akubra představuje aplikační vrstvu mezi:
- aplikační logikou (UI, služby, workflow),
- fyzickým uložením dat na disku,
- pomocnými infrastrukturními službami (Solr, Hazelcast).
Jejím cílem je:
- poskytnout jednotné a stabilní Java API,
- zajistit konzistenci dat při souběžném přístupu,
- abstrahovat detaily filesystemu a indexace,
- umožnit efektivní práci se strukturou digitálních objektů.
Akubra není:
- uživatelské rozhraní,
- vyhledávací engine pro koncové uživatele,
- plnohodnotná implementace Fedora Commons.
Veškerá interakce s repozitářem probíhá prostřednictvím rozhraní:
-
AkubraRepository
https://github.com/ceskaexpedice/akubra/blob/master/src/main/java/org/ceskaexpedice/akubra/AkubraRepository.java
Toto rozhraní představuje jediný oficiální vstupní bod do Akubra repository.
Detailní popis metod, jejich kontraktů a očekávaného chování je udržován přímo ve zdrojovém kódu tohoto rozhraní.
Wiki dokumentace se záměrně soustředí na:
- architekturu,
- principy použití,
- vazby na okolní infrastrukturu.
Aplikační kód by se měl vždy řídit aktuálním API rozhraní.
Pro použití Akubry je nutné:
- nakonfigurovat cesty k filesystemovým úložištím,
- nastavit připojení k Solr serveru,
- nakonfigurovat Hazelcast pro distribuované zamykání,
- vytvořit instanci repozitáře pomocí factory.
Inicializace probíhá pomocí:
RepositoryConfigurationHazelcastConfigurationAkubraRepositoryFactory
Výsledná instance je obvykle poskytována jako singleton.
Kompletní příklad vytvoření instance AkubraRepository
(včetně konfigurace Hazelcastu a Solru)
je uveden v README projektu Akubra:
https://github.com/ceskaexpedice/akubra/blob/master/README.md
Referenční implementace je také k dispozici v projektu Kramerius.
Akubra vyžaduje několik konfiguračních oblastí, které jsou typicky poskytovány pomocí aplikační konfigurace (properties, XML, environment proměnné).
| Parametr | Význam |
|---|---|
objectStore.path |
Kořenový adresář FOXML objektů |
objectStore.pattern |
Vzor adresářové struktury |
| Parametr | Význam |
|---|---|
datastreamStore.path |
Kořenový adresář binárních dat |
datastreamStore.pattern |
Vzor uložení datastreamů |
| Parametr | Význam |
|---|---|
solr.processing.host |
URL Solr serveru pro processing index |
| Parametr | Význam |
|---|---|
hazelcast.server.addresses |
Adresy locks serveru |
hazelcast.instance |
Název Hazelcast instance |
hazelcast.user |
Identita klienta |
Konkrétní názvy a způsob načítání parametrů závisí na hostitelské aplikaci (např. Kramerius).
Object store obsahuje:
- FOXML 1.1 dokumenty,
- jeden objekt = jeden FOXML soubor,
- adresování pomocí PID.
FOXML objekt zahrnuje:
- metadata (DC, MODS),
- RDF vazby (RELS-EXT),
- technické a administrativní datastreamy.
Binární data jsou ukládána odděleně:
- FOXML obsahuje pouze odkazy na binární soubory,
- fyzická struktura je řízena konfigurovatelnými vzory cest.
Toto oddělení umožňuje:
- efektivní práci s velkými objemy dat,
- nezávislé zálohování a migrace.
Akubra je navržena pro provoz v prostředí, kde nad jedním repozitářem pracuje více instancí aplikace současně.
- zamykani se konfiguruje pomoci HazelcastConfiguration
- pri neuvedeni konfigurace Akubra pracuje bez zamku. Pozor! Ma smysl pouze pro jednoduche aplikace
- Nasledujici body plati za predpokladu pouziti HazelcastConfiguration:
- zamykání je povinné pouze pro kritické operace,
- čtecí operace nejsou obecně zamykány,
- zápisové operace (ingest, update) mají zamykání vestavěné.
Pro distribuované zámky Akubra využívá Hazelcast:
- zámky jsou sdílené mezi JVM a servery,
- zajišťují konzistenci FOXML i datastreamů,
- jsou použity automaticky v Akubra core.
Rozhraní AkubraRepository poskytuje metody:
doWithReadLock(...)doWithWriteLock(...)
Tyto metody umožňují uživateli:
- zamykat větší logické celky,
- řídit rozsah konzistence nad více objekty,
- bezpečně kombinovat vlastní logiku s core Akubry.
Použité zámky jsou reentrantní.
Podrobný popis je uveden na stránce Locking-Model.md.
Akubra využívá Solr k vytváření tzv. processing indexu – interního technického indexu pro práci s relační strukturou dokumentů.
Processing index slouží k:
- rychlému zjišťování vztahů mezi objekty,
- navigaci ve stromové struktuře dokumentů,
- eliminaci nutnosti parsovat RELS-EXT při každém dotazu.
Typické dotazy:
- jaké stránky patří k dokumentu,
- do kterých nadřazených objektů dokument náleží,
- zda je objekt součástí více dokumentů (sbírky).
Rozhraní AkubraRepository poskytuje podrozhraní:
ProcessingIndex
které je určeno zejména pro:
- UI aplikace,
- administrační nástroje,
- služby pracující se strukturou dokumentů.
Akubra je obecně nezávislá na konkrétním datovém modelu, nicméně v Kramerius 7 se používá ve spojení s:
- FOXML 1.1,
- RDF vazbami pro hierarchii objektů,
- definovanými content modely.
Viz:
Data-Model.md
Akubra je vhodná, pokud potřebujete:
- filesystemový Fedora/Akubra repozitář,
- bezpečný ingest v distribuovaném prostředí,
- Java-first API,
- oddělení perzistence dat od aplikační logiky.
- Kramerius – https://github.com/ceskaexpedice/kramerius
- Hazelcast locks server – https://github.com/ceskaexpedice/hazelcast-locks-server