Spring Boot 2.0.0RC1 julkaistu

En ole hetkeen kirjoitellut omaa blogiani, olen pahasti laiminlyönyt sitä ja kirjoitellut firmablogin puolelle englanniksi. En paranna pahoja tapojani vieläkään, mutta linkkaan mehukkaan artikkelini Java 9 moduuleista, jlinkistä, Spring Boot 2.0 versiosta, ja Dockerista, ja miten ihania mikropalveluita niillä saakaan aikaan.

http://dev.solita.fi/2018/01/24/Java9-modules-Spring-Boot-2-Docker.html

Ja tähän tarpeeton kuva koiranpennusta

Ja tähän tarpeeton kuva koiranpennusta

Tänään Spring Boot pääsi 2.0 beta ja snapshot statuksesta eroon, ja julkaistiin release candidate 1. Se tarkoittaa, että rajapinnat on jo melkolailla hyydytetty, ja muutokset tapahtuvat syvemmällä ennen julkaisuversiota. Sen saa Mavenista imaistua mm. näin:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RC1</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies><repositories>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/libs-milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

Mitä ihmeellistä siinä sitten on? No paljonkin. Itseä kiehtoo ensinnäkin se, että se toimii Java 9 version kanssa suoraan yhteen. Mikään Spring 1.x versio ei toimi, eikä tule toimimaan. Sen lisäksi siellä on mm. reaktiivista ohjelmointimallia tuotu perinteisen service mallin rinnalle, ja turvapuolen asioita möyhitty parempaan suuntaan. Laajempaa tarinointia mikä on uutta löytyy mm:

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0.0-RC1-Release-Notes

Java 9 taas on ihanuutta mm. Stream api parannusten, jshellin, ja etenkin modulaarisuuden myötä. Tuossa linkkaamassani dev blogi artikkelissa mm. kuvataan, miten parisataamegaisesta JDK:sta saadaan tiristettyä muutaman kymmenen megaa kooltaan oleva virtuaalikone, joka pyörittää kyllä Spring Boot REST palveluita, mutta omaa paljon vähemmän turhaa kirjastoa ja koodia kuin ennen. Eli vähemmän tietoturvahaavoittuvuuksia, vähemmän levyn ja muistinkäyttöä.

Tuohon kun länttäät päälle Dockerin, aletaan olla jännän äärellä. Jos et tee jo serverlessiä, tuo on pino jolla taas pärjää pitkään.

Alunperin Java versio 8 oli menossa jo kohti elinkaarensa loppua tämän vuoden syyskuussa – mikä olisi tarkoittanut, että esim. tietoturvapäivityksiä ei siihen enää tipu. Mutta mene ja tiedä, joku ehkä tajusi miten iso paukku Java 9 siirtymä voi olla. Joten Java 8 EOL deadlinea lykättiin ja pehmennettiin isosti.

https://blogs.oracle.com/java-platform-group/extension-of-oracle-java-se-8-public-updates-and-java-web-start-support

Eli, Java versiolla 8 voi hyvin räpytellä vielä 2019 tammikuuhun asti, ja miksei pidemmällekin jos tykkää elää vaarallisesti. Tai voi maksaa tuesta Oraclelle tai IBM:lle ja räpytellä vuoteen 2025. Mutta toisaalta Java versioon 9 voi siirtyä vaikka nyt, heti, tänään. Itselläni se on jo ensisijainen JDK koneessa, ja ensisijainen valinta uutta tehdessä.

Eli ehkä tuosta taas vähän mietintöjä potkimaan vuosi 2018 käyntiin. Tietysti katsoessa tulevaisuuteen, Java versio 9 on jo aika legacyä – sehän on jo monella käytössä. Kiinnostaako Java version 15 julkaisuaikataulu ja tuki?

Lähde: https://www.infoq.com/news/2018/01/JavaSupportJan18

Tuosta ehti jo jokunen vääräleuka päättelemään, että turha päivitellä ysiin, kun samantien voi hypätä versioon 11, kun Java 8 tuki päättyy? 😉 Siitä lisää ehkä myöhemmin.

 

 

 

