Java Quickie: Ist eine Domain erreichbar?

Mit der Methode isReachable aus der Klasse InetAddress kann seit Java 1.5 leicht überprüft werden (via Echo) ob ein Rechner bzw. Domain erreichbar ist oder „lebt“. Als Parameter wird die Timeout Zeit in Millisekunden übergeben, hier also 1000 für eine Sekunde:

Eine IOException gibt es bei Netzwerkfehler. Und eine IllegalArgumentException wenn ein negativer Wert für den Timeout angegeben wird, das macht man ja auch nicht 😉

Java Quickie: Liefere die IP vom Domain Namen

Wie kann die IP von einem Domain Namen ermittelt werden? Das geht mit einer Zeile InetAddress.getByName aus dem java.net.InetAddress Package schon seit JDK 1. Wenn die Domain unbekannt ist gibt es eine UnknownHostException wie diese JUnit Tests zeigen:

Raspberry Pi FreeMarker Java and Maven Project goes to 去 يذهب إلى GibLab and not to GitHub

Bisher hatte ich alle öffentlichen Repositorys in GibHub liegen. GitHub ist nun aber an Microsoft verkauft worden. Wenn das kein Grund ist, das nächste Repo mal in GitLab anzulegen. GitLab hat auch den Vorteil, das private Repos kostenlos sind und …

Also das FreeMarker-Maven-Java-Projekt nach GitLab hochladen.

Was etwas suche und Anpassung benötigte, war der CI-Prozess. Aber wenn man die Syntax der .gitlab-ci.yml kennt, geht es mit zwei Zeilen.
Also einen Docker-Container mal mit Java 11 und Maven, wie folgt erstellt: „Raspberry Pi FreeMarker Java and Maven Project goes to 去 يذهب إلى GibLab and not to GitHub“ weiterlesen

Es muss ja nicht immer Apache Velocity sein, Apache FreeMarker geht auch!

Es gibt unterschiedliche Template Engine, wie zum Beispiel Apache Velocity aber auch Apache Freemarker.

Bei der Verwendung von Templates, kann man sich einfach auf die Präsentation der Daten konzentrieren. Das läuft nach dem MVC (Model View Controller) Pattern. Die Templats können auch über diesen Online FreeMarker Template Tester ohne Aufwand getestet werden.

Heute mal ein kleines Beispiel, mit Freemarker. Wir wollen Verzeichnisse nach Mindmaps durchsuchen, und alle gefundenen Mindmaps in eine HTML-Seite ausgeben.

Fangen wir mit einem JUnit Test an: „Es muss ja nicht immer Apache Velocity sein, Apache FreeMarker geht auch!“ weiterlesen

Verzeichnise mit Java Monitor WatchService überwachen رصد, izlemek, 顯示器

Seit Java 7 gibt es den WatchService zum überwachen von Verzeichnissen auf System-Ebene. Der WatchService übernimmt direkt die Eventaufrufe des Betriebssystems und ist damit vergleichbar mit einem Low-Level-Event.

Damit kann man in ein paar Zeilen Code, zum Beispiel benachrichtigt werden, wenn eine neue Datei im Verzeichnis hinzugefügt wird.
Das wir mit der Konstanten StandardWatchEventKinds.ENTRY_CREATE angegeben. Es gib aber auch noch welche fürs löschen oder verändern. Die Konstanten können dann auch verknüpft werden.

Für die Verwendung muss das Package java.nio.file.* importiert werden. Hier der Beispiel Code, der das „input“ Verzeichnis des Users überwacht, der auch auf einem Raspberry Pi läuft 😉

Text to MP3 per Java in 10 Minuten

Mit Java kann man leicht aus einem Text eine MP3 Datei erstellen. Dazu braucht man sich nur einmal auf voicerss.org anmelden und eine API-Key generieren.

Dann einfach das Java SKD von hier runter laden. Das Zip dann auspacken und die voicerss_tts_3.jar dem Classpath hinzufügen. Dann dieses Beispiel Programm ausführen und den API-Key eintragen:

Hier dann das Ergebnis direkt zum abspielen

in deutscher Sprache und Mono.
„Text to MP3 per Java in 10 Minuten“ weiterlesen

Eclipse Photon kann deprecated Felder und Methoden ausblenden

In Eclipse Photon können nun deprecated Felder und Methoden in Outline view, Members view, Package Explorer view, Project Explorer view, und Quick Outline mit dem neuen Filter ausgeblendet werden. Wenn man eine annotierte deprecated Methode hat, wird sie ja durchgestrichen im Project Explorer anzgezeit:

Mit dem neuen Filter, der über das Menü „Filters and …“ erreichbar ist:

dort diesen Eintrag selektieren „Eclipse Photon kann deprecated Felder und Methoden ausblenden“ weiterlesen

Syntaxhighlighter sagt der Daltonist ;-) Wie kann Quellcode (Java, C++, C …) in PPT oder Word in Farbe eingefügt werden?

