java9 moduulit jigsaw

23

Upload: arto-santala

Post on 11-Feb-2017

65 views

Category:

Technology


2 download

TRANSCRIPT

Page 2: Java9 moduulit jigsaw

MIKSI MODUULI?› Java 1.0, syntymävuosi 1995, on sittemmin jatkanut kasvua

ja turpoamista• Mukana kaikkea matkan varrelta, mm. Appletit, Corba, Midi

instrumentteja, Swing, jne

› Toisaalta Javan käyttö vaatii skaalautuvuudelta entistä enemmän• Mobiililaitteet ja IoT laitteet ja niiden kirjastovaatimukset, vs

GUI sovellukset, vs palvelinsovellukset tai pelkkä back-end käyttö

• Raspberry Pi vs 64GB heapillä varustettu AWS-hirviökone

Page 3: Java9 moduulit jigsaw

MIKSI MODUULI?› Javan alkuajoista asti on ollut käytössä termi JAR-helvetti

• https://en.wikipedia.org/wiki/Java_Classloader#JAR_hell

› Mitä ongelmia on .jar tason riippuvuuksien käytössä?

Page 4: Java9 moduulit jigsaw

MIKÄ MODUULI?

Page 5: Java9 moduulit jigsaw

TULEVAISUUDEN JDK/JRE

Page 6: Java9 moduulit jigsaw

OSGI VS JIGSAW

Page 7: Java9 moduulit jigsaw

MODUULIN TEKEMINEN› Moduuleita voi alkaa tekemään – ja käyttämään –

määrittelemällä projektin juureen uusi java-tiedosto: module-info.java

› Joka moduulille tulee omansa, se käännetään, ja säilyy näin mukana käännösympäristöstä ajoympäristöön

› Module-info määrittää moduulin nimen, julkisena näkyvät paketit joita se paljastaa, ja muut moduulit joita se tarvitsee toimiakseen

› Module-info ei ota kantaa versiointiin

Page 8: Java9 moduulit jigsaw

JIGSAW MODUULIT

Page 9: Java9 moduulit jigsaw

MODULE-INFO.JAVAmodule mailcore {}

module mailcore {

exports firstpackage;

}

module mailclient {

requires firstpackage;

}

Page 10: Java9 moduulit jigsaw

MODUULIEN PELISÄÄNTÖJÄ› Riippuvuuspolussa ei voi olla kahdesti exports-lausetta

samalla paketille (requires voi toistua)› Sykliset referenssit pahoja täälläkin (moduuli a riippuu

b:stä joka riippuu a:sta)› Nimetön moduuli näkee kaikki moduulit, ja julkistaa kaikki

sisältämänsä paketit• Moduuli accessibility-pelisäännöt astuvat peliin vasta jos

määrittelet moduulin koodillesi

Page 11: Java9 moduulit jigsaw

KÄÄNTÄMINEN MODUULIEN KERA› javac -d build --module-source-path src $(find src -

name "*.java")

› Kääntää moduulit src alla, ja laittaa vastaavaan hakemistorakenteeseen build-kansion alle

Page 12: Java9 moduulit jigsaw

PAKETOIMINEN MODUULIEN KERAjar --create --file mlib/[email protected] --module-version 1.0 -C build/module2 .

jar --create --file mlib/[email protected] --module-version 1.0 --main-class firstpackage.Client -C build/module1 .

Page 13: Java9 moduulit jigsaw

AJAMINEN MODUULIEN KERAjava –-module-path mlib -m module1

Page 14: Java9 moduulit jigsaw

MODUULIEN LINKITTÄMINENjlink –module-path $JAVA_HOME/jmods:mlib –add-modules module1 --output module1

cd module1/bin

./java -listmods

./module1

Page 15: Java9 moduulit jigsaw

JDK/JRE› Tulevassa Java ympäristössä on vain kolme kansiota: bin,

conf ja lib• Vanha jre-kansio katoaa pois, jre unifioituu JDK:hon• rt.jar ja tools.jar katoaa

› Java versionumerointi menee uusiksi• http://openjdk.java.net/jeps/223• $MAJOR.$MINOR.$SECURITY• Mahdollisesti myös Major versiosta pudotettaisiin alusta

ykkönen pois, eli esim: 9.1.1

Page 16: Java9 moduulit jigsaw

JDEPS› Jdeps työkalulla voit analysoida koodin riippuvuuksia

käännetystä koodista (mukana JDK 8:sta alkaen)• nimeät vain luokat joita haluat analysoida, tai kansion, tai .jar

paketin• -jdkinternals parametrilla voit rajoittaa näytön vain jdk osiin

joita sovellus vaatii toimiakseen

› jdeps –jdkinternals myapp.jar

Page 17: Java9 moduulit jigsaw

MODUULIEN ORGANISOINTI› Moduulit nimetään kuten paketitkin› Nyt sopii miettiä tarkemmin, mikä osa julkaistaan, ja mitkä

jäävät piiloon (pakettitasolla), ja mitä riippuvuuksia softa oikeasti tarvitsee

› Hakemistorakenteisiin tulee siis muutos, jos työstät useamman moduulin projektia:• src/myapp.solita.fi/fi/solita/myapp/package1/Source.java

Page 18: Java9 moduulit jigsaw

SERVICE› Jigsawiin on myös lisätty perinteinen loose coupling-malli

service consumer ja service producer välille• Uses, ja provides-avainsanaparit (myös with)

› Ei mitään kovin hienostunutta, mutta provider-moduuli voidaan vaihtaa ennen käynnistystä

Page 19: Java9 moduulit jigsaw

SERVICES ESIMmodule com.socket { exports com.socket; exports com.socket.spi; uses com.socket.spi.NetworkSocketProvider; }

module org.fastsocket { requires com.socket; provides com.socket.spi.NetworkSocketProvider

with org.fastsocket.FastNetworkSocketProvider; }

Page 20: Java9 moduulit jigsaw

JIGSAW SUDENKUOPPIA› Kun hyppää mukaan moduulijärjestelmään, on konseptina

sisäinen ja ulkoinen koodi, eli sisäiset luokat ja rajapinnat eivät olekaan käytettävissä – mm. JDK ja JRE sisäänrakennetut toteutukset• JAR paketeissa joka luokka oli käytettävissä, vain näkyvyys

vaihteli• Moduuleissa tulee erikseen julistaa mikä osa on julkista, ja se

mitä ei ole julkaistu, on poissa käytöstä muiden moduulien osalta

Page 21: Java9 moduulit jigsaw

JIGSAW SUDENKUOPPIA› JDK ja JRE viimein yhdistyvät – tarkoittaa isoja muutoksia

hakemistorakenteissa• eli bye-bye kaikille työkaluille jotka käyttivät esim. jre

alihakemistoa

› Tähän liittyen lib/rt.jar ja lib/tools.jar eivät ole enää käytettävissä, menevät eri muodossa alustakohtaisiin paketteihin eri paikkaan

› Ja samoin tähän liittyen endorsed-mekanismi poistuu, eli kaikki mikä käytti endorsed-kansiota menee rikki – tilalle tulee upgradeable modules malli

Page 22: Java9 moduulit jigsaw

JIGSAW SUDENKUOPPIA› UR schema jolla haetaan resursseja muuttuu, tarkoittaen

siis esim. ClassLoader.getSystemResource() komentoja• Ennen: jar:file:<path-to-jar>!<path-to-file-in-jar>• Nyt: jrt:/<module-name>/<path-to-file-in-module>

Page 23: Java9 moduulit jigsaw