Skip to content

Opetushallitus/omatsivut

Repository files navigation

omatsivut

Oppijan henkilökohtainen palvelu

Teknologiat

  • Scala 2.11 (servereillä JRE8)
  • Frontissa AngularJS, webpack, npm
  • Testeissä Specs2, mocha, phantomjs. Kaikille toiminnoille automaattiset testit.

JDK

  • Käytetään kehityksessä ja sovelluksen ajamiseen JDK8:a, mutta scala-maven-pluginin target version on yhä 1.7

    • odotetaan scala 2.12:sta ja spring 4 upgradea ennen target version vaihtoa
  • JCE (Java Cryptography Extension)

    • Ilman laajennosta tulee virhe: "java.security.InvalidKeyException: Illegal key size"
    • Lataa Oraclen sivuilta ja kopioi tiedostot $JAVA_HOME/jre/lib/security

    http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

  • Java-versio vähintään 1.8 update 40 (aiemmilla tarvitaan flägi -XX:-EliminateAutoBox)

Lisää JAVA_HOME ympäristömuuttujat polkuun:

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

Tarvittavat build-työkalut

Asenna NodeJS haluamallasi tavalla. Asenna sen avulla projektin kehitystyökalut komennolla:

npm install

Ensimmäisellä kerralla esimerkiksi testejä ajettaessa buildataan Docker-kontit:

cd postgresql/docker/
docker build --tag omatsivut-postgres .
docker build --tag valintarekisteri-postgres .

IDE-buildi

Importoi IDEA:ssa projektin maven projektina.

Jos testeistä tulee IDE:llä yllättäviä StackOverflow-exceptioneita, anna JVM:lle suurempi stack 'VM parameters'-vivulla, esim. -Xss4m.

Käynnistä sovellus IDEAsta

npm install
mvn clean install

Tämä luo ./target-kansion alle valinta-tulos-service.war -tiedoston

Aja JettyLauncher-luokka.

  • jotta impersonointi/autentikoinnin ohitus onnistuu, anna parametri -Domatsivut.profile=it (JVM parametri, ei CLI parametri).
  • lisäksi -Xss2M, ettei stäkki lopu fikstuuridatalla, jossa on erittäin syviä rakenteita

Ajo oikealla Jettyllä

Valmistele ensin sopiva, ympäristökohtainen common.properties. Valitse, käytätkö tietokantoja omalta koneeltasi vai palvelinympäristöltä.

Tässä yhdet esimerkkitweakkaukset.

11c11,12
< host.haku=testiopintopolku.fi
---
> #host.haku=testiopintopolku.fi
> host.haku=http://localhost:8080
36c37,38
< omatsivut.valinta-tulos-service.url=https://virkailija.testiopintopolku.fi/valinta-tulos-service
---
> #omatsivut.valinta-tulos-service.url=https://virkailija.testiopintopolku.fi/valinta-tulos-service
> omatsivut.valinta-tulos-service.url=http://david.devaaja.devaa.opintopolku.fi:18888/valinta-tulos-service  # huom, /etc/hosts :issa pitää olla 127.0.0.1 david.devaaja.devaa.opintopolku.fi
55c57,58
< omatsivut.db.url=jdbc:postgresql://omatsivut.db.testiopintopolku.fi:5432/omatsivut
---
> #omatsivut.db.url=jdbc:postgresql://omatsivut.db.testiopintopolku.fi:5432/omatsivut
> omatsivut.db.url=jdbc:postgresql://localhost:25440/omatsivut  # huom, localhost:25440 on ssh-putkitettu omatsivut.db.testiopintopolku.fi:5432:hen
99c102
< mongodb.oppija.uri=mongodb://tunnus:salasana@mongocluster-1.testiopintopolku.fi,mongocluster-2.testiopintopolku.fi,mongocluster-3.testiopintopolku.fi:27017
---
> mongodb.oppija.uri=mongodb://tunnus:salasana@localhost:47018 # huom, localhost:47018 on ssh-putkitettu mongo-clusterin masteriin

Starttaa sitten OmatsivutServerLauncher sopivilla parametreilla, esim -Xss2m -Duser.home=/home/thrantal/oph-confs/omatsivut-pallero-local-oph-configuration/. Huomaa, että oph-configuration -hakemiston tulee olla user.home-hakemiston alla.

Sisäänkirjautumisen saa feikattua tekemällä URLiin http://localhost:8080/omatsivut/initsession pyyntö, jossa hetu-headeriin annetaan halutun käyttäjän henkilötunnus.

Offline-käyttö (skipRaamit) ja käyttö IE9:llä

Kun sovellusta ajetaan -Domatsivut.profile=it-parametrillä, toimii se ilman verkkoyhteyttä vaikkapa junassa. Selaimessa sovellus kuitenkin lataa "oppija-raamit" testiympäristön serveriltä, johon sinulla ei välttämättä ole pääsyä. Tässä tapauksessa voit käyttää osoitetta http://localhost:7337/omatsivut/index.html#skipRaamit, jolloin raamit jätetään pois. Mocha-testit käyttävät samaa ratkaisua.

