Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Navitabs
rootLaboratoriesvarservice (SXA) - Leverancebeskrivelse
includeroottrue


Anchortoc
_Toc40578283_Toc40578283
Svareksponeringsservice XDS-adaptere
Guide til Udviklere
Anchor_Toc292960798_Toc292960798 Anchor_Toc327798371_Toc327798371 Anchor_Toc277248668_Toc277248668 Anchor_Toc44403513_Toc44403513Indh Anchor_GoBack_GoBackold
1 Introduktion
1.1 Formål
1.2 Læsevejledning
1.3 Dokumenthistorik
1.4 Definitioner og referencer
2 Opsætning af udviklingsmiljø
2.1 Krav til software
2.2 Tilpasning af miljø
2.3 Bygge War filen
2.4 Deployering til WildFly
2.5 Afvikling af integrationstests mod WildFly
2.6 Samtidig deployering og afvikling af integrationstests
3 Deployment på WildFly
3.1 Udviklers workstation
4 Beskrivelse af systemdesign
5 Beskrivelse af kildekodens strukturering og design
5.1 Kode-strukturering
5.2 Generelt design af Svareksponeringsservice XDS-adaptere
5.3 Svareksponeringsservice XDS Registry Adapter
5.4 Svareksponeringsservice XDS Repository Adapter
6 Beskrivelse af test-setup
6.1 Unittests (JUnit)
6.2 Integrationstests (Failsafe)
6.2.1 Krævet test setup
6.2.2 Afvikling af integrationstests
6.3 Code coverage
6.3.1 Code coverage for unittests
6.3.2 Code coverage for unittests og integrationstests

...

outlinetrue

Introduktion

...

Formål

Formålet med dette dokument er at beskrive

...

, hvordan et udviklingsmiljø til videreudvikling

...

af  SXA (Labsvar) Adaptere, kan sættes op, samt hvordan koden bygges,

...

deployes og testes.

...

Først beskrives de softwaremæssige krav, der er til udviklingsmiljøet, herunder hvordan kode hentes og bygges. Dernæst beskrives deploymentmiljøet.

...

Læsevejledning

Læser forventes at have kendskab til Java softwareudvikling med anvendelse af Maven

...

, Docker og docker-compose.

Hvor der i teksten er angivet <component base> refereres til topniveaufolderen for kildekoden for komponenten

...

Version

Dato

Ansvarlig

Beskrivelse

0.9

24.08.2016

Systematic

Første udgave

1.0

13.08.2016

Systematic

Klar til release

...

Definition

...

Beskrivelse

...

DGWS

...

.

...

...

NSI

...

National Sundheds-IT

...

NSP

...

Den nationale service platform (inden for sundheds-IT)

...

SXA

...

Svareksponeringsservice XDS-adaptere

...

XDS

...

Cross-Enterprise Document Sharing

...

Alias

...

Beskrivelse

...

Svareksponeringsservice XDS-adaptere – Design og Arkitektur, (SSE/11734/SDD/0014)

...

Installationsvejledning Svareksponeringsservice XDS-adaptere, (SSE/11734/INS/0011)

...

Konfiguration af Svareksponeringsservice XDS-adaptere, (SSE/11734/NOT/0056)

...

Opsætning af udviklingsmiljø

I det følgende antages at koden er hentet

...

fra SVN: https://svn.nspop.dk/svn/components/labsvar/

Krav til software

SXA Adaptere deployeres vha. docker, hvorfor de alle baserer sig på NSP platformens base image, hvori der findes nødvendigt software til afvikling.

Derudover er der krav til de anvendte udviklingsværktøjer:

  • Maven 3.0.3 eller højere anvendes.

...

Wiki Markup
WildFly (se \[Installationsvejledning\])

...

Ved deployering vha. Maven-scripts og kørsel af integrationstests beskrevet i det efterfølgende gøres brug af property-filer, der beskriver placering af WildFly og endpoints for eksterne systemer mm.
Disse property-filer ligger i:

  • <component base>/environment.properties
  • <component base>/integrationtest/src/test/resources/testclient.properties

...

  • docker-compose version 3.4 eller højere.

Kildekodens struktur og design

Modulopbygning

