Ein Einblick in Progressive Web Apps

Die Idee hinter Progressive Web Apps ist einfach und brillant: Man nutzt einen sogenannten Service Worker und lässt diesen als Proxy zwischen der Webseite und dem eigentlichen Server laufen. Das heißt, dass alle Abfragen, die Ressourcen laden, durch den Service Worker gelangen, bevor die eigentliche Übertragung über das Internet stattfindet. Der Service Worker hat direkten Zugriff auf einen Cache und kann sämtliche Ressourcen einer Webseite darin speichern. Somit ist es möglich, Webseiten und Dienste offline verfügbar zu machen, sodass Benutzer jederzeit – egal ob mit, ohne oder nur wenig Internet – die Webseite nutzen können.
Continue reading

Posted in Web as a Platform | Tagged | 4 Comments

Hibernate 5.2 erschienen

Das kürzlich erschienene Hibernate 5.2 benötigt zur Laufzeit nun mindestens Java 8. Dieser große Schritt ist für Minor-Releases sonst eher unüblich. Man will damit in Vorbereitung auf Hibernate 6 schon mal alte Zöpfe abschneiden. Das bisherige hibernate-java8 Modul wurde entfernt und die Logik in den Hibernate Core übernommen. Damit werden nun die Java 8 Date/Time Datentypen nativ als Query-Parameter unterstützt. Des Weiteren können Abfrage-Ergebnisse als Stream zurückgeliefert werden. Methoden, die null zurückgeben dürfen, unterstützen jetzt auch die Klasse Optional.

Der JPA-Support wurde ebenfalls in das Hibernate Core übernommen. Das Modul hibernate-entitymanager entfällt damit auch. Des Weiteren kann nun jede JCache-konforme Implementierung als Second Level Cache eingesetzt werden.

Eine genaue Anleitung findet man im Migration Guide.

Posted in Java EE, Java Persistence | Tagged , , , , , | Leave a comment

Profilbasierte Verwendung von Spring-Liquibase

In diesem Post geht es darum, wie man die Liquibase-Bean für Tests benutzt, ohne jedoch das Produktivsystem automatischen Schema-Änderungen zu unterwerfen. Für Tests soll hierbei H2 Embedded benutzt werden und für den Produktivbetrieb eine PostgreSQL-Datenbank.

Die Problematik, die sich hierbei ergibt, ist, Liquibase zwischen der Erzeugung der DataSource und der EntityManagerFactory auszuführen, aber nur im Test-Profil.

Sofern dies gelöst ist, ist es möglich, Tests unabhängig durchzuführen. Die Tests erstellen hierbei die Datenbank per Spring und Liquibase bei jeder Ausführung neu.

Daraus ergibt sich, dass die Tests immer das neuste Schema sehen und keine Datenbank für Tests manuell gepflegt werden muss.

Continue reading

Posted in Java Persistence, Spring Universe | Tagged , , , | Leave a comment

Liquibase: Best Practices

Liquibase ist ein System, um Datenbankschema-Änderungen festzuhalten und per SCM nachvollziehen zu können. Diese Änderungen können in XML, YAML, JSON oder SQL geschrieben werden und enthalten datenbankunabhängige Anweisungen. Liquibase kümmert sich dann darum, die Konvertierung für die jeweilige Datenbank zu übernehmen.

liquibase_logo

Zudem kann es Migrations-Skripte erstellen, oder eingebettet als Anwendungsbestandteil die Datenbank direkt (beim Hochfahren der Anwendung) auf den aktuellen Stand bringen.

Im Folgenden stelle ich meine persönlichen Empfehlungen bei der Verwendung von Liquibase vor:

Continue reading

Posted in Did you know?, Java Persistence | Tagged , , , | 1 Comment

Java 8 Lambdas unter der Lupe

Mit Java 8 kam das wohl größte Update für Java SE. Dabei gab es sowohl Neuerungen in der Sprache (Lambdas, Default-Methoden, …), in der Klassen-Bibliothek (Streams), als auch in der JVM. Die Lambda-Ausdrücke sind eine Art Grundlage für viele der neuen Funktionalitäten. Zudem ermöglichen sie uns, auf eine funktionale Art und Weise zu programmieren. Genau genommen ist ein Lambda-Ausdruck ein Code-Block, der im Gegensatz zu Methoden/Funktionen aber keinen Namen hat. Es handelt sich also um eine anonyme Funktion, die man über Variablen referenzieren und Methoden als Parameter mit- bzw. von dort zurückgeben kann. Bei der Definition eines Lambda-Ausdrucks wird der Inhalt noch nicht ausgeführt, kann aber anschließend beliebig oft aufgerufen werden.

Mit der Einführung der Lambda-Ausdrücke wurde Java zwar nicht gleich eine funktionale Programmiersprache. Aber allein die Möglichkeit, auf funktionale Art und Weise zu programmieren, ermöglicht es uns, besser lesbaren und verständlicheren Code zu schreiben. Zudem bietet es auch Vorteile in der nebenläufigen Programmierung. Das wird im Zeitalter von Multicore- und Multiprozessor-Hardware immer wichtiger.

Continue reading

Posted in Java and Quality, Java Basics | Tagged , , , , | Leave a comment

Android Instant Apps vs. Progressive Web Apps

Two days ago, Google announced so called Android Instant Apps at the Google I/O 2016. Android Instant Apps are Android apps which could replace mobile websites. They open by clicking a URL and do not need to be installed. But Android Instant Apps are not the first idea of Google to provide a smooth transition between apps and the web. Some of you might have heard about Progressive Web Apps which were announced back in 2014 on the Chrome Dev Summit. The idea behind Progressive Web Apps is similar to Android Instant Apps. You open a link, and you will get the look and feel of a native app.

In this post we’ll take a quick look at both technologies and clarify where they distinguish.

Continue reading

Posted in Web as a Platform | Tagged , , , , | Leave a comment

Gradle Script Kotlin

Eine neue Zusammenarbeit ist zwischen den Entwicklern des Build Tools Gradle und der Programmiersprache Kotlin entstanden. Der Gründer von Gradle Inc., Hans Dockter, hat sich mit dem Kotlin-Team von JetBrains zusammengesetzt und versucht herauszufinden, wie Gradle von Kotlin (und umgekehrt) profitieren kann. Herausgekommen ist dabei mit Gradle Script Kotlin der Beginn einer Kooperation mit dem Ziel, Gradle Build-Skripte auch mit der statisch typisierten JVM-Sprache Kotlin schreiben zu können.

Continue reading

Posted in Build, config and deploy, Other languages for the Java VM | Tagged , | Leave a comment