Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Navitabs
rootStamdatamodul (SDM)
firsttabRegisterudtrækservices (SDM)
includeroottrue

...


Table of Contents

Formål

Nærværende dokument er en guide til nye udviklere af stamdataservicen på NSP. Guiden gennemgår på overordnet plan de aktiviteter, der er nødvendige for at kunne videreudvikle stamdataservicen.

     Metode Metode og rapportens opbygning

Efter nærværende introduktion vil dokumentet gennemgå de væsentligste dele af opsætningen af et lokalt udviklingsmiljø og afvikling af test.

Dokumentet forudsætter, at læseren har grundig kendskab til Java udvikling, webservices, Maven samt Docker-compose. Kendskab til JBoss Wildfly applikationsserver vil yderligere hjælpe læseren, men er ikke en forudsætning.

...

Markering af referencer til filer.

     Målgruppe Målgruppe og læsevejledning

Den primære målgruppe for dokumentet er systemudviklere.toc

...


System design

Hver NSP komponent er designet som en Servlet 2.4 web-applikation og benytter Guice til dependency injection.

...

Hvert modul indeholder en ApplicationContextListener.java fil der fungerer som entry-point til applikationen. Det anbefales, at man som ny udvikler på projektet kigger koden igennem med denne fil som udgangspunkt.

     SealSeal

Stamdataservicen benytter Seal.java til håndtering af forespørgsler og svar i webservice snitfladen.

Seal.java bygger i nuværende version (2.1.x) på commons-logging, hvilket konflikter med JBoss AS6. I pom.xml filerne er commons-logging derfor fjernet, og erstattet med en slf4j commons-logging proxy.

Derudover er XercesImpl også fjernet, da den på tilsvarende måde konflikter med JBoss AS6Wildfly[1].

     PropertiesProperties

Stamdataservicen benytter Guice til konfigurationsstyring. Konfiguration styres via filen config.properties, der pakkes sammen med WAR-filen.

Importeren styres af historiske årsager stadig via en statisk klasse (Configuration.java).

...

Opsætning af udviklingsmiljø

Opsætningen af udviklingsmiljøet for stamdataservicen forudsætter, at følgende elementer allerede er installeret på udviklerens maskine:


  • Java Developer Kit 6.0_x(JDK 8)
  • Et passende udviklingsmiljø
  • Maven 3.x
  • Docker 18.x (testet med 18.09.7)
  • JBoss AS6

     KildekodeKildekode

Kildekoden er placeret i SVN:

https://svn.nspop.dk/svn/components/sdm/


     Byggemiljø

Stamdataprojektet anvender Maven som byggesystem [MAVEN]. Strukturen følger de generelle anbefalinger for Maven projekter, og er struktureret med en parent pom.xml og en projekt pom.xml fil for hvert underprojekt.

Subprojekterne er opbygget efter Maven layout konventionen.

 

    Database setup

Projektet bygges (og tests afvikles) med følgende kommando:

mvn clean install

Database setup

Som en del af docker-compose setuppet for projektet, startes Projektet indeholder et docker-compose setup, der starter en MariaDB container op, og initialiserer en database initialiseres.

For at starte projektet inkl. MariaDB-containeren køres følgende fra projektroden:

...

mariadb_1 | 2020-01-13 09:27:51+00:00 [Note] [Entrypoint]: Creating database sdm_warehouse

...


Bemærk

...

at

...

Bemærk at der ved afvikling af tests anvendes en in-memory H2-database, og til dette er det derfor ikke nødvendigt at starte en lokal database op. 

     Autogenereret Autogenereret kode

Start med at køre følgende:

...

<CPR-modul>/…/WEB-INF/sun-jaxws.properties

...


Unit Tests

Installationen kan verificeres ved at eksekvere stamdataservicens test suite.

Stamdataservicen benytter JUnit, Mockito og Mockito Undertow til test.

Testkoden er for hvert modul lokaliseret i:

...

