Overblik
Dette dokument beskriver installation og konfiguration af Organdonorregister-servicen (ODR). Konfiguration af tilhørende DGWS/IDWS Proxy er også beskrevet.
Organdonorregister-servicen består af følgende komponent (war-arkiv), der skal konfigureres og deployes på en applikationsserver:
Projektet bygges med Maven og kræver Java 8 for at kunne afvikle unit-tests.
Alle filer der refereres til ligger sammen med projektets kildekode i NSP's Subversion. Referencer til stier er relative med udgangspunkt i projektets rodmappe.
Ændringslog
Version | Dato | Ændring | Ansvarlig |
|---|---|---|---|
1.0.1 | 2018-08-20 | Initialt dokument | Trifork |
| 1.0.2 | 2018-08-31 | Ny release | Trifork |
| 1.0.3 | 2018-09-11 | Ændret databasedriver til MySQL | Trifork |
| 1.0.11 | 2019-08-19 | Opdateret default value for property "minlog.read-activity-text". Tilføjet SQL-script. | Trifork |
| 1.0.13 | 2019-25-09 | Ajourført | Trifork |
| 1.0.16 | 2020-05-25 | Opdateret properties til slettejob | KIT |
| 1.0.17 | 2021-12-07 | Opdateret ifm inaktive cpr numre afvises | KvalitetsIT |
| 1.0.18 | 2022-10-24 | SDS-5679: validering af alder | KvalitetsIT |
| 1.0.19 | 2023-09-26 | SDS-6386: ODR - oprydningsjob genbesøg | KvalitetsIT |
Byggevejledning
For at bygge projektet og dets deployables (war-filer) uden at køre unit-tests og integrationstests, anvendes følgende Maven kommando:
mvn clean install -DskipTests
Projektets deployables ender i target-mappen under de respektive moduler.
Afvikling af unit-tests
Følgende Maven-kommando anvendes til at bygge projektet og afvikle unittest:
mvn clean install
Når projektet er bygget, kan unit-testene også afvikles alene med følgende Maven-kommando:
mvn clean test
Ved kørsel af unit-tests, anvendes en in-memory database, som automatisk startes op, når unit-tests afvikles. Det er derfor ikke nødvendigt at starte en ekstern database til unit-test.
Afvikling af integrationstests
Se testvejledningen.
Krav til miljø
Komponenten er tilpasset at kunne indgå i det aktuelt gældende CI-miljø på NSP. Det tager aktuelt udgangspunkt i version 1 af NSP's platform Docker image.
Krav til database
Servicen er testet mod MariaDB version 10.1, som bliver brugt på NSP platformen.
Til unit-test anvendes en in-memory H2-database, som automatisk startes ved kørsel af unit-testene.
Krav til hardware
Der stilles ikke nogle særlige minimumskrav til hardware, men man skal forvente at bruge high-end hardware (både cpu, ram, netkort og diske) for at kunne opfylde de gældende svartidskrav på NSP.
Oprettelse af databaser og tabeller
Herunder beskrives servicens tilgang til database samt oprettelse af tabeller og views.
Tilgang til database
Servicen kræver en enkelt database til dens egen data. Derudover afhænger den af adgang til et view i en (replikeret) stamdata-database.
Servicen konfigureres med 2 datasources, som tilgår databaserne vha. separat specificerede brugere.
Databasebrugeren, der tilgår servicens egen database, skal være tildelt følgende rettigheder:
- Ved normal drift i produktion: SELECT, INSERT, UPDATE, DELETE
- Yderligere nødvendige rettigheder ved databaseoprettelse og migreringer: CREATE, DROP, ALTER
Databasebrugeren, der tilgår stamdata-view'et, skal være tildelt følgende rettigheder:
- Ved normal drift i produktion: SELECT
- Yderligere nødvendige rettigheder ved databaseoprettelse og migreringer: CREATE VIEW, DROP
Oprettelse af database og tabeller
Datamodellen styres vha. inkrementelle SQL-scripter, der kan findes under compose/database/db/migration. De er inddelt i 2 undermapper:
- odr: indeholder scripter til at køre på servicens egen database
- stm: indeholder scripter til at køre på en (replikeret) stamdata-database.
Scripterne er udformet til at blive kørt med databasemigreringsværktøjet Flyway, men dette er kun aktiveret under afvikling af unit-tests, da dette ikke ønskes anvendt i produktion.
I produktion anvendes scripterne manuelt og skal køres på databasen i inkrementel rækkefølge baseret på versionsnummeret i filnavnet (først V1__(...).sql, dernæst V2__(...).sql, osv.). Hvert script må aldrig køres mere end én gang; der gælder dog en undtagelse for ikke-versionerede scripter, hvis filnavne begynder med R, som står for Repeatable. Disse Repeatable scripter skal køres hver gang deres indhold (checksum) er blevet ændret, men de må først køres efter alle versionerede scripter er blevet kørt.
Ved initial installation af servicen vil det således være følgende scripter, der skal køres i den nedenstående rækkefølge:
Servicens database
- odr/V1__create_OrganDonorRegistration.sql
- odr/V2__create_Properties.sql
- odr/V3__add_PersonIdentifier_index.sql
- odr/V4__create_Notification_tables.sql
(Replikeret) Stamdata-database
- stm/R__create_v2_Person_Simplified_view.sql
Scriptet R__create_v2_Person_Simplified_view.sql opretter et view, som afhænger af eksistensen af tabellen v2_Person. Dette er tabellen, der indeholder CPR-ændringer, og den skal man selv stå for at levere. Under afvikling af unit-tests bliver en testudgave af denne tabel automatisk oprettet vha. et SQL-script i compose/database/db/test.
Deployment
Komponenten deployes vha. NSP's platform Docker image og konfigurationsfiler mountes i containeren som angivet i projektets Compose-filer.
odr-service-wildfly indholder de nødvendige konfigurationsfiler til valg af datasources, brugerdefinerede parametre, logning, mm. Wildfly-modulet er integreret i komponentens Docker image.
Alle konfigurerbare properties bør gennemgås inden idriftsættelse, men standardværdierne er tiltænkt anvendelse i produktion medmindre andet er angivet.
Konfiguration af servicen
Herunder beskrives properties i odr-service-wildfly komponentens konfigurationsfiler.
application.properties og operations.properties
Properties for servicen ses i tabellen herunder. Det er angivet hvilken property fil de er relevante for. Operations filen anvendes af komponentens baggrundsjobs.
| Property | Fil | Beskrivelse | Default |
|---|---|---|---|
| datasource.odr.jndi-name | application | Angiver navnet på en JNDI datasource til Organdonorregister-databasen | java:jboss/datasources/ODR-DS |
| datasource.stamdata.jndi-name | application | Angiver navnet på den JNDI datasource der giver adgang til en (replikeret) stamdata-database | java:jboss/datasources/STM-DS |
| dcc.endpoint | application | Angiver det endpoint, som DCC'en skal kalde. Dette kommer til at fremgå af den XML, der returneres i /dksconfig. Bør ændres før produktion. | http://test1.fsk.netic.dk:8080/odr/odr |
| minlog.read-activity-text | application | Angiver den tekst der registreres i MinLog, når der bliver læst Organdonorregistering-data for et CPR-nummer | L\u00e6sning af Organdonorregistrering |
minlog.create-activity-text | application | Angiver den tekst der registreres i MinLog, når der bliver oprettet Organdonorregistering-data for et CPR-nummer | Oprettelse af Organdonorregistrering |
minlog.delete-activity-text | application | Angiver den tekst der registreres i MinLog, når der bliver slettet Organdonorregistering-data for et CPR-nummer | Sletning af Organdonorregistrering |
minlog.update-activity-text | application | Angiver den tekst der registreres i MinLog, når der bliver opdateret Organdonorregistering-data for et CPR-nummer | Opdatering af Organdonorregistrering |
| jobs.delete.cpr-max-results | application | Slettejob: Angiver maksimum antal rækker med opdateringer i cpr-registry der skal læses ad gangen | 25 |
| jobs.delete.cpr-max-loops | application | Slettejob: Angiver maksimum antal batches der skal behandles pr. jobeksekvering | 2 |
| cprexists.validationlevel | application | Valideringsniveau for CPR validering Eksempel: WARNING, REJECT, OFF | |
| cprexists.url | application | URL for CPR exist service Eksempel: http://test1-cnsp.ekstern-test.nspop.dk:8080/stamdata-cprexists | null |
| cprexists.maxTotalConnections | application | Konfiguration af client pool til kald af CPRExists service | 200 |
| cprexists.defaultMaxConnectionsPerRoute | application | Konfiguration af client pool til kald af CPRExists service | 20 |
| cprexists.inactive.status | application | Konfiguration af inaktive status, liste adskilt af komma | 30,50,60 |
| cprexists.minage | application | Aldersgrænse for oprettelse af organdonation | 15 |
| whitelisted.level3.cvrs | application | Komma separeret liste af cvr numre, der må kalde servicen med niveau 3 id kort | |
| allowed.idws.audience | application | Det tilladte audience på indkommende idws requests | |
| nas.app.name | application | Applikationsnavn til sla-logning ved NAS-kald | organdonorregister |
| nas.app.shortname | application | Kort applikationsnavn til sla-logning ved NAS-kald. | odr |
| nas.connect.timeout.millis | application | Grænse for hvor lang tid det må tage at oprette forbindelse til NAS (i ms.). | 20000 |
| nas.max.total.connections | application | Maksimalt antal samtidige NAS-forbindelser. | 200 |
| nas.default.max.connections.per.route | application | Maksimalt antal NAS-forbindelser per rute. | 20 |
| nas.service.url | application | NAS Endpoint | http://test1.ekstern-test.nspop.dk:8080/nas2/notificationbroker/service |
| nas.topic | application | NAS topic | http://sundhedsdatastyrelsen.dk/OrganDonation/2022/05/05:OrganDonationUpdated |
| sts.idcard.subject.id.type | application operations | Subjecttype for IDKort til ekstern komponent kald. | medcom:cvrnumber |
| sts.idcard.subject.id | application operations | SubjectId for IDKort til ekstern komponent kald. | 46837428 |
| sts.idcard.subject.name | application operations | Subjectname for IDKort til ekstern komponent kald. | Funktionssignatur til testmiljø (funktionscertifikat) |
| sts.idcard.level | application operations | Sikkerhedsniveau for IDKort til ekstern komponent kald. | 3 |
| sts.idcard.system.name | application operations | Systemnavn i IDKort til ekstern komponent kald. | itsystem |
| sts.endpoint | application operations | Endpointet, hvor komponenten trækker sit SOSI IDkort på baggrund af sts.keystore | http://test2.ekstern-test.nspop.dk:8080/sts/services/NewSecurityTokenService |
| sts.test.mode | application operations | Boolsk værdi, der angiver om der anvendes test- eller produktions SOSIFederation | true |
| sts.keystore | application operations | sti til keystore, der indeholder certifikat til at trække Idkort til kald af eksterne komponenter. | Statens_Serum_Institut_FOCES.jks |
| sts.keystore.password | application operations | Password til sts.keystore | n/a |
| jobs.delete.max.time | application | Angiver den maksimale udførelsestid for baggrundsjobbet. Angives som Duration i ISO-8601 formattet. Default værdien er på 20 sekunder. | PT20S |
| personinformation.* | operations | Disse er beskrevet i driftsvejledningen | |
| deletion.* | operations | Disse er beskrevet i driftsvejledningen | |
| digitalpost.* | Disse er beskrevet i driftsvejledningen | ||
minlogclient.properties
ODR anvender MinLogProvider til at registrere logninger i MinLog2, og i den forbindelse skal Kafka properties for Min Log 2 konfigureres.
| Property | Beskrivelse |
|---|---|
| kafka.producer.bootstrap.servers | Kafka endpoint, som anvendes i forbindelse med kald til MinLog2 |
| kafka.producer.client.id | Navnet som ODR vil fremgå med i listen af Producers på et Kafka Cluster. |
| kafka.producer.key.serializer | Serializer key for Kafka producer |
| kafka.producer.key.value.serializer | Serializer value for Kafka producer |
| kafka.topic | Kafka topic som anvendes i forbindelse med kald til MinLog2 |
nsp-role-mapping.properties
ODR anvender denne property fil til at mappe hvilken rolle (role), der kommer ned i minlog registreringen.
Property filen vedligeholdes her: https://git.nspop.dk/projects/TOOL/repos/nsp-role-mapping/browse/nsp-role-mapping.properties
| Property | Beskrivelse |
|---|---|
| citizen.user | Bestemmer hvilken rolle står beskrevet i minlog ved kald til ODR for borger Eksempel på værdi: borger |
| healthcareprofessional.unknown.user | Bestemmer hvilken rolle står beskrevet i minlog ved kald til ODR for sundhedfarlig, hvor der ikke kunne bestemmes en rolle. Eksempel på værdi: unverified role |
<Uddannelseskoder> | Der angives en række uddannelseskoder med kode=læsbar tekst Eksempler er: C511=Ambulancebehandler Når der logges til minlog, og rollen er en uddannelseskode, laves der mapning mellem kode og læsbar tekst. Findes koden ikke som mapning anvendes den oprindelige kode. |
| <Nationale Roller (NSP)> | Der angives en række nationale roller med rolle=læsbar tekst Eksempler er: urn:dk:healthcare:national-federation-role:code:41001:value:SundAssistR1=Sundhedsstamkort-Læser Når der logges til minlog, og rollen er en national rolle, laves der mapning mellem rolle og læsbar tekst. Findes rollen ikke som mapning anvendes den oprindelige rolle. |
log4j.xml
Konfigurerer logning for servicen.
Der benyttes en rolling file appender, hvor størrelsen af log filerne og antallet af gemte log filer konfigureres med de to environment variable: LOG_MAX_FILE_SIZE og LOG_MAX_BACKUP_INDEX.
Standardværdierne angiver nogle brugbare niveauer for anvendelse i produktion. Se Driftsvejledningen for uddybet beskrivelse af logning.
Se den officielle Log4j dokumentation for alternativ konfiguration.
log4j-nspslalog.properties
Standardværdierne konfigurerer en Log4j-backend der logger med ISO 8601 timestamps.
Se NSP-util - Designdokument.doc eller den officielle Log4j 1 dokumentation for alternativ konfiguration.
Konfiguration af Accesshandler
security.properties
Konfigurerer security-api'et. Standardværdierne opsætter en keystore til signering af responses. Der henvises til accesshandlerens dokumentation for yderligere detaljer om konfiguration af security-api'et.
security.skip
Der henvises til accesshandlerens dokumentation for yderligere detaljer om konfiguration af security-api'et.
Konfiguration af datasources
odr-service-wildfly komponenten kræver adgang til 2 JNDI datasources. Disse skal opsættes i Wildfly og refereres til i servicens application.properties.
Overblik over komponenter
Der følgende beskriver de forskellige deployables som komponenten indeholder.
Filnavn når deployet | Beskrivelse | Kilde |
|---|---|---|
odr-service-wildfly.war | ODR servicen | odr-service-wildfly-<version>.war |
odr-operations.war | ODR baggrundsjob | odr-operations.war |
Se driftsvejledningen for yderligere information.
Opgradering af komponenter
Når der kommer opgraderinger til en komponent, vil der medfølge release notes, der beskriver opgradering, fallback, osv. for den enkelte komponent.