Usability-Verbesserunge: Code Mining (Code CodeLens) mit Eclipse Photon

Wer Zusatzinformationen im Quelltext sehen will, kann das mit dem Code Minig (CodeLens) machen. Folgende Infos werden geboten:

Allgemein
Zeige references
Zeige implementations
Zeige method parameter Namen
Zeige method parameter types
Zeige end statement
JUnit
Zeige JUnit status
Zeige JUnit run
Zeige JUnit debug
Debugging
Zeige variable values inline im debugging
EGit
Zeige revision recent change
Zeige avatar
Zeige date ago
Zeige authors

Man kann sich also z.B. die Git-Information anzeigen lassen, wer wann eine Methode editiert hat. Für JUnit-Tests wird angezeigt, ob sie erfolgreich ausgeführt wurden. Zusätzlich lassen die JUnit-Methoden sich direkt starten bzw. debuggen

Das Code Mining mit Eclipse Photon muss noch über die Update-Site (Update Site http://oss.opensagres.fr/jdt-codemining/snapshot/) installiert werden:

Dann noch in den Einstellungen aktivieren:

Das sieht dann
„Usability-Verbesserunge: Code Mining (Code CodeLens) mit Eclipse Photon“ weiterlesen

Wie kann eine Vaadin Spring Boot App als Linux Service erstellt werden?

Um eine Vaadin Anwendung mit Spring Boot und Hibernate als Linux Service einzurichten, muss zuerst ein ausführbares Jar erstellt werden.

Dafür muss in der pom.xml die Konfiguration im spring-boot-maven-plugin auf executable = true gestellt werden:

Wenn das JAR (z.B. TWSuch-0.0.1-SNAPSHOT.jar) dann mit mvn package erstellt wird, ist es ein selbstausführendes JAR. „Wie kann eine Vaadin Spring Boot App als Linux Service erstellt werden?“ weiterlesen

Läuft eine Vaadin 8 Anwendung auch auf einem Raspberry PI Zero W?

Warum eigentlich nicht. Ist doch Java. Also mal ein Quicktest.

Java 1.8 und eine MySql DB (genauer Server version: 10.1.23-MariaDB-9+deb9u1 Raspbian 9.0, MariaDB ist schneller als MySQL) sind auf dem Pi schon installiert.

Das ist auch Voraussetzung.

Dann das mit

erzeugte Vaadin 8 Jar mit Tomcat Server auf den Pi per Drag and Drop kopiert (43 MB) und auf der Kommandozeile ein

Nach ein paar Sekunden

es startet schon mal. „Läuft eine Vaadin 8 Anwendung auch auf einem Raspberry PI Zero W?“ weiterlesen

One to One mit Java Persistence API (JPA 2.0) und Spring Boot ohne XML

Manchmal braucht man eine „One to One“ Verbindung zweier BEs mit JPA (Java Persistence API) für Spring Boot (2.0.2) (JEE mit EJB 3.0 ist ähnlich, nur andere Annotationen).

Z.b. arbeiten ein Arzt in der Regel in einem Krankenhaus. Wenn sie nicht gerade als Belegärzte tätig sind. Also „One to One„:

Hier nun eine Kopiervorlage um diese wiederkehrende Verbindung anzulegen: „One to One mit Java Persistence API (JPA 2.0) und Spring Boot ohne XML“ weiterlesen

Wie kann eine Excel CSV Datei mit Java mit Apache commons eingelesen werden?

Will man Excel CSV Dateien einlesen geht das mit einem Einzeiler in Java:

Hier die Testmethode die auch etwas Kontext auf der Konsole ausgibt dazu. Man sieht auch, das man auf die Inhalte über einen Index oder den Spaltennamen zugreifen kann. Dann muss auch jedesmal das gleiche Ergebnis geliefert werden, das wird auch in der assert abgetestet.

„Wie kann eine Excel CSV Datei mit Java mit Apache commons eingelesen werden?“ weiterlesen

Wie kann Gradle auf einem Raspberry Pi installiert und ein Beispielprojekt in 10 min mit Javadoc, Test und Reports angelegt und gebaut werden?

Manchmal braucht man Gradle. Wie kann das auf einem Raspberry Pi installiert werden. Das geht in 10 Minuten mit:

Ergebnis:

Ok, das ist nicht die aktuellste 4.6 Version aber man kann schon mal loslegen.

Dann wollen wir auch gleich mal ein Testprojekt anlegen. „Wie kann Gradle auf einem Raspberry Pi installiert und ein Beispielprojekt in 10 min mit Javadoc, Test und Reports angelegt und gebaut werden?“ weiterlesen

JUnit 5: Class Assumptions vs. Assertions – org.junit.jupiter.api – Behauptungen – Annahme – założenia – допущения -假設 – الافتراضات

In JUnit 5 gibt es im Package org.junit.jupiter.api die Klasse Assumptions (Annahme).

Die Assumptions Klasse ist eine Sammlung von Util-Methoden. Im Gegensatz zu den Assertions (Behauptungen) wird die Assumptions im Fehlerfall nicht mit einem failure (graues Kreuz) sondern mit einem Error (rot) markiert.

Deshalb ist es manchmal gewünscht, wenn z.B. eine Bestimmte Umgebung nicht vorhanden ist, das dann der Test nicht als Error (rot) sondern mit einen grauen Kreuz (Failures) markiert wird. Dann sollte man also die org.junit.jupiter.api.Assertions verwenden wie diese Testklasse zeigt:

Hier der Quellcode „JUnit 5: Class Assumptions vs. Assertions – org.junit.jupiter.api – Behauptungen – Annahme – założenia – допущения -假設 – الافتراضات“ weiterlesen

Wie kann ein XSD-Schema aus Java POJOs mit „Java Architecture for XML Binding“ generiert werden?

Wie kann man aus einem Pojo ein XSD Schema für zukünftige Validierungen generieren?

Das geht ganz einfach mit JAXB und Eclipse Oxygen.1A.

Wir erstellen dazu erst einmal zwei Klassen, Mindmap und Autor mit ein paar Eigenschaften. Optional annotieren wir die Mindmap Klasse mit @XmlRootElement und die Autor Klasse mit @XmlType. „Wie kann ein XSD-Schema aus Java POJOs mit „Java Architecture for XML Binding“ generiert werden?“ weiterlesen

Wie können Json Dateien in Java Objekte eingelesen werden mit google gson?

Wie kann eine Json Datei in ein Java Objekt eingelesen werden? Es kommt doch hin und wieder mal vor, das man eine Json Datei hat, die man einlesen will. Man könnte es generisch einlesen. Oder man erzeugt sich die nötigen Java BEs bzw. Pojos und liest die Datei dann ein. Hier mal ein Beispiel mit gson zum einlesen in die zuvor erzeugten Java Klassen.

Es muss in der pom.xml diese Abhängigkeit ergänzt werden:

Z.B. diese aircraft.json Datei. Die Felder werden hier beschrieben. Die Datei wird vom Dump1090 Server alle paar Sekunden aktualisert.

Wir schauen uns einfach die Struktur an, und erzeugen Java Klasse mit genau den Feldnamen, das ist wichtig da die Felder dann automatisch per reflection eingelesen werden. „Wie können Json Dateien in Java Objekte eingelesen werden mit google gson?“ weiterlesen

Automatische Überprüfung auf Sicherheitslücken im Java Code auf Basis der Internationalen National Vulnerability Database (NVD)

Sicherheit in Java-Projekten. Datenlecks in Java-Code entdecken. Reports mit bekannten Sicherheitslecks können leicht erstellt werden. Hier mal ein Beispiel Report im HTML Format:

Grundlage bildet die National Vulnerability Database (NVD) Datenbank für Sicherheitslücken, die vom National Institute of Standards and Technology (NIST) gepflegt wird. Wie können solche Reports erstellt werden?

Einfach in der Maven pom.xml das folgende Plugin DependencyCheck ergänzen: „Automatische Überprüfung auf Sicherheitslücken im Java Code auf Basis der Internationalen National Vulnerability Database (NVD)“ weiterlesen

Eclipse Oxygen.1A PlugIn SortIt zum schnellen sortieren nach Länge, Buchstaben oder Nummern

Sortierung von Text ist doch hin und wieder mal nötig. Das Eclipse Plugin SortIt ist zwar schon älter, vom 11.8.2016, aber es läuft immer noch mit der aktuellen Eclipse Oxygen.1A Version. Es kann wie alle anderen Plugins installiert werden.
Cooles Plugin
Die Updateseite die unter dem Menü: Help->Install new Software eingetragen werden muss lautet:

Dann durch den Installationsvorgang gehen: „Eclipse Oxygen.1A PlugIn SortIt zum schnellen sortieren nach Länge, Buchstaben oder Nummern“ weiterlesen

Wie kann ein JEE 8 Projekt mit GlassFish v5 in Docker mit Eclipse Oxygen in 5 Minuten mit Archetyp erstellt werden?

Wer mal eben schnell ein JEE 8 Projekt mit GlassFish Server in einem Docker Kontainer erstellen will, kann das leicht mit dem Archtype com.airhacks von Adam Bien tun.

Voraussetzung ist Eclipse Oxygen (Mindmap) mit Java 1.8 und Docker.

Was ist zu tun?

1. Ein neues Mavenprojekt starten über das Menü: New – Other – Maven Projekt„Wie kann ein JEE 8 Projekt mit GlassFish v5 in Docker mit Eclipse Oxygen in 5 Minuten mit Archetyp erstellt werden?“ weiterlesen

Soeben wurde die finale Version des JDK 9 veröffentlicht. Endlich!

Ab jetzt gibt es das Java 9 JDK zum Downloaden mit Jigsaw, Erweiterung der Stream-API, Kommandozeilenanwendung JShell, Neue Collection Factory-Methoden, usw. … und Oracle plant auch kürzere Releasezyklen (6 Monate).

Also, Archive laden und installieren:

Quicktest:

Feier! Freude! Und das sogar im Urlaub

Quicktest: JDeps (Java Dependency Analysis Tool)

Mit Java 8 wird im bin Verzeichnis auch das JDeps Tool ausgeliefert. Dieses Tool ermöglicht eine statische Kodeanalyse von der Kommandozeile. Es kann die statischen Abhängigkeiten von Klassen und Jars aufzeigen und auch eine Abhängigkeitsgraphen generieren. So ist man dann für Java 9 vorbereitet.

Das wollen wir einmal ausprobieren. Dazu hole ich mir für mein Testprojekt erst einmal alle Jars und untersuche dann das JUnit 4.12.

Also in der pom.xml folgendes Plugin ergänze und ein „mvn package“ ausführen: „Quicktest: JDeps (Java Dependency Analysis Tool)“ weiterlesen

JUnit 5 @ParameterizedTest mit @ValueSource oder 3 Gründe warum man keine JUnit Tests schreiben sollte!

In JUnit 5 gibt es nun die Möglichkeit, Testmethoden mit Parametern ausszuführen. Anstatt der @Test Annnotation verwendet man die @ParameterizedTest. Nun braucht man noch eine Datenquelle mit @ValueSource.

Diese Klassen liegen in: „JUnit 5 @ParameterizedTest mit @ValueSource oder 3 Gründe warum man keine JUnit Tests schreiben sollte!“ weiterlesen

חזרות Wiederholungen mit JUnit 5: @RepeatedTest

Manchmal will man eine Testmethode öfter ausführen. Das ist ja leicht mit einer Schleife möglich.

JUnit 5 bietet nun aber eine schöne Annotation an @RepeatedTest. Mit der kann leicht die Anzahl der Wiederholungen angegeben werden. Über die Methodenparameter TestInfo und RepetitionInfo kann zur Laufzeit auf die Klassennamen, Methodennamen und aktuellen runden Wert zugegriffen werden. Hier mal ein Beispiel:


„חזרות Wiederholungen mit JUnit 5: @RepeatedTest“ weiterlesen

Universally Unique Identifier (UUID) bzw. Globally Unique IDentifier (GUID) mit Java erzeugen

Ein Universally Unique Identifier (UUID) ist ein Standard für Identifikatoren. Wer eindeutige einmalige IDs braucht, kann die in Java einfach erzeugen. Es gibt da ab 1.5 die Klasse UUID mit der man einfach diese IDs erzeugen kann.

Die RFC 4122 beschreibt den Aufbau und den Algorithmus für die Erzeugung. Das ganze ist schon ziemlich sicher, da die SecureRandom Klasse in Java verwendet wird.

Habe mich gefragt, ob die auch wirklich eindeutig sind. Dafür mal eben einen kleinen JUnit Test geschrieben der 1 Millionen UUIDs erzeugt und testet ob zwei gleiche erzeugt werden. Nach 4889,556 Sekunden das Ergebnis:

Hier die Testklasse:

Die CPU war schon teilweise zu 100% ausgelastet, zumindestens einer der acht Kerne:

Ein UUID in ihrer Normalform sieht beispielsweise so aus: „Universally Unique Identifier (UUID) bzw. Globally Unique IDentifier (GUID) mit Java erzeugen“ weiterlesen

In welcher Höhe fliegen Flugzeuge?

Mich hat mal die Frage interessiert, in welcher Höhe die meisten Flugzeuge aktuell so fliegen.

Also habe ich mal ein kleines Java Programm geschrieben, welches in Echtzeit die Daten von The OpenSky Network abfragen kann. Es werden also mal alle Flugzeuge die Transponser haben und von The OpenSky Network erfasst sind berücksichtigt.

Hier das Ergebnis von 3048 Flugzeugen:

Das ist die vom Programm ermittelte Datenbasis: „In welcher Höhe fliegen Flugzeuge?“ weiterlesen

Mit dem Raspberry Pi den Java Class File Disassembler (javap) aufrufen

Manchmal will man sehen, was alles so in einer compilierten Java Datei steckt. Nicht immer hat man den Quelltext. Auch für die Fehlersuche ist ein Disassembler mal ganz gut.

In jedem JDK ist auch ein Disassembler javap dabei. Denn wollen wir nun einmal auf eine unbekannte Java Class Datei loslassen, um zu sehen, was es so zu sehen gibt.

Zuerst loggen wir uns auf die Kommandozeile eines Raspberry Pi ein, auf dem ein Java JDK installiert ist. Ob Java installiert ist kann mit

getestet werden. Wenn dort eine Versionsangabe geliefert wird, ist alles ok.

Dann legen wir erst mal ein Testverzeichnis an und wechsel in das Verzeichnis:

Dann holen wir uns in das Verzeichnis eine unbekannte Flugzeug.class Datei (der Quellcode ist hier zu finden):

Diese Datei wollen wir nun disassemblieren, mit

Schon bekommen wir alle gewünschten Informationen:

Nun schauen wir uns mal alle Möglichkeiten an: „Mit dem Raspberry Pi den Java Class File Disassembler (javap) aufrufen“ weiterlesen

PDF erzeugung in 5 Zeilen mit Java am Beispiel eines Lebenskalender

Wie können mit Java PDF Dokumente erzeugt werden?

Das geht mit ein paar Zeilen Code und iText. Die iText Lib läßt sich leicht integrieren. Hier mal ein Beispiel um ein paar Daten zu haben, nehmen wir mal einen Lebenskalender. Der ganze Code (nur eine Java Klasse) liegt auf Github und kann von dort geladen werden.

Also mal ein neues Mavenprojekt anlegen und in der pom.xml die iText Abhängigkeit einfügen:

Dann mal ein paar Zeilen Javacode für die PDF Erzeugung z.B. so:

und schon können wir ein PDF Dokument erzeugen. Hier das Ergebnis lebenskalender.pdf.

Hier mal die Ausgabe auf System.out:

„PDF erzeugung in 5 Zeilen mit Java am Beispiel eines Lebenskalender“ weiterlesen

Warum läuft die OSGI-Konsole in neueren Versionen nicht mehr so wie früher?

In älteren OSGI Versionen konnte die Konsole einfach über einen Aufruf:

gestartet werden. In neueren Versionen läuft es nicht mehr. D.h. es gibt noch nicht einmal eine Fehlermeldung.

Die neue Konsole ist nun Teil von der Apache Felix Gogo shell. Ab dem Eclipse Release 4.4 (Luna) ist die Built-in OSGi-Konsole komplett von dem Equinox Framework entfernt worden. „Warum läuft die OSGI-Konsole in neueren Versionen nicht mehr so wie früher?“ weiterlesen