Manchmal braucht man für eine Präsentation oder ein Dokument farbige Beispiele von Quellcode oder auch für Dokus. Wie können die nun erstellt werden? Dafür gibt es ein cooles Programm highlight von Andre Simon. Highlight konvertiert Sourcecode in XHTML, HTML, RTF, TeX, LaTeX, SVG, BBCode und Terminal Escape-Sequenzen mit farbiger Syntaxhervorhebung. Sprachdefinitionen und Farbstile sind konfigurierbar. Es werden eine ganze Menge Sprachen unterstützt. Im Moment 215!

Auf dem Raspberry Pi ist das Programm schnell installiert mit:

So, nun ein Beispiel, wir nehmen mal eine CPP Klasse aus meinen C++ Lehrgang, Temperatur.cpp, und geben die farbig auf der Konsole aus mit:

Nun können wir auch die Ausgabe in eine Datei im RTF Format umleiten mit: „Syntaxhighlighter sagt der Daltonist 😉 Wie kann Quellcode (Java, C++, C …) in PPT oder Word in Farbe eingefügt werden?“ weiterlesen

Es muss ja nicht immer Fussball und Weltmeisterschaft sein! Neue Annotation für JUnit 5 – Tags sind auch spannend!

Mit den neuen Tags (org.junit.jupiter.api.Tag) können Methoden und auch ganze Klassen getagt werden, um sie z.B. in Gruppen einzuteilen.
Eine Testgruppe könnte z.B. eine langlaufende DB Methoden sein, die nicht immer ausgeführt werden soll.

Ein Tag muss folgenden Syntax Regeln folgen:

-ein Tag darf nicht Leer sein
-ein Tag darf keine Leerzeichen enthalten
-ein Tag darf keine ISO Kontroll Zeichen enthalten
-ein Tag darf kein, (, ), %, | oder ! Zeichen enthalten

Eine Testklasse zur WM 2018 könnte so aussehen:
„Es muss ja nicht immer Fussball und Weltmeisterschaft sein! Neue Annotation für JUnit 5 – Tags sind auch spannend!“ weiterlesen

Wie kann eine Vaadin Spring Boot Anwendung in 15 Minuten auf JUnit 5 umgestellt werden?

Wie kann eine Vaadin Spring Boot mit Hibernate Anwendung auf JUnit 5 für Eclipse Oxygene 3A umgestellt werden?

1. Deaktivieren wir die JUnit (4.12) Libs in der pom.xml:

2. Fügen wir die nötigen JUnit 5 Libs in der pom.xml hinzu:

3. Wir fügen JUnit 5 dem Buildpfad hinzu:

Es sieht dann so aus:
„Wie kann eine Vaadin Spring Boot Anwendung in 15 Minuten auf JUnit 5 umgestellt werden?“ 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

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

Manchmal braucht man eine „Many to Many“ 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. können in einem Krankenhaus mehrere Ärzte arbeiten. Die Ärzte wiederum können in mehreren Krankenhäusern arbeiten, wenn sie z.B. als Belegärzte tätig sind. Also „Many to Many„:

Es wird von z.B. Hibernate eine Mapping-Tabelle angelegt um diese Verbindung abzubilden. Ein discribe arzt_krankenhaus; würde folgendes ergeben:

Hier nun eine Kopiervorlage um diese wiederkehrende Verbindung anzulegen: „Many to Many 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

TWPlotter: Java Wasserfall Diagramme Generierung von rtl_power erzeugten CSV-Dateien

Mit rtl_power kann man via SDR alle Frequenzen scannen. Die Scann CSV-Ergebniss-Dateien können dann mit gopow in schöne Wasserfall Diagramme umgewandelt werden. Hier mal den Ablauf als BPMN 2.0

Hier ein Beispiel:

Das gopow Programm wollte ich mal in Java 8 schreiben, um auch selbst die Farben usw. beeinflussen zu können. Und auch um mal neue Funktionen von Java 8 zu benutzen. Auch kann das gopow auf dem Raspberry Pi nicht mit sehr großen Dateien umgehen. Die Scann Dateien können aber auch einige 100 MB groß sein. „TWPlotter: Java Wasserfall Diagramme Generierung von rtl_power erzeugten CSV-Dateien“ 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

Wie können mit Eclipse Oxygen.1A aus XSD-Dateien mit JAXB Java Klassen generiert werden?

Wer keine Lust hat die Uhren umzustellen, kann ja mit JAXB Java Klassendateien generieren.

In der IDE für Java Developer für Eclipse, ist der JAXB Generator nicht installiert. Der müsste in der EE IDE vorhanden sein. Wer die nicht extra zusätzlich installieren will, kann auch über das Menü Windows – Help – Install New Software und dem Stichwort jaxb suchen und dort diese Installieren:

Dann nach einem Restart, ein neues JAXB-Projekt anlegen mit: „Wie können mit Eclipse Oxygen.1A aus XSD-Dateien mit JAXB Java Klassen generiert werden?“ weiterlesen

Texo und EMF mit Diagram Editor läuft auch mit Eclipse Oxygen.1A (4.7) auf Mac OS X High Sierra (10.13)

Texo und EMF läuft auch mit Eclipse Oxygen.1A (4.7), dafür zuerst Texo installieren über das Menü neue Software mit der URL:

