JBoss EAP 7.2 mit Java EE 8-Untertützung freigegeben

Details bei Red Hat unter https://www.redhat.com/en/blog/announcing-general-availability-red-hat-jboss-enterprise-application-platform-72

Stichwörter:

  • greater compliance with Java Enterprise Edition (EE) 8
  • JBoss EAP 7.2 is Java EE 8 certified
  • Java EE 8 certification introduces new capabilities designed to improve portability and security of applications and the manipulation of JSON documents
  • enhancements related to the support of HTTP/2
  • JBoss EAP 7.2 also supports OpenJDK 11, Oracle JDK 11, Java SE 11
  • Red Hat offers supportfor OpenJDK 8 until 2023 and OpenJDK 11 until 2024.
  • Eclipse MicroProfile Config, a microservices library to manage application configurable parameters across environments
  • Eclipse MicroProfile REST Client, a microservices library designed to more easily invoke microservices in a type-safe manner
  • Eclipse MicroProfile OpenTracing, a microservices library to trace microservices-based applications
  • Eclipse MicroProfile Health, a microservices library to check the state of microservices-based applications
  • tighter integration with Red Hat OpenShift for clustered applications

 

Immutable-Objekte und Wither-Methoden

Objekte, dessen Zustände nicht verändert werden können, heißen immutable. Die Klassen deklarieren in so einem Fall keine öffentlichen Variablen und auch keine Methoden mit Seiteneffekten, die diese Zustände modifizieren könnten. Setter gibt es folglich nicht, nur vielleicht Getter.

Damit die Objekte ihre Werte bekommen, gibt es unterschiedliche Wege – parametrisierte Konstruktoren sind ein guter Weg. Die Belegungen lassen sich beim Konstruktoraufruf übergeben und so sehr gut direkt in finale Variablen schreiben. In der Java-Bibliothek gibt es eine Reihe solcher Klassen, die keinen parameterlosen Konstruktor besitzen, und nur einige parametrisierte, die Werte erwarten. Die im Konstruktor übergebenen Werte initialisieren das Objekt, und es behält diese Werte sein ganzes Leben lang. Zu den Klassen gehören zum Beispiel Integer, Double, Color, File oder Font.

Immutable-Objekte, die auch die equals(…)-Methode implementieren heißen Werteobjekt (engl. value object).

Wither-Methoden

Auch wenn sich Objekte mit Setten nicht ändern lassen, so soll es doch möglich sein, neue Objekte mit veränderten Zuständen zu erschaffen. Ein Blick auf die Klasse String zeigt zum Beispiel trim() und toUpperCase() – das Ergebnis sind neue Strings.

Um allgemein Zustandsvariablen zu verändern können Wither-Methoden verwendet werden; sie sind ähnlich wie Setter, nur verändern sie keinen Zustand am aktuellen Objekt, sondern führen zu einem neuen Objekt mit dem geänderten Zustand.

Getter Setter Wither
Typ getXXX() void setXXX(Typ xxx) ImmutableTyp withXXX(Typ xxx)

Namenskonvention der Getter, Setter, Wither für eine Property xxx

Dazu ein Beispiel. Ein Raum hat einen Namen und eine Größe. Die Exemplare sollen unveränderbar sein:

class Room {

  private final String name;

  private final int size;




  public Room( String name, int size ) {

    this.name = name;

    this.size = size;

  }




  public String getName() {

    return name;

  }




  public int getSize() {

    return size;

  }




  public Room withName( String name ) {

    return new Room( name, size );

  }




  public Room withSize( int size ) {

    return new Room( name, size );

  }

}

Eclipse GlassFish 5.1.0 ist fertig, die erste Jakarta EE Implementierung

Download unter https://projects.eclipse.org/projects/ee4j.glassfish/downloads

Eclipse GlassFish is a complete application server that implements the Jakarta EE specification. GlassFish includes implementations of all required and optional Jakarta EE APIs, and passes all Jakarta EE TCKs. GlassFish also includes a complete administration console, clustering support, and other developer and production focused tools and features.

NetBeans 10 Java-Projekt anlegen

