JDK 11

Das JDK 11 war bislang nur als Oracle JDK aus dem AUR-Repository verfügbar. Seit dem 28.10.2018 ist in den normalen Repositories von Manjaro vorhanden, das heißt mit

yaourt --noconfirm -S jre-openjdk-headless jre-openjdk jdk-openjdk openjdk-doc openjdk-src

wird das aktuelle Java 11 als LTS Version installiert.

Weitere Versionen sind mit den jeweiligen Kennzahlen in dem Paketnamen markiert (siehe Arch Wiki).

Welche Java Versionen sind installiert?

Unter Arch basierten Linuxen wird das Handling von Java über ein kleines Helferprogramm gesteuert. Das Programm archlinux-java steuert die installierten JVM auf der Maschine.

archlinux-java status

Listet die installierten Java Versionen auf und zeigt welche Version gerade aktiviert ist.

Wechsel der JVM

Mit archlinux-java set kann die default JVM gewechselt werden.

archlinux-java set java-11-openjdk # wechsel auf JDK 11

Unterschiede Java OpenJDK und Oracle JDK 11

Seit Java 11 gibt keinen funktionalen Unterschied zwischen dem OpenJDK und der Oracle JDK Version mehr. Es muss nur für den Support eine kostenpflichtige Version von Oracle bezogen werden.

Eclipse Plugins

Hier sind meine Favorieten unter den Eclipse Plugins. Ich stelle die Ansammlung hier zur Verfügung, weil mir das Anmelden unter http://accounts.eclipse.org für den Marketplace zu aufwendig ist. Es muss ein Passwort mit mindestens 12 Zeichen vergeben werden und dieses ist auch nicht über einen PasswortManager bei einer Neuinstallation innerhalb von Eclispe verfügbar.

Coole Plugins

Infinitest

Continous testing wird mit diesem Plugin realität. Werden Änderungen an Tests betreffenden Dateien durchgeführt, dann wird automatisch ein JUnit lauf ausgeführt. Sehr praktisch.

MouseFeed

MouseFeed zeigt vorhandene Shortcuts zu einer Aktion an, so kann man diese schneller erlernen, weil diese jedesmal kurz eingeblendet wird.

DBeaver

Die Community Edition des DBeaver ist kostenlos und eines der besten Tools im Umgang mit Datenbanken. DBeaver gibt es als Plugin für Eclipse und als Standalone Version, da es auf Eclipse basiert.

SpotBugs

SpotBugs ist der designierte Nachfolger von dem populären FindBugs Plugin für Eclipse.

Thymeleaf

Das Thymeleaf Plugin stellt in HTML Dokumenten, die den Namespace von Thymeleaf besitzen, eine Autovervollständigung (CTRL + SPACE) der Attribute von Thymeleaf.

Spring Javaformat

https://github.com/spring-io/spring-javaformat

Das Plugin für Eclipse ist nicht im Marketplace gelistet und läßt sich daher nur über die Update Site https://dl.bintray.com/spring/javaformat-eclipse/ installieren.

SpringPlatform

Die SpringPlatform hat am 24.09 bis zum 27.09.2018 in Washington stattgefunden. Pivotal hat in ihrem Youtube-Kanal jetzt alle Videos bereitgestellt.

Sehenswertes