Mainokset

Java 9 on ulkona

No niin, tällä kertaa vain nopea heads-up, eli Java 9 putkahti juuri putkesta:

http://www.oracle.com/technetwork/java/javase/downloads/index.html

Olen blogaillut tästä jo useampia kertoja, mutta nyt on aika asentaa se ja ottaa ensisavut, katsoa miten release versio toimii käytännössä.

jrepl ja modulet paukkumaan.

[edit]

Tuikataan nyt heti tähän huomio: Spring 1.x ei futaa JDK 9 kanssa, ei siis käänny, eikä tulekaan kääntymään. Siellä on sorkittu JDK internalseja joita ei enää ysissä saa sorkkia.

Spring 2 tulee tukemaan Java versiota 9 – Milestonesta 4 alkaen pitäisi jo periaatteessa tukea. En ole vielä ehtinyt varmentamaan.

Java 9 on kymmenen kertaa nopeampaa!

Törmäsin mielenkiintoiseen ilmiöön taannoin. Valmistelin esitystä suorituskyvystä ja Java muistimallista, ja ajoin eräänlaista benchmark sovellusta Dockerin avulla eri virtuaalikoneissa. Sovelluksen ideana on sisältää aika typerästi kirjoitettua mutta varsin tavanomaista Java-koodia. Silmukoita, ehtolauseita, merkkijonojen käsittelyä, laskentaa, kokoelmien käsittelyä, ja kellottaa paljonko kaikkeen menee aikaa. Tällä voidaan myös nähdä nykyaikaisen virtuaalikoneen itseään optimoiva vaikutus – kun ajo jatkuu, nopeus yleensä kasvaa. Tässä on sovelluksen mittaustuloksia Oracle Java 6 Docker kontissa ajettuna:

Screenshot 2016-10-16 13.19.54.png

Eli, yhden kierroksen aika on n. 84 sekuntia, laskien 82 sekuntiin jahka virtuaalikone vähän ”lämpenee” eli käytännössä jit-kääntää enemmän koodia ja tekee muita tarvittavia optimointeja.

 

Tässä on OpenJDK+Java 8 ajotulokset:

Screenshot 2016-10-16 13.23.31.png

Kuten tuloksista näkyy, uudempi virtuaalikone optimoi usein tehokkaammin. Tässä kierrosajat pyörivät n. 62 sekunnin pinnassa – Java 6 verraten on irronnut noin 20 sekuntia, tai 1/4 suoritusajasta. Paras kierrosaika oli jopa 52 sekuntia. Aika hyvä tulos!

Kokeillaanpa G1 roskankeruualgoritmilla:

Screenshot 2016-10-16 13.35.12.png

Oops! Vaikka G1 on teoriassa kauneinta ja uusinta mitä roskankeruualgoritmeihin tulee, se ei ole joka ongelmaan optimaalinen ratkaisu. Suoritusajat vaihtelevat 98 ja 104 sekunnin välillä ja ovat nousemaan päin. Tällä sovelluksella ja tämän koneen muistilla tässä tuli takapakkia, huonompi suorituskyky. Varmaan tästä syystä G1 ei ole vielä oletusalgoritmina vaan pitää erikseen kytkeä päälle lisäparametrilla -XX:+UseG1GC.

Java 9 julkaistaan vasta pitkällä ensi vuonna. Siitä on kuitenkin jo prereleaseja liikkeellä, ja jopa Docker virtuaalikuva. Tämän ansiosta on lasten leikkiä ajaa sama koodi Java 9:llä. Tulokset tässä:

Screenshot 2016-10-16 13.36.26.png

WUT? Sama koodi, tekee saman asian, sama koneympäristö ja resurssit. Suoritusajat vaihtelevat 9 ja 12 sekunnin  välillä. Karkeasti ottaen noin kymmenen kertaa nopeampaa kuin useimmat muut testiajot, ja yli viisi kertaa nopeampaa kuin paras tulos tähän asti.