Test suiten afvikles ved at udføre følgende kommando i projektroden:

% mvn test

(Denne metode afvikler ikke testene PersonInformationIT, DetGodeCPROpslag104IT og DetGodeCPROpslag1041aIDWSIT, hvilket verify nedenfor gør)


Kommandoen kan også udføres under de individuelle moduler, hvorved kun undermodulets test udføres.

...

Kode konventionerne følger reglerne defineret i filen:

config/checkstyle.xml

En del af testsuiten består af integrationstests, som kan afvikles mod forskellige miljøer. Miljøerne er konfigureret i profiler, således at man f.eks. kan teste mod test1-miljøet med følgende kommando:

...

Profilerne kan ses i pom-filen. Der er pt. følgende profiler:

...


...

Som en del af testen bliver den servicen startet i en indlejret Undertow servlet-container, som der testes mod.

...

Dette gør at noget af unit testen kører som en slags integrationstest.

Bemærk: I skrivende stund er det kun development-profilen der virker, da testklasserne selv opretter testdata i en lokalt kørende database. Der udestår et arbejde med at adskille oprettelsen af testdata fra udførsel af tests.

   IDE

Stamdataservicen kan principielt udvikles i enhver Java IDE, der forstår Maven projekters opbygning.

...

Obs! Denne metode kræver dog, at kommandoen udføres hver gang man ændrer i pom filerne.

     Distribution

Stamdataservicen kan bygges til distribution eller lokal test ved at udføre:

...

Dette generer en række WAR filer, der efterfølgende kan deployeres lokalt eller i produktion.

Kodeord til serverne og databaserne skal indhentes hos NSP-operatøren.

Tips og tricks

I de følgende beskrives problemer og deres løsninger:

     JBoss out of memory

     Beskrivelse

I JBoss’s boot.log:

...

$JBOSS_HOME/server/default/log/boot.log

Logger JBoss noget i stil med ”out of memory” og nævner “permgenspace”

     Løsning

Forøg JBoss permgen space ved at ændre linien indeholdende:

...

JAVA_OPTS="-Xms2048m -Xmx2048m -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"

Distribution

Mavens release plugin anvendes til at lave releases:

mvn org.apache.maven.plugins:maven-release-plugin:2.5.3:prepare

i filen

...

$JBOSS_HOME/bin/run.conf

 

til

...

JAVA_OPTS="-Xms2048m -Xmx2048m -XX:MaxPermSize=512m -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"

     JBoss kan ikke skrive til “trancsaction.log”        

     Beskrivelse

I JBoss’s boot.log:

...

$JBOSS_HOME/server/default/log/boot.log

Logger JBoss noget i stil med ”transaction.log” og ”cannot write”

     Løsning

Ignorér denne fejl.

Ændringslog

Nyeste udgave af dette dokument kan erhverves ved henvendelse til NSP-operatøren.

...

Version

...

Dato

...

Ændring

...

Ansvarlig

...

1.0

...

28/4-2011

...

Initielt Dokument

...

Trifork

...

1.1

...

6/10-2011

...

Opdateret med CPR tjenester

...

Trifork

...

1.2

...

8/12-2011

...

Kvalitetssikret af Lakeside

...

Lakeside

...

1.3

...

22/12-2011

...

Opdateret bla. med performance test af autorisationsservicen og kopi-register-servicen

...

Trifork

...

1.4

...

14/5-2013

...

Opdateret afsnit omkring oprettelse af database

...

Trifork

...

Referencer og kilder

Reference-id

Indhold / Overskrift

Henvisning

[MAVEN]

Welcome to Apache Maven

http://maven.apache.org/

[NIAB]

NSP in a box

Kan rekvireres ved henvendelse til operatøren inklusiv vejledning i anvendelse og konfiguration.

[BRS-guide til anvendere]

Guide til anvendere

Ligger i doc bibliotek i en BRS release

[BRS-driftvejledning]

Driftvejledning

Ligger i doc bibliotek i en BRS release

...