http://download.eclipse.org/modeling/emft/texo/updates/interim/

EMF installieren über die Oxygen Install Seite: „Texo und EMF mit Diagram Editor läuft auch mit Eclipse Oxygen.1A (4.7) auf Mac OS X High Sierra (10.13)“ 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

Wie können Realtime ACARS Nachrichten in Eclipse Oxygen Konsolen View ausgeben werden?

Evl. möchte man ACARS Daten die von einem Raspberry Pi (W Zero) geliefert werden, wie hier berichtet, auch in einer Eclipse View auf einen anderen Rechern mit Mac OS X, Linux oder Windows anzeigen. Dann hat man alles immer im Auge 😉

Wie können also Realtime ACARS Daten, die von einem Raspberry Pi geliefert werden, in der Eclipse (Oxygen) Konsolen View ausgegeben werden?

Dafür habe ich einen kleinen ACARSConsoleViewer geschrieben der die Daten in Echtzeit auf der Konsole ausgibt. Die Zeiten werden so wie vom Server angezeigt, sie sind im UTC Format, also in Deutschland mit Sommerzeit 2 Stunden zurück. Der Viewer lauscht an Port 5555 und wartet auf eintreffende ACARS Meldungen via verbindungslosem UDP.

„Wie können Realtime ACARS Nachrichten in Eclipse Oxygen Konsolen View ausgeben werden?“ weiterlesen

JUnit 5 Test-Ergebnisse Import und Export im XML Format mit Eclipse Oxygen

Manchmal möchte man die lokalen JUnit 5 Testergebnisse für später aufheben oder als Doku verwenden oder sichern. Man kann die Ergebnisse als XML exportieren und auch später wieder importieren. So kann man sich dann Fehler oder Laufzeiten mal wieder anschauen.

Die Import und Export Menüs, erscheinen aber nur, wenn schon mal ein JUnit Test gelaufen ist, dann an dieser Position:


„JUnit 5 Test-Ergebnisse Import und Export im XML Format mit Eclipse Oxygen“ weiterlesen

Wie kann ein Raspberry Pi Debian Image via Docker auf dem Mac OS X und unter Eclipse Oxygen laufen?

Mit Docker ist es ganz einfach möglich, auf Mac OS X (oder auch Windows und Linux) ein Raspberry Pi oder andere Betriebssysteme laufen zu lassen. Dann braucht man keinen echten Raspberry Pi mehr 😉

Hier mal das Beispiel unter Mac OS X wie Docker installiert und Ubuntu, Alpine Linux und zu guter letzt ein Raspbian Debian Linux für Raspberry Pi installiert wird unter Eclipse Oxygen. Die 4.7 Version von Eclipse hat eine coole Docker Unterstüzung. Also allen Grund, auf die aktuelle Eclipse Version zu wechseln.

Docker auf dem Mac OS X ist schnell eingerichtet. Wir nehmen den Stable channel von docker.com, hier der direkt link. Das docker.dmg nach dem Download doppel klicken und in den Application Ordner ziehen.

Dann im Applicatons Ordner die Docker.app starten. Oben in der Menüleiste erscheint dann das Docker Icon für die Einstellungen. „Wie kann ein Raspberry Pi Debian Image via Docker auf dem Mac OS X und unter Eclipse Oxygen laufen?“ weiterlesen

Cooler CSV Reader in JUnit 5

Will man Testfälle aus einer CSV-Datei verwenden, geht das mit JUnit 5 Super einfach. Es gibt da eine neue Annotation @CsvFileSource der nur der Dateiname der CSV-Datei übergeben werden muss, und schon wird für jede Zeile der Test ausgeführt. Die Datei muss im Classpath liegen und mit Komma (,) getrennt sein. Sie darf keine Überschrift haben.

JUnit 5

Als Beispiel soll mal die flug-data.csv dienen, die ua. die Summe aller erfassten Flugzeuge enthält.

Hier ein Auszug:

Wir wollen jetzt jede Zeile überprüfen, ob die Summe über 3000 Flugzeuge liegt und ob die UID vorhanden ist. Auch wollen wir die Testergebnisse um eine laufende Nr. ergänzen. „Cooler CSV Reader in JUnit 5“ weiterlesen

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

Rest Test Programm: Java Migration von JUnit 4 nach JUnit 5 (1.0.0.-M6)

Wollte mal mein REST Testprogramm auf JUnit 5 umstellen. Die neuen JUnit 5 Feature sind schon sehr interessant. Vor ein paar Tagen ist der neue M6 veröffentlicht worden (JUnit 5.0.0-M6 = Platform 1.0.0-M6 + Jupiter 5.0.0-M6 + Vintage 4.12.0-M6). Auch ist die Architektur nun grundlegend geändert. Und evl. will man schon mal die Neuen Features testen. Es gilt nicht: „Wer testet ist Feige ;-)“

Was ist da so nötig?

JUnit 5 braucht zur Laufzeit Java 8.

Versionen setzen

Die neuen Abhängigkeiten hinzu: „Rest Test Programm: Java Migration von JUnit 4 nach JUnit 5 (1.0.0.-M6)“ 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