NetBeans (http://netbeans.org) bietet komfortable Möglichkeiten zur Java SE- und Java Enterprise-Entwicklung mit Editoren und Wizards für die Erstellung grafischer Oberflächen und Webanwendungen. Die Hauptentwicklung leistete damals Sun Microsystems, doch als Oracle Sun übernahm, hatten Entwicklungsumgebungen keine große Priorität im Datenbankhaus. Es gab zwar Weiterentwicklungen, doch schleppte sich Oracle eher von Version zu Version. Oracle hat letztendlich die Codebasis an die Apache Foundation übergeben und sich damit von der IDE getrennt. Das neue Zuhause ist https://netbeans.apache.org/.

NetBeans installieren

Die aktuelle Version Apache NetBeans 10.0 unterstützt Java 11. Nach dem Download vom https://netbeans.apache.org/download/ bekommen wir eine ZIP-Datei, die wir auspacken. Im bin-Verzeichnis gibt es netbeans64.exe für Windows und eine Shell-Datei für Unix-System. Vor dem Start müssen wir jedoch eine Variable anpassen, die auf das JDK zeigt, andernfalls gibt es den Fehler „cannot find java 1.8 or higher“.

Im etc-Verzeichnis von NetBeans liegt die Datei netbeans.conf, die wir editieren müssen, denn nach der Installation steht auskommentiert:

etc/netbeans.conf, Aussschnitt

#netbeans_jdkhome=“/path/to/jdk“

Das ändern wir und setzen den Pfad (je nach Ort natürlich anders):

netbeans_jdkhome=“C:\Programme\Java\jdk-11″

NetBeans lässt sich starten.

Das erste Projekt

Es öffnet File > New Project…. einen neuen Dialog. Hier lassen sich komplette Java-Projekte mit Beispielcode anlegen. Wählen wir links Java und rechts Java Application und gehen auf Next >.

Es folgt ein neuer Dialog, in dem wir Java SE aktivieren müssen. Machen wir das! Nach ein paar Sekunden kommt ein neuer Dialog, der vorausgefüllt ist. Wir können den Projektnamen, den Speicherort und den Klassennamen und das Paket ändern.  Finish generiert das Projekt.

Danach öffnet sich der Editor. Setzen wir den Cursor in die main-Methode. Schreiben wir sout mit einem Tabulator gefolgt, expandiert dies zu System.out.println(„“);.

Das Programm kann gestartet werden a) über die Symbolleiste und dem grünen Play-Button, b) im Menü unter Run, dann Run Project, oder c) über die Taste F6.

Die Startzeiten für Projekte sind etwas schlechter als bei Eclipse, denn NetBeans lässt bei jedem Start ein Ant-Skript laufen, das sich Zeit nimmt.

Spring Tools 4.1.1 freigegeben

Details siehe https://spring.io/blog/2019/01/25/spring-tools-4-1-1-released

Zitat:

Highlights from this release include:

  • (Spring Boot) easy navigation via symbols now available for regular Spring projects (not using Spring Boot)
  • (Spring Boot) live hover for beans and bean wirings now available for regular Spring projects (not using Spring Boot)
  • (Spring Boot) support for deprecated propertied added to property editors, including corresponding quick fixes
  • (Eclipse) boot dashboard now shows environment information including all properties and their values for running boot apps
  • (Eclipse) default distribution brings back support for local Tomcat servers and deploying war-packaged boot apps to those local servers
  • various bug fixes

Eclipse 2018-12 (Eclipse 4.10) freigegeben

Zusammenfassung aller Neuerungen unter https://www.eclipse.org/eclipseide/2018-12/noteworthy/

Java 11-Unterstützung ist standardmäßig integriert, kein Plugin ist mehr nötig. https://www.eclipse.org/eclipse/news/4.10/jdt.php

Von Visual Studio wurde ein Features auf Eclipse übernommen:

Code Minings support in Java editor Java editor can now show the number of implementations and references for a Java element as decorative text (Code Minings) above the element.

  • This feature can be enabled in Preferences > Java > Editor > Code Minings:

 

 

WildFly 15 ist final

Siehe http://wildfly.org/news/2018/12/13/WildFly15-Final-Released/. Läuft ordentlich auf Java 11. Zur Wiederholung der Versionen:

JBoss 3.2.x. implementiert Java EE-Spezifikation 1.3(.1) (EJB 2.0)

JBoss 4.x: Java EE 1.4 (EJB 2.1, Servlet 2.4, JSF 2.1, …) und am Ende der Serie schon Teile von Java EE 5.

JBoss 5.x: Java EE 5 (EJB 3, JPA 1.0, Servlet 2.5, JSP 1.2)

