<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Vaadin on JAVAPRO Germany</title><link>https://javapro.svenruppert.com/categories/vaadin/</link><description>Recent content in Vaadin on JAVAPRO Germany</description><generator>Hugo</generator><language>de-DE</language><lastBuildDate>Wed, 22 Apr 2026 07:06:24 +0000</lastBuildDate><atom:link href="https://javapro.svenruppert.com/categories/vaadin/index.xml" rel="self" type="application/rss+xml"/><item><title>URLShortener - Simple Bulk Creation</title><link>https://javapro.svenruppert.com/urlshortener-simple-bulk-creation/</link><pubDate>Wed, 22 Apr 2026 07:06:24 +0000</pubDate><guid>https://javapro.svenruppert.com/urlshortener-simple-bulk-creation/</guid><description>&lt;p&gt;Die Erzeugung von Kurzlinks wirkt auf den ersten Blick wie ein ausgesprochen einfacher Anwendungsfall. Eine Zieladresse wird eingegeben; das System erzeugt einen Shortcode, der unmittelbar verwendet werden kann. Solange sich dieser Ablauf auf einzelne Links beschränkt, bleibt die Benutzerführung überschaubar. Mit dem Übergang zur Massenanlage verändert sich die Situation jedoch grundlegend. Aus einer einzelnen Eingabe wird ein Arbeitsprozess, in dem mehrere URLs gleichzeitig erfasst, geprüft, bewertet und schließlich erzeugt werden müssen. Genau an diesem Punkt reicht es nicht mehr aus, eine bestehende Erfassungsmaske lediglich um weitere Eingabemöglichkeiten zu ergänzen. Je größer die Menge der zu verarbeitenden URLs wird, desto stärker rückt die Führung durch den Prozess in den Mittelpunkt.&lt;/p&gt;</description></item><item><title>Vaadin Signals - Since 25.1 - Teil 2</title><link>https://javapro.svenruppert.com/vaadin-signals-since-25-1-teil-2/</link><pubDate>Wed, 15 Apr 2026 07:16:02 +0000</pubDate><guid>https://javapro.svenruppert.com/vaadin-signals-since-25-1-teil-2/</guid><description>&lt;h2 id="nebenläufigkeit--thread-sicherheit"&gt;Nebenläufigkeit &amp;amp; Thread-Sicherheit&lt;/h2&gt;
&lt;p&gt;Die Sicherheit von Threads ist das Erste, was erfahrene Java-Entwickler hinterfragen, wenn sie auf eine neue Abstraktion stoßen. Signals gehen diese Frage mit zwei grundlegend unterschiedlichen Ansätzen an, je nachdem, ob der Bundesstaat sitzungslokal oder sitzungsweit ist.&lt;/p&gt;
&lt;p&gt;Lokale Signale haben eine eigene Sperre, die das Lesen und Schreiben zwischen dem UI-Thread einer Sitzung und den von dieser Sitzung ausgelösten Hintergrundaufgaben koordiniert. Daher ist jeder, der in derselben Sitzung ein ValueSignal aus einem CompletableFuture-Callback schreibt, sicher.&lt;/p&gt;</description></item><item><title>Vaadin Signals - Since 25.1 - Teil 1</title><link>https://javapro.svenruppert.com/vaadin-signals-since-25-1-teil-1/</link><pubDate>Tue, 14 Apr 2026 07:13:07 +0000</pubDate><guid>https://javapro.svenruppert.com/vaadin-signals-since-25-1-teil-1/</guid><description>&lt;h2 id="motivation-was-war-bisher-das-problem"&gt;Motivation: Was war bisher das Problem?&lt;/h2&gt;
&lt;p&gt;Jeder, der schon längere Zeit mit Vaadin Flow arbeitet, kennt zwei Arten von Schmerz – und beide werden angesprochen.&lt;/p&gt;
&lt;p&gt;Das Erste ist offensichtlich: Eine Hintergrundoperation schreibt Daten, mehrere Browser-Tabs müssen synchronisiert werden, und plötzlich bist du tief in UI.access(), @Push und der Frage, warum Tab B nicht reagiert, obwohl Tab A gerade etwas geschrieben hat.&lt;/p&gt;
&lt;p&gt;Die zweite ist subtiler, aber grundlegender: Selbst in rein lokalem, Einzelbenutzer-UI-Code – einem Formular, einem Einkaufswagen, einer detaillierten Ansicht – ist der Zustand über Komponentenvariablen verteilt, manuell synchronisiert und zwingend verwaltet. Wenn sich ein Wert ändert, ruft man component.setValue() auf, was ein Label aktualisiert und den Status des Buttons festlegt. Der Entwickler koordiniert, was geändert werden muss – nicht das Framework.&lt;/p&gt;</description></item><item><title>Url-Shortener - Redirect-Statistiken - Teil 2</title><link>https://javapro.svenruppert.com/url-shortener-redirect-statistiken-teil-2/</link><pubDate>Thu, 09 Apr 2026 07:05:03 +0000</pubDate><guid>https://javapro.svenruppert.com/url-shortener-redirect-statistiken-teil-2/</guid><description>&lt;h2 id="die-vaadin-ui-komponenten-im-detail"&gt;Die Vaadin-UI-Komponenten im Detail&lt;/h2&gt;
&lt;p&gt;In diesem Teil geht es nun weiter mit der Implementierung von den Redirect-Statistiken in dem Open Source Tool URL-Shortener. Den ersten Teil findest Du hier: &lt;strong&gt;&lt;a href="https://3g3.eu/Hfzsf3"&gt;https://3g3.eu/Hfzsf3&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Die Quelltexte findest Du auf GitHub unter&lt;/strong&gt; &lt;a href="https://3g3.eu/url"&gt;&lt;strong&gt;https://3g3.eu/url&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class="post-figure"&gt;
 &lt;img src="https://javapro.svenruppert.com/uploads/sites/1/2026/04/image-4-1024x382.png" alt="" loading="lazy" decoding="async"&gt;
 
 
 
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="die-komponentenarchitektur"&gt;Die Komponentenarchitektur&lt;/h3&gt;
&lt;p&gt;Die Vaadin-UI für die Statistik-Funktionalität besteht aus mehreren eng verzahnten, aber bewusst entkoppelten Komponenten. Im Zentrum stehen zwei Views: die StatisticsView als Übersichtsseite und die StatisticsDetailView für die Analyse einzelner ShortCodes. Beide nutzen die wiederverwendbare StatisticsToolbar für Datumsauswahl und Granularitätssteuerung. Diese Trennung folgt dem Prinzip der Komposition über Vererbung – ein Muster, das sich in Vaadin-Anwendungen bewährt hat.&lt;/p&gt;</description></item><item><title>Url-Shortener - Redirect-Statistiken - Teil 1</title><link>https://javapro.svenruppert.com/url-shortener-redirect-statistiken-teil-1/</link><pubDate>Tue, 07 Apr 2026 12:59:48 +0000</pubDate><guid>https://javapro.svenruppert.com/url-shortener-redirect-statistiken-teil-1/</guid><description>&lt;h3 id="redirect-statistiken-in-vaadin-flow-vom-event-bis-zur-visualisierung"&gt;Redirect-Statistiken in Vaadin Flow: Vom Event bis zur Visualisierung&lt;/h3&gt;
&lt;p&gt;Ein URL-Shortener erfüllt auf den ersten Blick eine triviale Aufgabe: Er nimmt eine lange URL entgegen und liefert eine kurze zurück. Der eigentliche Wert entsteht jedoch erst durch das, was nach dem Erstellen passiert – nämlich die Nutzung. Wie oft wird ein Link aufgerufen? Zu welchen Tageszeiten? Über welchen Zeitraum verteilt? Diese Fragen sind nicht nur aus Neugier interessant, sondern bilden die Grundlage für fundierte Entscheidungen. Wer einen Link in einer Kampagne einsetzt, möchte wissen, ob die Kampagne funktioniert. Wer einen Link intern teilt, möchte verstehen, ob die Zielgruppe ihn überhaupt nutzt.&lt;/p&gt;</description></item><item><title>Ein Vaadin-Starterprojekt mit klarem Fokus</title><link>https://javapro.svenruppert.com/ein-vaadin-starterprojekt-mit-klarem-fokus/</link><pubDate>Wed, 18 Mar 2026 07:04:21 +0000</pubDate><guid>https://javapro.svenruppert.com/ein-vaadin-starterprojekt-mit-klarem-fokus/</guid><description>&lt;p&gt;Viele Beispielprojekte überfrachten den Einstieg, weil sie zu viele Themen gleichzeitig aufzeigen. Routing, Datenzugriff, Security, Formulare, Theme-Anpassungen und weitere Integrationen werden dann in einer einzigen Demo dargestellt. Für Leser wird es dadurch schwieriger, den eigentlichen Aufbau des Projekts zu erkennen.&lt;/p&gt;
&lt;p&gt;Dieses Projekt verfolgt einen anderen Ansatz. Im Mittelpunkt steht ein kompaktes Gerüst aus AppShell, MainLayout, mehreren Views, einem kleinen Service, einem eigenen Theme und vorbereiteter Internationalisierung. Ziel ist es, die grundlegenden Bausteine einer Vaadin-Flow-Anwendung so sichtbar zu machen, dass ihr Zusammenspiel nachvollziehbar bleibt.&lt;/p&gt;</description></item><item><title>Internationalisierung (i18n) in einer Vaadin-Anwendung</title><link>https://javapro.svenruppert.com/internationalisierung-i18n-in-einer-vaadin-anwendung/</link><pubDate>Wed, 11 Mar 2026 07:06:19 +0000</pubDate><guid>https://javapro.svenruppert.com/internationalisierung-i18n-in-einer-vaadin-anwendung/</guid><description>&lt;p&gt;Moderne Webanwendungen werden selten nur von Benutzern derselben Sprache verwendet. Selbst interne Werkzeuge erreichen häufig internationale Teams oder werden in verschiedenen Ländern eingesetzt. Eine mehrsprachige Benutzeroberfläche ist daher keine Luxusfunktion, sondern ein wichtiger Bestandteil der Benutzerfreundlichkeit.&lt;/p&gt;
&lt;p&gt;Auch das Open‑Source‑Projekt URL‑Shortener profitiert von einer klaren Internationalisierungsstrategie. Die Anwendung richtet sich an Entwickler, Administratoren und andere Benutzer, die Links verwalten, analysieren oder verteilen möchten. Damit die Oberfläche unabhängig von der Herkunft der Benutzer verständlich bleibt, unterstützt die Anwendung mehrere Sprachen.&lt;/p&gt;</description></item><item><title>Saubere Styles in Vaadin: CSS statt getStyle().set()</title><link>https://javapro.svenruppert.com/saubere-styles-in-vaadin-css-statt-getstyle-set/</link><pubDate>Wed, 04 Mar 2026 13:25:41 +0000</pubDate><guid>https://javapro.svenruppert.com/saubere-styles-in-vaadin-css-statt-getstyle-set/</guid><description>&lt;p&gt;Vaadin Flow ermöglicht es, komplette Webanwendungen ausschließlich in Java zu entwickeln. Komponenten, Layouts, Navigation und sogar komplexe UI-Strukturen lassen sich serverseitig modellieren, ohne direkt mit HTML oder JavaScript arbeiten zu müssen. Dieser Ansatz ist einer der Hauptgründe, warum Vaadin besonders in Java-zentrierten Projekten beliebt ist.&lt;/p&gt;
&lt;p&gt;Mit zunehmender Größe eines Projekts entsteht jedoch ein typisches Problem: Styling wird häufig direkt im Java-Code vorgenommen. Vaadin erlaubt dies bequem über die Methode getStyle().set(&amp;hellip;). Dadurch lassen sich Abstände, Farben oder Layout-Eigenschaften schnell anpassen. In kleinen Prototypen wirkt dieses Vorgehen zunächst harmlos und sogar praktisch.&lt;/p&gt;</description></item><item><title>Ein unerwartet problemloses Upgrade</title><link>https://javapro.svenruppert.com/ein-unerwartet-problemloses-upgrade/</link><pubDate>Wed, 18 Feb 2026 07:05:47 +0000</pubDate><guid>https://javapro.svenruppert.com/ein-unerwartet-problemloses-upgrade/</guid><description>&lt;p&gt;Der Ausgangspunkt für diesen Artikel war kein strategischer Architektur‑Workshop und kein langfristig geplanter Migrationspfad, sondern ein vergleichsweise unspektakulärer Schritt: die Aktualisierung der Versionsnummern im bestehenden Projekt. Im Rahmen der Weiterentwicklung meines URL‑Shortener‑Projekts stand ohnehin ein reguläres Dependency‑Update an. Vaadin 25 ( &lt;a href="https://3g3.eu/vdn25"&gt;&lt;strong&gt;https://3g3.eu/vdn25&lt;/strong&gt;&lt;/a&gt; ) war zu diesem Zeitpunkt bereits verfügbar – also lag es nahe, den Schritt einfach zu gehen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Die Quelltexte zu dem Projekt befinden sich&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;auf GitHub unter&lt;/strong&gt; &lt;a href="https://3g3.eu/url"&gt;&lt;strong&gt;https://3g3.eu/url&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class="post-figure"&gt;
 &lt;img src="https://javapro.svenruppert.com/uploads/sites/1/2026/02/image-11-1024x632.png" alt="" loading="lazy" decoding="async"&gt;
 
 
 
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Die Erwartungshaltung war dabei realistisch, vielleicht sogar leicht skeptisch. Ein neues Major‑Release, neue Mindestanforderungen, ein modernisierter Stack – all das sind üblicherweise gute Gründe, zumindest mit kleineren Anpassungen oder ersten Reibungen zu rechnen. Entsprechend gering war die Hoffnung, dass ein einfaches Hochziehen der Versionsnummern tatsächlich ausreichen könnte.&lt;/p&gt;</description></item><item><title>URL-Shortener - Import und Vaadin</title><link>https://javapro.svenruppert.com/url-shortener-import-und-vaadin/</link><pubDate>Wed, 11 Feb 2026 07:12:18 +0000</pubDate><guid>https://javapro.svenruppert.com/url-shortener-import-und-vaadin/</guid><description>&lt;h2 id="einordnung-warum-ein-import-überhaupt-eine-ui-braucht"&gt;Einordnung: Warum ein Import überhaupt eine UI braucht&lt;/h2&gt;
&lt;p&gt;Importfunktionen werden in Anwendungen häufig als rein technisches Detail betrachtet. Daten werden eingelesen, verarbeitet und stehen anschließend zur Verfügung – idealerweise ohne weitere Interaktion. In der Praxis ist ein Import jedoch selten ein unsichtbarer Vorgang. Er markiert einen Übergang zwischen bestehenden Systemzuständen, zwischen alten und neuen Daten, zwischen Vertrauen und Kontrolle. Genau an dieser Stelle entsteht die Notwendigkeit einer Benutzeroberfläche.&lt;/p&gt;
&lt;p&gt;Im URL-Shortener ist der Import nicht als Hintergrundprozess konzipiert, sondern als expliziter, sichtbarer Vorgang. Die UI übernimmt dabei nicht die Rolle eines fachlichen Entscheiders, sondern die eines transparenten Vermittlers. Sie schafft einen klar abgegrenzten Raum, in dem ein Import stattfinden kann, ohne bestehende Daten unmittelbar zu verändern. Allein diese Entkopplung rechtfertigt bereits die Existenz einer eigenen Import-Oberfläche.&lt;/p&gt;</description></item><item><title>URL-Shortener - JSON-Export in Vaadin Flow</title><link>https://javapro.svenruppert.com/url-shortener-json-export-in-vaadin-flow/</link><pubDate>Thu, 05 Feb 2026 16:10:28 +0000</pubDate><guid>https://javapro.svenruppert.com/url-shortener-json-export-in-vaadin-flow/</guid><description>&lt;p&gt;Exportfunktionen werden häufig als rein technische Nebenaufgabe betrachtet: ein Button, ein Download, fertig. In einer Vaadin-basierten Anwendung zeigt sich jedoch sehr schnell, dass der Export weit mehr ist als das Schreiben von Daten in eine Datei. Er ist eine direkte Verlängerung des UI-Zustands, ein infrastruktureller Vertrag zwischen Frontend und Backend – und ein entscheidender Faktor für Wartbarkeit und Vorhersagbarkeit.&lt;/p&gt;
&lt;p&gt;Dieser Artikel zeigt, wie im URL-Shortener-Projekt ein JSON-basierter Export bewusst als UI-getriebener Workflow gestaltet wurde. Der Fokus liegt dabei nicht auf Dateiformaten oder komplexen Backend-Abstraktionen, sondern auf der sauberen Einbettung des Exports in eine Vaadin-Flow-Oberfläche: Filterkopplung, Download-Mechanik, Paging-Grenzen und klare Verantwortlichkeiten zwischen UI, Client und Server.&lt;/p&gt;</description></item></channel></rss>