Vorträge die mir sehr gut gefallen haben:

  • Josh Longs Vortrag stellt die unmittelbaren Vorteile der Verwendung von Cloud Contracts anhand eines Rest Services und Client dar. Zunächst werden die Client / Service Teile mit herkömmlichen Unittest gebaut und dann zeigt erspannend, dass ,obwohl beide Unittests grün waren, die Anwendung im Ganzen nicht funktioniert und zeigt nun auf wie leicht dieses Problem mit Cloud Contracts gelöst werden kann.

  • Neues aus Project Reactor Codename Californium. Der Releasetrain beinhaltet Reactor Core 3.2, Reactor Addons 3.2, Reactor Netty 0.8. Springframework 5.1 (und auch das bald erscheinende SpringBoot 2.1) beinhalten Californium. Flux und Mono können getagt werden und stehen als Micrometer Metrics zur Verfügung. Neue Operationen stehen zur Verfügung. doOnDiscard fängt alle Elemente die in dem Flow verworfen werden auf. onErrorContinue kann Exception abfangen und der Flow wird nicht durch fatale Fehler zerstört. Mit retryBackoff wird ein mächtiges Retry zur Verfügung gestellt.

  • JUnit 5 kurz und knapp. Sehr kompakte Übersicht. Features in der nächsten Version 5.4. JUnit 5 und Spring. Ab SpringBoot 2.1 kann @ExtendsWith(SpringExtension.class) entfallen. Es muss die Testmethode nur mit @SpringBootTest annotiert werden.

  • Das AxonFramework wird demnächst einen OSS Server enthalten. Der AxonServer weiß welche Applicationen laufen und wo welche CommandHandler vorhanden sind, da die Microservices das dem Server propagieren. Das heißt Autodiscovery für die CQRS Dienste kann mit dem Server realisiert werden. Die Microservices müssen nur das AxonFramework integrieren. Somit lassen sich die Anwendungen einfach skalieren.

  • Reactive Relation Databases Connectivity. Das Project R2DBC verspricht reaktiven Zugang zu Datenbanken. Aktuell gibt es einen H2 und einen Postgresql Client. Es sollten bald weitere Clients wie zum Beispiel für MySQL folgen. Es wird eine Demoanwendung auf Basis auf dem letzten SpringBoot erstellt. Lukas Eder ist auch bereits in R2DBC involviert und plant Jooq um R2DBC zu erweitern, so dass nicht nur JDBC als alleinige Schnittstelle benutzt werden kann. Die Unterstützung ist für Version 3.12 geplant.

  • Spring Data JDBC ist ein neues sehr einfaches und begrenztes ORM. Es steht mit SpringBoot 2.1.0.M4 zu Verfügung. Es werden die Unzulänglichkeiten von Hibernate angesprochen. Als neues Feature kommen Derived Queries in der nächsten Version, sowie Unterstüzung für Sorting und Paging. Auch hier wird auf den Reactive Zug aufgesprungen und R2DBC angesprochen. Projekthomepage befindet sich auf https://spring.io/projects/spring-data-jdbc.

  • Simon Ritter gibt einen kurzen Überblick über JDK 9,10,11 und zukünfitge Versionen und deren mögliche Features. Die Modularität die mit JDK 9 eingeführt wurde über das neue Release Model und das ab JDK 11 OpenJDK und OracleJDK den gleichen Funktions-/Features Umfang besitzen. Flight recorder und Mission Control sind ab JDK 11 Open Source. Browser Plugin, Java Web Start und JavaFX werden entfernt. Open JavaFX wird unabhängig weiterentwickelt. Java 10 Local Variable Type Inference JEP 286. Mit JVM 10 Java liest nicht mehr die CPU und vorhandenen Speicher des Hostsystems aus und respektiert die Resourcen vorgaben vom Docker Container. Mit JEP 323 wurde Lacal Variable Syntax erweitert, so dass var auch verwendet werden kann. Es gibt hierfür nur einen sinnvollen Einsatz. Nämlich in Verwendung mit Annotationen im Lambda-Ausdrücken.

  • In diesem Vortrag werden 2 unsichere Anwendungen, eine WebApplication und ein RestClient, mit einem OAuth 2.0 Resource Server mit Spring Security 5.1 gesichert. Joe Grandja und Josh Cummings stellen anhand einer Demo die neuen Fähigkeiten des Resource Servers und Neuerungen im WebClient vor. Quelltexte https://github.com/jzheaux/messaging-app/tree/springone2018-demo, https://github.com/spring-projects/spring-security/tree/master/samples/boot/oauth2webclient und https://github.com/spring-projects/spring-security/tree/master/samples/boot/oauth2resourceserver.

Endlich ist die Version 4 der Spring Tool Suite da. Die Spring Tool Suite basiert immer noch auf Eclipse, aber da die Unterstützung auf dem Language Server Protokoll beruht lassen sich auch andere Editoren oder IDEs damit nutzen.

Änderungen seit Spring Tool Suite M15

  • Spring Tool Suite kann jetzt unter JDK 11 laufen
  • Application Properties können nach YAML konvertiert werden
  • Vereinheitlichung der Preference Pages

Alle Änderungen lassen sich im Changelog nachlesen.

Download

Die Tool Suite kann unter https://spring.io/tools runtergeladen werden.

Features Installment