Jotain on muuttunut. Mitä, en tiedä vielä. Epäilen että yksi tekijä voi olla Jigsaw moduulimallit. Toinen tekijä lienee, että on taas opittu tunnistamaan joku negatiivinen koodaustapa, ja optimoimaan sen suoritus. Tulokset tuskin ovat yleispäteviä, ne pätevät lähinnä tähän tyypilliseen koodiesimerkkiin mitä käytin, ja tähän ympäristöön. Docker välissä voi myös vaikuttaa jotain, tuskin kuitenkaan paljoa. Niin tai näin, koodi otti taas kerran hurjan tehokkuushypyn. Tätä herkkua olisi luvassa ensi vuonna.

Virtuaalikoneiden ihanuus on siinä, että nautit kaikista edistysaskelista, ilman koodimuutoksiakin. IBM nimesi juuri oman open source JDK 9 versionsa JIT-kääntäjän Testarossaksi, joten veikkaisin että sieltä on myös suurta hyvyyttä tulossa.

p.s. Docker on ihana keksintö!

p.p.s. Niin on Cathode terminaalikin :p

 

Java 9 viivästyy – saatavana heinäkuussa 2017

Tuoretta uutista, tosin ei yllättävää. Java 9 – jota on jo lykätty useita kertoja, ja jonka ominaisuudet ovat kaikki aiemmista versioista lykättyjä – viivästyy vielä. Tällä kertaa ihan ymmärrettävästä syystä. Se ei vain ole vielä valmis, ei ehdi, ja muutokset ovat merkittäviä.

Mutta käytännössä siis mennään Java 8:lla vielä tovi, ja aikaa on oppia mikä kaikki muuttuu Java 9 myötä. Tämä viimeisin lykkäys ei ole kuin 4kk lykkäys, ja toki nyt jo saatavana olevat EA buildit ovat varsin pitkällä. Mutta kun corea sorkitaan, pienikin muutos on iso muutos ja vaatii aikaa ja rakkautta. 😉

Tieto ei ole toki vielä vahvistettua, mutta lykkäystä on ehdotettu, ja ehdotus menenee läpi koska valmista ei vain tule aiemmalla aikataululla.

Lähde: http://mail.openjdk.java.net/pipermail/jdk9-dev/2016-September/004887.html

JavaOne 2016 häämöttää

Viikko vielä aikaa JavaOne seminaariin – viikon päästä paikallista aikaa sunnuntaina olen paikan päällä San Franciscossa, pää pyörällä jetlagista ja sessioista, absorboimassa kaiken tiedon ja vaikutelmat mitä saatavilla on. Pitäisi olla mielenkiintoinen viikko tulossa.

Yli neljästäsadasta sessiosta on jotakuinkin mahdotonta valita edes suurin osa mikä kiinnostaa. Itse priorisoin Java 9 asioita, Docker ja Microservices asioita, ja sitten hiukan Java EE 8 puolta myös. Voisin löydä vetoa että sitä valaistaan muutenkin keynoteissa. Ohjelman ulkopuolella on myös muutama kiinnostava yhteisötapaaminen ja keskustelu luvassa, ja tietenkin yritän bongata mahdollisimman paljon suomalaisia Javastajia.

 

 

Nyt olisi tarkoitus bloggailla paikan päältä päivittäin jotain pientä, vaikutelmia ja highlighteja. Blogaus tapahtuu tällä kertaa englanniksi, Solitan dev-blogin puolella, eli sitä kannattaa pitää silmällä. Sitä kannattaa muutenkin pitää toki silmällä – raudankovaa settiä tulossa usealta muultakin kirjoittajalta taas lähiaikoina:

http://dev.solita.fi/

 

Java 9 ja CORBA

Heh, niinpä. Olen kirjaillut aiemmin useammankin kerran tulevan Java 9:n ihmetyksen aiheista. Silmiin osui hauska artikkeli siitä miten viimeinkin CORBA, Common Object Request Broker, tuo kaikkien väylien ja hajautuksen edelläkävijä ja kaikkien sitä käyttäneiden inhokki, ei enää tule vakiovarusteena perus-Javassa.

