Identity Manager – Jak připojit systém Vema

U zákazníka v ČR jsme připojovali náš Identity Manager CzechIdM na personalistiku od brněnské firmy Vema. Aplikace Vema je využívána pro evidenci zaměstnanců, a proto představuje primární zdroj informací o uživatelích. CzechIdM má na starosti správu uživatelských účtů postupně ve všech systémech organizace zákazníka. V tomto příspěvku tedy popíši, jak jsme řešili napojení CzechIdM na systém Vema.

Systém Vema používá specializovaný databázový systém. Data jsou organizována do vět (záznamy) a souborů (tabulky). Zajímavostí je proměnná délka vět.

Nepříjemností je, že tento systém nepodporuje JDBC rozhraní a tedy nejde přímo použít podporované konektory „Database Table Connector“ ani náš „JDBC Universal Connector“. Z toho důvodu jsme museli hledat jiný způsob, jak získávat data z aplikace Vema.

Další drobnou komplikací je, že si Vema u jednotlivých vět nepamatuje timestamp poslední změny. Tohle je potřeba pro správnou funkčnost synchronizace, aby se mohly načítat pouze záznamy, které se od poslední synchronizace změnily.

Po konzultacích se zástupci společnosti Vema a zvýše uvedených důvodů jsme se nakonec rozhodli vytvořit databázi v Oracle jako „výměník informací“ mezi CzechIdM a Vemou. Do tabulek v Oracle se provádí export ze systému Vema skrz ADO rozhraní. CzechIdM je na výměník napojeno přes JDBC rozhraní pomocí standardního „Database Table Connectoru“.

Mapování mezi soubory v systému VEMA a tabulkami je jedna ku jedné a pro potřeby CzechIdM se vytvořilo view až přímo v Oracle.

Provádí se dva druhy exportů:

  • online
  • full

 

Online export je spouštěn triggerem v systému VEMA. Tento trigger je vyvolán, pokud dojde ke změně věty v nějakém ze sledovaných souborů. Trigger spustí samostatný proces  s výkonným Python skriptem, který:

  • zkontroluje, zda došlo ke změně exportovaných atributů ve větě. Pokud nedošlo, tak skončí.
  • spustí transakci v Oracle db
  • provede update všech atributů (které se mají exportovat) v odpovídajícím záznamu ve výměníku, případně vytvoří záznam nový
  • nastaví aktuální čas do pole „online_update_timestamp“ v tomto záznamu
  • nastaví hodnoty dalších atributů pro interní použití
  • provede commit transakce. V případě chyby spustí transakci znovu. (Počet restartů transakce je omezen)

 

Full export je spouštěn v systému VEMA pravidelně jednou za definovaný časový interval.

Jeho smyslem je srovnat případné rozdíly. Ty by mohly vzniknout například při nedostupnosti Oracle serveru v době, kdy měl být proveden online export. Na straně systému Vema je tato funkčnost zajištěna opět Python skriptem, který pro každou větu:

  1. spustí transakci v Oracle db
  2. provede update nebo insert odpovídajícího záznamu v Oracle
  3. nastaví čas spuštění full exportu do pole „full_update_timestamp“ v tomto záznamu (tzn. všechny záznamy v tomto exportu budou mít stejný čas)
  4. provede commit transakce. V případě chyby spustí transakci znovu. (Počet restartů transakce je omezen)

 

U zákazníka je také potřeba naopak některé údaje do aplikace Vema importovat. Opět to je zařízeno pravidelně spouštěným skriptem na straně Vemy. Tento skript najde všechny záznamy v Oracle, které mají atribut „vema_pre_import_status“ nebo „vema_post_import_status“ s hodnotou „0“ (oba atributy nuluje IdM při zápisu změny do tabulky).  Skript pro každý takový záznam:

  1. změní hodnotu atributu „vema_pre_import_status“ (v db) na hodnotu „1“
  2. na základě získaných údajů aktualizuje v systému VEMA atributy odpovídajících vět
  3. změní hodnotu atributu „vema_post_import_status“ (v db) na hodnotu „1“

 

Dva příznaky pro status jsou potřeba z důvodu souběhu operací aktualizace záznamu IdMkem a čtení záznamu Vemou. Pokud by byl například pouze příznak nastavovaný po importu dat. Tak by mohla nastat následující situace:

  1. Vema načte záznam s příznakem 0
  2. Vema provede nějaké interní operace
  3. IdM aktualizuje stejný záznam a nastaví příznak na 0.
  4. Vema nastaví příznak na 1.

 

Takže druhou aktualizaci záznamu by už Vema nezjistila. Při aktuálním řešení by situace po skončení výše uvedené sekvence operací vypadala takto: vema_pre_import_status=0 a vema_post_import_status=1. Takže při dalším běhu bude záznam znovu importován do Vemy.

Podobně příznak nastavovaný pouze před provedením importu by nestačil v případě, že by import selhal.

Vemu je jistě možné připojit na Identity Management více způsoby. Příspěvek je proto možno brát pouze jako námět na to, kde začít. Je ještě potřeba uvést, že skripty dělala přímo společnost Vema na základě výše uvedeného zadání. Naše společnost má na starost Identity Management – tedy přebírat z Vemy informace a dále je zpracovávat pomocí Identity Manageru CzechIdM.