Som en del af “Kod i ferien 2012” har jeg udviklet en MOX
replikeringsagent til sag og dokument standarderne. Dette dokument
fungere som dokumentation af koden, der er lagt på digitaliser.dk,
samt hvordan man kører den.
MOX forretningsmønstret
MOX er et forretningsmønster der beskriver hvordan man kan løse
integrations problemer mellem it-systemer ved hjælp af
hændelsesbeskeder og en beskedfordeler (message bus/ message broker).
Specifikationen har været i høring og kan læses her: http://www.kl.dk/Administration-og-digitalisering/Arrangementer/2012/07/invitation-til-horing-af-MOX1/
MOX specifikationen standardiserer en række agenter, der skal reagere
på bestemte hændelsesbeskeder.
Pointen er at et It-system skal have en MOX agent tilknyttet der
reagere på alle hændelsesbeskeder som den er abonneret på gennem en
beskedfordeler. Denne agent vil så opdatere it-systemet, så det
reflektere de ændringer som hændelsesbesked beskriver.
Fx kan organisationsdata ligge i forskellige it-systemer fx i
lønsystement og i organisationssystemet. Hvis der kommer en ny
medarbejder vil man gerne opdatere begge systemer automatisk. Med MOX
vil begge systemer have en tilknyttet MOX agent. Lønsystemsagenten vil
så abonnere på ændringer i organisationen. Når der så oprettes en ny
medarbejder i organisationssystemet, så sender organisationssystemet
en registreringsbesked gennem dets MOX agent til beskedfordeleren,
herfra modtager lønsystemets MOX agent beskeden, og laver de
nødvendige opdateringer så løndata passer til organisationsdata. Dette
er et eksempel på en replikeringsagent.
Min agent ville sidde imellem APOS organisationssystemet, der
benytter sag og dokument standarderne, og en beskedfordeler.
Til denne demo benyttes en beskedfordeler kaldt RabbitMQ. Denne er
open source og generelt anerkendt for at være robust og fleksibel.
Bl.a. har den interfaces til en alle de mest brugte programmeringssprog.
Overblik af koden
Dette er et hurtigt overblik over koden på digitaliser.dk
Koden består af to komponenter: mox-client og apos2-mox-agent. Disse
komponenter kommunikerer med hinanden gennem RabbitMQ.
mox-client implementere et generelt interface til at snakke med
RabbitMQ, der kan bruges af alle Java programmer. Det er så meningen
at it-systemer skal udgive hændelsesbeskeder gennem mox-client komponenten.
apo2-mox-agent er en replikeringsagent der sidder imellem APOS
organisationssystemet og RabbitMQ. Agenten lytter på en bestemt
hændelsesbesked, nemlig en registreringsbesked der fortæller at et
organisations eller klassifikations objekt har ændret tilstand. Når
den fanger sådan en besked, vil den lave et webservice kald til APOS,
og på den måde opdatere de organisations og klassifikations objekter i
APOS, så de reflektere den nye tilstand.
Demo kørsel
For at køre demoen kræver det at man har RabbitMQ installeret.
RabbitMQ kan hentes fra http://www.rabbitmq.com/. RabbitMQ kræver at
programmeringssproget Erlang også er installeret, dette sprog kan
hentes fra http://www.erlang.org/.
For at hente koden skal man hente mox-agent-DEMO.zip fra
digitaliser.dk. Denne pakke indeholder alt kode der skal til for at
køre demoen.
Demoen er sat sådan op, at den laver et mock APOS objekt som modtager
APOS webservice kalde og printer det ud til skærmen. Så når man ser
indholdet af en XML fil og noget header information på skærmen, så
betyder det at demoen virker.
Gør følgende for at køre demoen:
1. Download og unzip filen ‘mox-agent-DEMO.zip’
2. Fra et terminal vindue (i windows ’cmd’) skrive: ‘java -jar
mox-agent-DEMO.jar’ i mappe har zip filen er blevet ud pakket.
Hvis alt går vel, så burde følgende printets på skærmen:
DemoAPOS recieved this msg:
START of msg
POST /SletKlasse HTTP/1.1
User-Agent: Java/1.6.0_33
Host: localhost:35994
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-type: application/x-www-form-urlencoded
Content-Length: 430
<?xml version="1.0" encoding="UTF-8"?>
<klasse:SletInput xmlns:klasse="urn:oio:sagdok:klassifikation:klasse:2.0.0" xmlns:sd="urn:oio:sagdok:3.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oio:sagdok:klassifikation:klasse:2.0.0 http://axapoint.com/apos/xsd/KlasseOperationer.xsd ">
<sd:UUIDIdentifikator>UUID4</sd:UUIDIdentifikator><sd:NoteTekst>sd:NoteTekst</sd:NoteTekst>
</klasse:SletInput>
END of msg
Dette viser at der er forbindelse mellem it-systemer med hændelser
gennem MOX og RabbitMQ.
Filer og referencer