In seinem letzten Installment stellt Josh Long STS 4 anhand eines MongoDB driven RestController vor. Auf die Features von Spring Tool Suite geht er ab hier in dem Video ein.

Heute wurde Spring Framework 5.1 GA freigegeben. Zu den Neuerungen gehören warning freies nutzen des JDK 11 mit LTS, initialer Support für GraalVM, Hibernate 5.3. Mit der Freigabe von Spring Boot 2.1 M4 nächste Woche können die neuen Features über den start.spring.io getestet werden.

Weitere Highlights Spring Framework 5.1 GA

  • Warnungsfreie Nutzung unter JDK 11 im Class- und Modulepath
  • Upgrade Reactor Core 3.2 und Reactor Netty 0.8

Mit dem Upgrade erhält HTTP2 Support in Netty einzug in das Release. Kurzbeschreibung Californium.

  • Upgrade auf ASM 7.0 Beta und CGLIB 3.2.8. Diese sind nicht als Abhängigkeiten, sondern sind inline im Spring-Core Repository eingebunden.

  • PathResource wird durch NIO.Path ersetzt

  • Performanceverbesserungen in den Core Typen und der Annotationsauflösung

  • Verbesserte Logausgaben. Weniger Ausgaben im INFO-Level, verbesserte Lesbarkeit im DEBUG-Level und Details sind jetzt im TRACE-Level

  • Unterstützung von und und oder Bedingungen bei Profilzuweisungen
  • Sauberes und konsistente Erkennung von verschachtelten Konfigurationsklassen

Hier zeige ich kurz die wichtigsten Änderungen in SpringBoot 2.1 auf. Aktuell ist der 3. Milestone erreicht.

SpringBoot 2.1 M1

Features

  • Reaktive Health Indikator für Cassandra
  • JUnit 5 @ExtendWith(SpringExtension.class) kann entfallen

Die Annotation @ExtendWith(SpringExtension.class) wird in den @…Test Annotationen annotiert, so dass diese nicht expliziet angegeben werden muss.