JBoss 6.x: Java EE 6 (EJB 3.1, CDI 1.0, JPA 2.0, Servlet 3.0, JSF 2.0, JAX-WS 2.2, JAX-RS 1.1, Bean Validation 1.0)

JBoss 7.x: ebenfalls Java EE 6. Implementierung hat modularen Kernel, neue Verzeichnisstruktur.

Wildfly 8.x  Java EE 7 zertifiziert für Voll- und Web-Profil. Vierteljährliche Updates.

Wildfly 14.x. Java EE 8 zertifiziert

Wildfly 15. Aktuellste Version, läuft gut auf Java 11

Hystrix wird nicht weiterentwickelt bleibt in „maintenance mode“

So schreibt es https://github.com/Netflix/Hystrix:

Hystrix is no longer in active development, and is currently in maintenance mode.

Hystrix (at version 1.5.18) is stable enough to meet the needs of Netflix for our existing applications. Meanwhile, our focus has shifted towards more adaptive implementations that react to an application’s real time performance rather than pre-configured settings (for example, through adaptive concurrency limits). For the cases where something like Hystrix makes sense, we intend to continue using Hystrix for existing applications, and to leverage open and active projects like resilience4j for new internal projects. We are beginning to recommend others do the same.

Netflix Hystrix is now officially in maintenance mode, with the following expectations to the greater community: Netflix will no longer actively review issues, merge pull-requests, and release new versions of Hystrix. We have made a final release of Hystrix (1.5.18) per issue 1891 so that the latest version in Maven Central is aligned with the last known stable version used internally at Netflix (1.5.11). If members of the community are interested in taking ownership of Hystrix and moving it back into active mode, please reach out to hystrixoss@googlegroups.com.

Java/Boot/JavaScript-Seminare für Q1/2019

tutego Schulungsraum


Java Grundlagen (›JAVA1‹)

7.–11. Januar 2019 (KW 2), 21.–25. Januar 2019 (KW 4), 28. Januar–1. Februar 2019 (KW 5), 18.–22. Februar 2019 (KW 8), 11.–15. März 2019 (KW 11), 25.–29. März 2019 (KW 13), 8.–12. April 2019 (KW 15)


Java für Fortgeschrittene (›JAVA2‹)

26.–30. November 2018 (KW 48), 7.–11. Januar 2019 (KW 2), 21.–25. Januar 2019 (KW 4), 28. Januar–1. Februar 2019 (KW 5), 18.–22. Februar 2019 (KW 8), 11.–15. März 2019 (KW 11), 25.–29. März 2019 (KW 13), 8.–12. April 2019 (KW 15)


Spring Boot (›SPRINGBOOT‹)

3.–5. Dezember 2018 (KW 49), 7.–9. Januar 2019 (KW 2), 21.–23. Januar 2019 (KW 4), 28.–30. Januar 2019 (KW 5), 18.–20. Februar 2019 (KW 8), 11.–13. März 2019 (KW 11), 25.–27. März 2019 (KW 13), 8.–10. April 2019 (KW 15), 24.–26. April 2019 (KW 17)


JavaScript für Web-Entwickler (›JAVASCRIPT‹)

3.–5. Dezember 2018 (KW 49), 7.–11. Januar 2019 (KW 2), 21.–25. Januar 2019 (KW 4), 28. Januar–1. Februar 2019 (KW 5), 18.–22. Februar 2019 (KW 8), 11.–15. März 2019 (KW 11), 25.–29. März 2019 (KW 13), 8.–12. April 2019 (KW 15)

 

Diamant vs. var

Diamant und var haben vergleichbare Aufgaben, unterscheiden sich aber durch die Quelle der Informationen. Beim Diamanten ist es zum Beispiel bei einer Zuweisung die linke Seite, die dem Compiler die Information gibt, was auf der rechten Seite der Zuweisung für ein Typ gemeint ist. Bei var wiederum ist das anderes herum: die rechte Seite hat den Kontext und daher kann links der Variablentyp entfallen:

List<String> list1 = new ArrayList<>();  // List<String>

var list2 = new ArrayList<String>();     // ArrayList<String>

var list3 = new ArrayList<>();           // ArrayList<Object>

Im letzten Fall gibt es keinen Compilerfehler, nur ist eben nichts bekannt über das Typargument, und daher gilt Object.

Um Code abzukürzen haben wir damit zwei Möglichkeiten: var oder Diamond.