Kildekoden bygges vha Apache Maven, og kildekoden er struktureret som Maven moduler. Følgende moduler findes i  SXA Adaptere:

ModulBeskrivelse
SXA Lab Report Service StubStub til at emulere en Svareksponeringsservice backend. Pakkes som en Wildfly applikation (WAR)
SXA Provider CommonFælleskode, der benyttes både af SXA Document Metadata Provider og SXA Document Provider
SXA Document Metadata Provider

Modul til implementation af dokumentsøgning (ITI-18) - dvs "registry-delen" af  SXA Adaptere. Modulet har til ansvar at opbygge dokumentmetadata og reagerer på søgeparametre givet ved forespørgsel på dokumentmetadata dog uden at persistere data. I stedet dannes metadata tilpasset patienten.

SXA Document Metadata Provider WarPakker AO Document Providere som en Wildfly applikation (WAR)
SXA Document Metadata Provider Integration TestIntegrationstests til SXA Document Metadata Provider. Modulet har til ansvar at fremfinde metadatadata.
SXA Document ProviderModul til implementation af dokumenthentning (ITI-43) - dvs "repository-delen" af SXA Adaptere. Modulet har til ansvar at hente dokumenter indeholdende laboratoriesvar fra Svareksponeringsservice backend.
SXA Document Provider WarPakker SXA Document Provider som en Wildfly applikation (WAR)
SXA Document Provider Integration TestIntegrationstests til SXA Document Provider
SXA Document Sharing Integration TestIntegrationstests for SXA Adaptere. Tester fremsøgning af dokumentreferencer (ITI-18) samt afhentning af dokumenter (ITI-43)

Generelt design

...

Gennemfør følgende steps for at bygge komponenterne til Svareksponeringsservice XDS-adaptere.

  1. For at bygge projektet uden deployering til WildFly eller kørsel af integrationstest foretages følgende kommando fra <component base>:

...

For at etablere og deployere properties til WildFly foretages følgende kommando fra <component base>:
mvn install –Pdeploy-ds-appserver \
-Denvironment-property-file=<sti til tilpasset environment.properties>
Bemærk, at dette afstedkommer deployering til WildFly, herunder at:

  1. Property-filer deployeres til WildFly (hvilket kræver skriverettighed i default/conf)

...

  1. Service-filer deployeres til WildFly (hvilket kræver skriverettighed i Wildfly/standalone/deployments)

...

Wiki Markup
For at afvikle integrationstests mod den deployerede instans på WildFly udføres kommandoen:
mvn verify –Pexternal-test \
-Dtestclient-property-file={_}<sti til tilpasset testclient.properties>_
<ac:structured-macro ac:name="anchor" ac:schema-version="1" ac:macro-id="c775b123-2ddc-47bd-a869-357f1f05cea1"><ac:parameter ac:name="">_Toc305606314</ac:parameter></ac:structured-macro>Bemærk, at afvikling af integrationstests kræver, at Dokumentdelingsservicen er deployeret (med sine afhængigheder) og konfigureret til at anvende Svareksponeringsservice XDS-adapterne, som beskrevet i \[Konfiguration\].

...

For at lette afvikling af integrationstests ifm. udvikling, kan deployering af war/ears til WildFly og afvikling af integrationstests udføres med kommandoen:
mvn install -Ddev \
-Denvironment-property-file=<sti til tilpasset environment.properties> -Dtestclient-property-file=<sti til tilpasset testclient.properties>

...

Wiki Markup
Der henvises til installationsvejledningen \[Installationsvejledning\] for nærmere instrukser. 

...

Når man udvikler kan det være praktisk at foretage deploy til en lokal WildFly.

...

Wiki Markup
<ac:structured-macro ac:name="anchor" ac:schema-version="1" ac:macro-id="aeda00bf-034c-401d-b0aa-34e1c03c42ec"><ac:parameter ac:name="">_Toc305606317</ac:parameter></ac:structured-macro>Det overordnede design for Svareksponeringsservice XDS-adapterne er beskrevet i \[Design og Arkitektur\].