@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class SampleJunitJupiterApplicationTests {

Wird zu…

@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class SampleJunitJupiterApplicationTests {
  • Logback unterstützt nun ProfileExpression
  • JPA 2.2 wird erreicht (Streaming von ResultSets ist nun möglich)
  • Hibernate Metrics werden in Actuator zur Verfügung gestellt

Konfiguration:

spring.jpa.properties.hibernate.generate_statistics=true
  • Support für Undertow 2.0 und Tomcat 9

  • Wenn DevTools im Klassenpfad, dann wird bei Fehlern ein Stacktrace per Default ausgegeben.

Konfiguration:

server.error.include-stacktrace=ALWAYS

Mit dem Update auf Hibernate 5.3.0 Final und Java Persistant Api 2.2 sind das Streamen von ResultsSets möglich.

SpringBoot 2.1 M2

Features

  • Es wird verhindert das der MySQL Connector eine alte Version von Protobuf-java als Abhängigkeit einbringt
  • Support Java 11

Mit dem Update auf Assertj 3.11 wird Java 11 unterstützt.

  • Spring Data JPA Bootstrap Mode kann konfiguriert werden

Es gibt neben DEFAULT zwei neue Initialisierungsarten LAZY und DEFERRED. Mit Lazy und Deferred lassen sich die Startupzeiten der Application zum Teil drastisch reduzieren. Siehe Deferred Example.

Der Unterschied zwischen Lazy und Deferred ist, dass bei Deferred die Validierung vor der ersten Nutzung der Anwendung durchgeführt wird. D.h. nach dem ApplicationContext zur Verfügung steht. Bei Lazy geschied dies erst dann, wenn auf ein Repository das erste Mal zugegriffen wird.

Gerade im Bezug auf kurze TurnAround-Zeiten bei der Entwicklung ist dieses von Vorteil. Ist DEFERRED default, wenn DevTools eingebunden werden?

  • Es gibt einen neuen Starter für OpenID Connect/OAuth2 spring-boot-starter-oauth2-oidc-client

  • Feintuning und Review im Logging

  • FormContentFilter ersetzt HttpPutFormContentFilter

Dependencies

Unter anderem wurde folgende Anhägigkeiten erneuert:

  • Lombok 1.18.2
  • Influxdb Java 2.12
  • Mysql 8.0.12
  • Hazelcast 3.10.4

SpringBoot 2.1 M3

Features

  • Minimale Version von Gradle wurde auf Version 4.4 angehoben
  • Verzögerte Ausgabe der DevTools Loggingeinträge

Mit defer devtools logging kann die Ausgabe der Loggingeinträge bis nach der Ausgabe des SpringBoot Logos verzögert werden.

  • Unterstützung von Logging Gruppen

Logger können jetzt zu Gruppen zusammengefasst werden. Somit kann einer Gruppe ein Level zugewiesen werden.

# define group
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
# set level
logging.level.tomcat=TRACE
  • Es kann der BackgroundPreinitializer abgeschaltet werden

In bestimmten Umgebungen wo nur eine CPU zur Verfügung steht, macht es keinen Sinn die Initialisierung in den Hintergrund in einem extra Thread zu verlagern. Dieses kostet nur extra CPU Zeit wg. Kontextwechsel.

Beispiel: spring.backgroundpreinitializer.ignore=true # Whether background preinitializer should be ignored.

  • JAXB wurde als Abhängigkeit hinzugefügt

Mit Java 10 wurde JAXB als deprecated markiert und mit Java 11 ganz entfernt. Da Java 11 eine LTS Version ist, wurde kurzum JAXB als Abhängigkeit hinzugefügt. Das vermindert auch wieder die Abhängigkeiten in Maven oder Gradle Buildskripten.

  • Fehler in der JSON Konfiguration werden jetzt mit einer Exception quittiert

Da nur das Ausgeben von warnings in den Logger zu unvorhersehbaren Verhalten führt, wurde jetzt das Verhalten geändert und eine JsonParseException geworfen.

  • Der Parameter max HTTP header size ist jetzt für alle unterstützten Container gleich

  • Es wird eine Warnung geloggt, wenn die Application als Root läuft

Mit runUser kann dem Startskript mitgeteilt werden unter welchem Benutzer das Programm gestartet werden soll. Ist das Argument runUser nicht angegeben, so wird das Programm unter der ID des Benutzers dem das Skript gehört ausgeführt. Gehört das Skript z.B. Root (UID = 0), dann wird dieses jetzt mitgeloggt.

  • Der Object Mapper Jackson wird jetzt als Singleton instanziert

Durch die diese Optimierung werden neue Instanzen des JacksonJsonParser schneller erstellt.

Dependencies

Unter anderem wurde folgende Anhägigkeiten erneuert:

Hier die Highlights der neuen Milestones M15 der Spring Tool Suite 4. Die meisten Verbesserungen gab es im Bereich der Live Hovers. Hier wurde die Performance und der Informationsgehalt gesteigert.

Changelog

Spring Boot

  • Der Informationsgehalt in den Live Hovers wurden verbessert
  • Informationen zu den autowired Feldern und Konstruktoren und den @Bean Definitionen wurden verbessert und stellen mehr Informationen zur Verfügung
  • Performanceverbesserungen von Live Hovers bei entfernten Boot Apps
  • Experimentelle Code Lenses (Code Minining) Informationen. Muss in den Preferences freigeschaltet werden
  • Verbesserte Performance und geringerer Speicherverbrauch des Live Hovers Updatemechanismus
  • Fehlender Zeilenumbruch in Live Hovers für Request Mappings gefixt
  • Resource Links in Live Hovers für entfernte Anwendungen funktionieren jetzt

Eclipse

  • Neue Versionen von Spring Boot CLI und Spring Cloud CLI (werden für Dashboard verwendet)

Highlights Gradle 4.10

Die Highlights der neuen Gradle Version 4.10 sind:

  • Der incremental compiler ist jetzt per Default an. Das heißt es führt zu wesentlich schnelleren Kompilierzeiten.
  • Der Cache von Gradle unter .gradle und im Project Root Verzeichnis wird jetzt regelmäßig bereinigt.
  • Im Block plugins{} können jetz auch SNAPSHOT Versionen angegeben werden.

Hier ein Beispiel anhand von SpringBoot

plugins {
    id 'org.springframework.boot' version '2.0.0.BUILD-SNAPSHOT'
}

Update Gradle Wrapper

Der Wrapper kann sich wie immer über den wrapper Task updaten.

./gradlew wrapper --gradle-version=4.10