Myös IE9:llä pitää paikallisessa ympäristössä CORS:n takia käyttää skipRaamit tapaa.

Maven-buildi

Testit

Näin ajat testit komentoriviltä.

npm install
mvn test

Komento ajaa kaikki testit, mukaan lukien yksikkötestit, REST-palvelujen testit, mocha-selaintestit.

Fatjar-paketointi

./webbuild.sh
mvn package

Fronttidevaus

Kehitystä varten oleva buildi (ei minimointia):

npm run dev

Jatkuva fronttikäännös käyntiin näin (ei minimointia):

npm run watch

Tuotantoa vastaava buildi

npm run build

Fronttikoodit sijaitsevat src/main kansion alla hieman sekalaisessa järjestyksessä. Tyyleissä on käytetty lessiä. Niiden perusteella generoidaan css-tiedostot kansioon src/main/webapp/css. HTML templatet on ladattu mukaan direktiiveihin merkkijonoina. Fronttikoodit paketoidaan webpackilla bundle.js tiedostoksi.

Impersonointi / autentikoinnin ohitus

Jos applikaatiota ajetaan "testimoodissa" eli esim. -Domatsivut.profile=dev, niin autentikointi on mahdollista ohittaa - vetuman sijaan näytetään "Vetuma Simulator"-näkymä, jossa voi syöttää haluamansa henkilötunnuksen.

mocha-phantomjs -testit

Testien ajaminen selaimessa

Palvelin käyntiin (it-profiili ja JettyLauncher, ks yllä) ja sitten http://localhost:7337/omatsivut/test/runner.html

Testien ajaminen onnistuneesti vaatii sitä, että tämän projektin rinnalta hakemistopuusta löytyy valinta-tulos-service.

Valinta-tulos-service.war muodostuu target:n alle komennolla mvn clean compile

Testien ajaminen aikaansaa myös sisäänkirjautumisen, jonka jälkeen sovelluksen voi halutessaan avata lokaalisti osoitteessa http://localhost:7337/omatsivut, tosin tällöin sovellus on siinä tilassa mihin testit ovat sen jättäneet.

Testidata

Testien ajaminen käynnistää embedded Mongo instanssin hakulomake-kannasta.

Fixture-data ladataan toisista projekteista maven-riippuvuuden kautta. Testejä kehittäessä fixture-dataa voi omalla päivittää asentamalla "mvn install"-komennolla uusia versioita projekteista.

Sovellusprofiilit

Sovellus tukee eri profiileita. Profiili määritellään omatsivut.profile system propertyllä, esim -Domatsivut.profile=it. Profiili määrittää lähinnä, mistä propertyt haetaan, mutta sen avulla myös voidaan mockata palveluita. Ks AppConfig.scala.

it-profiili

Tämä on kätevin profiili kehityskäyttöön, ja ainoa profiili, jolla esimerkiksi mocha-testit voidaan onnistuneesti ajaa. It-profiililla käytetään:

  • embedded mongo-kantaa, joka käynnistetään serverin käynnistyksen yhteydessä porttiin 28018.
  • paikallista postgres-kantaa, toistaiseksi session tallentamisen takia, joka myöskin käynnistetään serverin käynnistyksen yhteydessä

dev-profiili

Tällä profiililla käytetään paikallista mongo-kantaa ja mockattuja ulkoisia järjestelmiä (pois lukien valinta-tulos-service).

Paikallisen mongon käynnistys:

mongod --fork --config /usr/local/etc/mongod.conf

templated-profiili

Tällä profiililla sovelluksen asetukset generoidaan tuotantoympäristöä vastaavasti common.properties.template -tiedostosta ja annetusta muuttujatiedostosta. Testi- ja tuotantoympäristöissä käytettävät muuttujatiedostot sijaitsevat erillisissä sisäisissä "environment" -repositorioissa.

IDE:ssä voit ajaa käyttämällä system propertyä -Domatsivut.profile=templated ja aseta muuttujat sisältävän tiedoston sijainti toisessa system propertyssä, esim. -Domatsivut.vars={HAKEMISTO}/oph_vars.yml Mallia vars-tiedostoon voi ottaa tiedostosta src/main/resources/oph-configuration/dev-vars.yml

default-profiili

Oletusasetuksilla käytetään ulkoista konfiguraatiotiedostoa omatsivut.properties, joka generoidaan deployn yhteydessä common.properties.template ja ulkoisesta muuttujatiedostosta. Tätä profiilia käytetään testi- ja tuotantoympäristöissä.

cloud-profiili

Tällä profiililla sovellus käyttää pilviympäristöön sopivia asetuksia ja komponentteja. Muuten suunnilleen sama kuin default-profiili, mutta esim. tiedostot käyttävät suoran levyjärjestelmän sijaan S3 palvelua.

API-dokumentaatio

REST-rajapinnat dokumentoitu Swaggerilla.

http://localhost:7337/omatsivut/api-docs