Java 9 suuri uudistushan on modulaarisuus, ja sen tärkeimpänä osana ja ajurina Javan n. 20-megainen runtime modularisoidaan, siten että sieltä löytyy tiukka ydin-kernel, ja lukuisia moduuleita joita voi halunsa mukaan ottaa mukaan tai jättää ottamatta. Pitkän tähtäimen strategia on varmasti paluu mobiili ja IoT ympäristöihin uusin voimin.

Eli, oletuspaketti, root moduulit, ei sisällä enää tarpeetonta kuraa, ja osa tarpeellisistakin lähtee erilleen. Jos kaipaat CORBAA, saat sen takaisin kytkimellä:

-addmods java.corba

Hyvä huomata että vastaavia muita moduuleita ovat mm.:

java.activation
java.annotations.common
java.corba
java.transaction
java.xml.bind
java.xml.ws

Näyttäisi siis siltä että viimein Java menee tosissaan tiukalle dieetille. Java 9:stä kuulemme varmaan lisää tämän vuoden JavaOne seminaarissa San Franciscossa – mutta mielenkiintoa näyttäisi olevan. Varmaa on, että jatkossa on syytä opetella käyttämään moduulijärjestelmää ja sen kytkimiä – muuten ei vanhat Java-koodit enää edes käänny.

Toinen tutkaimiin osunut juttu on moneltakin taholta julistettu Java EE 8 kuolema. Oraclen panostus ja mielenkiinto sen suhteen näyttää olevan lopahtamassa. Mielenkiinnolla seuraan mitä tämä tarkoittaa, ja mitä tuo tullessaan. Tutkaimet herkkinä. Tämäkin selvinnee syksymmällä.

 

http://mail.openjdk.java.net/pipermail/jdk9-dev/2016-May/004309.html

 

Jigsaw myöhästyy vuodella

No niin, Java 9 Jigsaw, jonka piti alunperin olla osa Java 7 releasea, ja tulla käyttöön 2008 – viivästyy jälleen kerran.

http://mail.openjdk.java.net/pipermail/jdk9-dev/2015-December/003149.html

Eli aiempi aikataulu oli: Feature complete näillä main, ja general availability ensi kesänä. Tämä menee nyt uusiksi. Eli uusi aikataulu: Feature complete ensi kesänä, GA julkaisu maaliskuussa 2017. Hui mikä deadline!

Tästä alkaa jo tulemaan vitsi, kun julkaisua on toistuvasti lykätty, ja pian tulee 10-vuotinen historia yhdelle featurelle täyteen. No, toisaalta se on aika iso, monimutkainen, ja ehdottomasti legacy koodia hajottava päivitys, joten parempi että tehdään mahdollisimman huolellisesti, sanon minä. Joka tapauksessa, tämä tarkoittaa että koko ensi vuosi saadaan rauhassa vielä nautiskella Java 8 versiosta, ja konservatiivisempien talojen osalta ehkä useampikin vuosi (joku ajaa vielä kuulemma Java 1.1 tuotantosovelluksia… Brr…)

Jigsaw tosiaan muuttaa hyvinkin paljon. Kirjoitin tästä firmablogiin artikkelia:

http://dev.solita.fi/2015/10/15/goodbye-glasspath-java-9.html

Osa näistä tiedoista on sittemmin muuttunut, ja lisää on jo tullut. Kirjoittelen myöhemmin kakkososan joka on enemmän ajan tasalla ja konkretisoitua tietoa. Se tieto näyttää tässä kohtaa jo kiinnostavan moniakin joilla on katse tulevaisuutta kohden. Hyvä varautua ajoissa ja pitää silmät auki, mutta nyt näyttää aikaa olevan vielä reippaasti perehtyä.

Jigsaw ei tosiaan ole kehittäjän kannalta huippuhyödyllinen muutos välittömästi, mutta se on strateginen ja pysyvä muutos, joka onnistuessaan saa Javan pysymään työkalupakeissa jatkossakin. Tai ainakin antaa siihen vahvat mahdollisuudet.