...

  • xdswrappers/documentmetadataprovider – modul der indeholder de java-komponenter, der fremfinder dokumentmetadata og reagerer på søgeparametre givet ved forespørgsel på dokumentmetadata.
  • xdswrapper/documentmetadataprovider-war – modul der står for indpakingen af documentmetadataprovider i en war fil.
  • xdswrapper/documentprovider – modul der indeholder de java-komponenter, der fremfinder dokumenter og reagerer på søgeparametre givet ved forespørgsel på dokumenter.
  • xdswrapper/documentprovider-war – modul der står for indpakingen af documentprovider i en war fil.

Der er afhængigheder til forskellige Maven-artefakter, hvoraf følgende er skabt i regi af NSI:

  • documentsharing/* – moduler der indeholder abstraktioner over IHE XDS dokumentmetadata, forespørgsel og indhentning af dokumenter.
  • hsuid/ - modul der indeholder implementering af OIO attributter til identifikation af sundhedsfaglige personer, der er fælles for webservicekomponenter, der anvender DGWS
  • dgws/consumer - modul der indeholder implementering af DGWS consumer funktionalitet, der anvendes af komponenter der anvender DGWS i rollen som web service consumer.
  • dds/client-types – moduler der indeholder IHE wsdl og xsd filer for "Registry Stored Query Transaction", samt JAXB-generede typer fra disse filer.

...

De to Java-webservices Svareksponeringsservice XDS Registry Adapter og Svareksponeringsservice XDS Repository Adapter er implementeret ved brug af komponenter fra documentsharing og Dokumentdelingsservices.
JAX-WS er anvendt på baggrund af artefakter fra DDS skabt ved kodegenerering ud fra WSDL-filer og XSD-filer.

...

Servicen består af en række Maven-moduler, der findes under xdswrappers/:

  • documentmetadataprovider: Indeholder forretningslogik
  • documentmetadataprovider-war: Konfigurerer webservicen og bygger war-filen, der skal deployeres
  • documentmetadataprovider-integrationtest: Indeholder integrationstests af webservicen

...

Servicen består af en række Maven-moduler, der findes under xdswrappers/:

  • documentprovider: Indeholder forretningslogik
  • documentprovider-war: Konfigurerer webservicen og bygger war-filen, der skal deployeres
  • documentprovider-integrationtest: Indeholder integrationstests af webservicen

...

JUnit anvendes til implementering af unit tests. Der er kontinuert gennemført unit tests på alle komponenter i projektet.
Unit tests kan afvikles ved at køre:
mvn test

...

Maven Failsafe plugin anvendes til gennemførelse af integrationstests i projektet.

...

Integrationstests forudsætter at Dokumentdelingsservicen (DDS) og dennes afhængigheder er deployeret til WildFly. Desuden kræves at DDS'en er konfigureret til at kende både Svareksponeringsservice XDS Registry Adapter og Svareksponeringsservice XDS Repository Adapter, samt at disses konfigurationer er i overensstemmelse (fx skal samme repositoryUniqueId være anvendt i deres konfigurationer).

...

Integrationstests kan afvikles ved at køre:
mvn verify –Pexternal-test

...

Code coverage analyse er foretaget i projektet med anvendelse af Maven Cobertura plugin.

...

Code coverage-rapport omfattende alene unittests genereres ved at gennemføre følgende trin:

  1. I kommandoprompt i SXA hovedfolder (folderen med parent pom) udføres:

mvn clean site cobertura:cobertura

  1. Genereret code coverage-rapport kan nu læses i folderen target/site/cobertura

...

En samlet code coverage-rapport omfattende både unittests og integrationstests kan genereres ved forberedelse og gennemførsel af trin beskrevet i det efterfølgende.

...

Cobertura skal installeres på WildFly og Ant installeres mhp. anvendelse ved fletning af code coverage-rapporter fra unittest og integrationstests.
De anvendte versioner er:

  • Cobertura 2.1.1
  • Ant 1.9.4

...

  1. Cobertura etableres, ved enten:
    1. Download fra fx sourceforge (https://sourceforge.net/projects/cobertura/) og udpakning
    2. Kildekode hentes fra https://github.com/cobertura/cobertura/releases og bygges
  2. Ant installeres
    1. Download fra http://archive.apache.org/dist/ant/binaries/apache-ant-1.9.4-bin.tar.gz
    2. Kopier følgende afhængigheder til Ant's lib folder

      Jar

      Kilde

      asm-5.0.1.jar

      Indeholdende i Cobertura-2.1.1-bin-tar

      asm-analysis-5.0.1.jar

      Indeholdende i Cobertura-2.1.1-bin-tar

      asm-commons-5.0.1.jar

      Indeholdende i Cobertura-2.1.1-bin-tar

      asm-tree-5.0.1.jar

      Indeholdende i Cobertura-2.1.1-bin-tar

      asm-util-5.0.1.jar

      Indeholdende i Cobertura-2.1.1-bin-tar

      cobertura-2.1.1.jar

      Indeholdende i Cobertura-2.1.1-bin-tar

      commons-lang3-3.3.2.jar

      Indeholdende i Cobertura-2.1.1-bin-tar

      oro-2.0.8.jar

      Indeholdende i Cobertura-2.1.1-bin-tar

      slf4j-api-1.7.5.jar

      Indeholdende i Cobertura-2.1.1-bin-tar

      slf4j-log4j12-1.6.4.jar

      Bør være i lokal m2 folder

      log4j-1.2.16.jar

      Bør være i lokal m2 folder

  3. Installation af Cobertura modul på WildFly:
    1. Følgende Cobertura afhængigheder kopieres fra cobertura-2.1.1-bin.tar.gz til <wildfly folder>/modules/net/sourceforge/cobertura/main

      Jar

      Destination

      <arkiv>/cobertura-2.1.1.jar

      <modul-main>/

      <arkiv>/lib/asm-tree-5.0.1.jar

      <modul-main>/lib/

      <arkiv>/lib/asm-commons-5.0.1.jar

      <modul-main>/lib/

      <arkiv>/lib/asm-util-5.0.1.jar

      <modul-main>/lib/

      <arkiv>/lib/asm-analysis-5.0.1.jar

      <modul-main>/lib/

      <arkiv>/lib/oro-2.0.8.jar

      <modul-main>/lib/

    2. En module.xml fil skabes i samme main mappe med følgende indhold:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="net.sourceforge.cobertura">
<resources>
<resource-root path="."/>
<resource-root path="cobertura-2.1.1.jar"/>
<resource-root path="lib/asm-tree-5.0.1.jar"/>
<resource-root path="lib/asm-commons-5.0.1.jar"/>
<resource-root path="lib/asm-util-5.0.1.jar"/>
<resource-root path="lib/asm-analysis-5.0.1.jar"/>
<resource-root path="lib/oro-2.0.8.jar"/>
</resources>
<dependencies>
<module name="asm.asm" />
<module name="javax.servlet.api" />
<module name="org.slf4j" />
</dependencies>
</module>

    1. Default udskrives coveragefilen (cobertura.ser) i <wildfly folder>/bin mappen. Ønskes filen udskrevet til en anden mappe skabes filen cobertura.properties i main mappen med indeholdet:

net.sourceforge.cobertura.datafile=<sti>/cobertura.ser

...

  1. For at få Cobertura til at skrive coverage af integrationstests, er der to muligheder:

    Metode

    Installation og brug

    coberturaFlush.war servicen

    1. coberturaFlush.war er at finde i Cobertura-2.1.1-bin-tar

...

Efter ændring deployeres coberturaFlush.war og servicen udstiller "<host>/coberturaFlush/flushCobertura". Kald til denne service ved f.eks. Curl får Cobertura til at skrive coverage filen. (Se trin 3.3).|

Genstart af WildFly

  1. Cobertura skriver automatisk coverage fil ved genstart af WildFly

...

  1. Genstart af WildFly

Services

Ovenstående modulliste opsumerer kodens struktur.

Tre af modulerne producerer installerbare services (WAR filer).

Det drejer sig om følgende:

  • SXA Lab Report Service Stub: Denne service anvendes kun til udvikling og emulerer en Svareksponeringsservice backend til levering af laboratoriesvar.
  • SXA Document Metadata Provider War: Denne service implementerer "registry-delen" af SXA Adaptere. Dette er et generelt modul, der konfigureres ved hjælp af konfigurationsfiler.
  • SXA Document Provider War: Denne service implementerer "repository-delen" af SXA Adaptere. Dette er et generelt modul, der kan konfigureres ved hjælp af konfigurationsfiler.

Byg af SXA Adaptere

Man skal bruge Apache Maven til at bygge modulerne, hvilket gøres ved at køre kommandoen

mvn package


Efter byg kan WAR filer findes her:

./labreportservicestub/target/sxa-labreportservicestub.war

./xdswrappers/documentmetadataprovider-parent/documentmetadataprovider-war/target/sxa-documentmetadataprovider.war

./xdswrappers/documentprovider-parent/documentprovider-war/target/sxa-documentprovider.war

Disse tre WAR filer svarer til de beskrevne services i forgående afsnit.

Deployering af SXA Adaptere

Efter byg kan det være nyttigt at lave en deployering af de genererede services (WAR).

Til udviklingsformål er der udarbejdet et docker-compose setup. Dette ligger i

./compose/development/docker-compose.yml

Det relevante docker-compose setup startes med følgende kommando:

./compose/development/docker-compose up --build

Docker-compose setup'et startere bådeSXAAdapter services samt bagvedliggende database service og mock Svareksponeringsservice. Når alle services er startet kan WSDL for de deployede SXA Adapter services nåes på følgende URL'er:

Test af SXA Adaptere

Der er udviklet både unit tests og integrationstests til SXA Adaptere. Struktur og afvikling af  disse beskrives i det følgende.

Unit tests

Der er udviklet en række unit tests til de forskellige moduler i SXA Adaptere.

Maven sørger for afvikling af unit tests som en del af byg af SXA Adaptere.

Unit tests kan også køres efter et byg med kommandoen:

mvn test

Integrations tests

Maven Failsafe plugin anvendes til gennemførelse af integrationstests i projektet.

Der er udviklet en række integrationstests til AO XDS Adapter og disse kan være nyttige at afvikle på udviklermaskinen.

Afviklingen forudsætter, at AO XDS Adaptere er bygget og deployeret (ved opstart af relevant docker-compose setup) som beskrevet ovenfor.

Integrations tests kan også køres efter et byg med kommandoen:

mvn verify -P external-test

Jenkins og Code Coverage

SXA kan bygges med NSP's Jenkins server via følgende job:

https://jenkins.nspop.dk/job/LabSvar_build/

Code coverage trends kan følges på:

https://jenkins.nspop.dk/job/LabSvar_build/jacoco/

Og her fra kan man klikke sig ud på JaCoCo Coverage rapporter for hvert byg.

...

Code coverage-rapport omfattende både unittests og integrationstests genereres ved at gennemføre følgende trin:

  1. Kontroller, at wildfly bruger-account kan skrive cobertura.ser filen i output folderen (Standard <wildfly>/bin/cobertura.ser eller bestemmes i cobertura.properties)
  2. Kontroller, at stien til cobertura.ser er korrekt i filen cobertura/src/main/coberturaScripts/cobertura.properties under SXA-projektets hovedfolder.
  3. Coberturas instrumentering af koden sker ved udførsel af følgende i kommandoprompt i SXA-projektets hovedfolder (folderen med parent pom):

mvn clean install -Dcobertura-build \
-Pdeploy-to-appserver \
-Denvironment-property-file=<sti til tilpasset environment.properties>
Bemærk, at argumentet –Pdeploy-to-appserver aktiverer en Maven-profil, der kopierer ear/war-filer til WildFly deployment folder vha. properties. Som alternativ til dette argument kan ear/war-filer deployeres manuelt.

  1. Gen-deployer SXA-projektets services på WildFly
  2. I samme folder udføres integrationstestene ved:

mvn verify –Pexternal-test __
-Denvironment-property-file=<sti til tilpasset environment.properties> \
-Dtestclient-property-file=<sti til tilpasset testclient.properties>

  1. Afslutning af coberturas optagelse gennemføres ved enten:
    1. Shutdown af WildFly, eller
    2. At åbne siden http://<host:port>/coberturaFlush/flushCobertura (fx via curl eller i browser. Bemærk at dette forudsætter at filen coberturaFlush.war blev kopieret og deployeret)
  2. Flet code coverage-rapporter ved i kommandoprompt i SXA hovedfolder at udføre:

cd cobertura/target/coberturaReporting-coberturaReporting
ant –f cobertura.xml create-report

...