H2-Datenbankserver für Integrationstests mit Maven starten und stoppen

Der Datenbankserver H2 ist ein beliebter Server während der Entwicklungsphase einer Software. Die Fähigkeit zu In-Memory-Datenbanken ist für viele Tests geradezu ideal. Wer jedoch die Datenbankstrukturen analysieren will, kommt um eine Datenbank mit Persistierung nicht herum. H2 kann natürlich das auch. Allerdings gestaltet sich das Starten/Stoppen für die Integrationstests etwas komplex. Natürlich gibt es entsprechende Plugins, aber auf einem CI-Server kommen so leicht Portkonflikte zustanden, wenn mehrere Builds gleichzeitig laufen. Ich beschreibe hier ein Setting, das den Maven-Build-Helper nutzt, um dies zu verhindern.

Weiterlesen

Datenbankversionierung mit Liquibase und Maven

SQL-Datenbanken gehören trotz der großen Aufmerksamkeit für NOSQL zum Brot-und-Butter-Handwerkzeug eines Softwareentwicklers. Und zumindest im Unternehmensumfeld wird des wohl noch lange so bleiben, denn dort setzen sich neue Konzepte nur langsam durch. Doch schon während der Softwareentwicklung stößt man im Team auf das Problem, dass Änderungen an den Datenstrukturen verwaltet werden müssen. Die Kollegen brauchen bei Softwareänderungen auch geänderte Testdatenbanken, man will auch nachhalten, welcher Commit welche Datenbankänderung nach sich zog.

Hier kommen dann Datenbankversionierungstools wie Flyway oder eben Liquibase ins Spiel. Flyway habe ich uns vor langer Zeit nur kurz angeschaut, aber eine persönliche Präferenz des für das damalige Projekt verantwortlichen Softwarearchitekten für XML-basierte Tools hat mich dann zu Liquibase geführt. Wie es in ein Mavenprojekt integriert werden kann, damit Integrationstests immer auf eine aktuelle Datenbank zugreifen können, will ich im folgenden beschreiben.

Weiterlesen

Aufruf!

Nichts ist eines Kulturvolkes unwürdiger, als sich ohne Widerstand von einer verantwortungslosen und dunklen Trieben ergebenen Herrscherclique „regieren“ zu lassen. Ist es nicht so, daß sich jeder ehrliche Deutsche heute seiner Regierung schämt, und wer von uns ahnt das Ausmaß der Schmach, die über uns und unsere Kinder kommen wird, wenn einst der Schleier von unseren Augen gefallen ist und die grauenvollsten und jegliches Maß unendlich überschreitenden Verbrechen ans Tageslicht treten?
Wenn das deutsche Volk schon so in seinem tiefsten Wesen korrumpiert und zerfallen ist, daß es, ohne eine Hand zu regen, im leichtsinnigen Vertrauen auf eine fragwürdige Gesetzmäßigkeit der Geschichte das Höchste, das ein Mensch besitzt und das ihn über jede andere Kreatur erhöht, nämlich den freien Willen, preisgibt, die Freiheit des Menschen preisgibt, selbst mit einzugreifen in das Rad der Geschichte und es seiner vernünftigen Entscheidung unterzuordnen – wenn die Deutschen, so jeder Individualität bar, schon so sehr zur geistlosen und feigen Masse geworden sind, dann, ja dann verdienen sie den Untergang.

Weiterlesen

Ein neues (altes) Projekt veröffentlicht

Nach mehreren Jahren Arbeit (nebenbei immer wieder ein bißchen) und einer langen familiär bedingten Pause, ist mein LoGD-Server Miharu Wars nun bereit, der Öffentlichkeit übergeben zu werden. Neuigkeiten gibt es immer wieder im dazugehörigen Blog.

Viel Spaß beim Spielen in einer für LoGD recht ungewöhnlichen Welt …

Reading-Liste für Java — oder: worüber ich eigentlich noch bloggen will …

Michael Sharhag hat einen schönen zusammenfassenden Artikel über die Nutzung der Java 8 java.time API geschrieben. Den will ich euch nicht vorenthalten.

Qualifier sind bei Dependency Injection sehr wichtig. Daher ist auch der von Pivotal veröffentlichte Blogbeitrag sehr interessant.

Seit Java 7 gibt es das ServiceLoader-Interface. Eine sehr interessante Sache. Kann man eigentlich öfter verwenden, als man denkt …

Dependency Injection – Konstruktor oder Property?

Dependency Injection hat sich durchgesetzt. Das muss also nicht mehr diskutiert werden. Es gibt zwar noch alte Projekte, die anders arbeiten (davon gibt es massig, denn auch in der Vergangenheit waren wir Programmierer ja nicht faul sondern haben Software geschrieben) – aber neuere Entwicklungen kommen selten ohne aus.

Leider gibt es noch oft Diskussionen, ob die DI via Property (also Setter-Methoden) oder den Konstruktor gehen soll. In den meisten Softwareprojekten sieht man ausschließlich Property-Injection (also einen Default-Konstruktor sowie ganz viele Setter). Dabei wird leider eine aus meiner Sicht grundlegende Regel vergessen: nach dem Konstruktor soll das Objekt minimal lauffähig sein. Dass heißt, dass alle verpflichtenden Informationen vorhanden sein müssen.

Oder anders ausgedrückt: in den seltensten Fällen ist ein Default-Konstrutor ausreichend für ein funktionierendes Objekt. Demnach spricht vieles für eine konstruktorbasierte DI.

Aber auch hier greift es zu kurz: der Konstruktor sollte ein minimal lauffähiges Objekt erzeugen. Und einige DI-Dependencies werden hier nicht benötigt. Diese Abhängigkeiten sollen also nicht in den Konstruktor. Und da spricht ja auch nichts dagegen: die absolut notwendigen Abhängigkeiten kommen in den Konstruktor, die optionalen Abhängigkeiten in Properties.

Oft wird angeführt, dass das weit verbreitete (und oft auch von mir genutzte) Spring-Framework keine Konstruktor-DI unterstützen würde oder die Entwickler von Konstruktor-DI abraten würden, aber wie der Blogeintrag http://spring.io/blog/2007/07/11/setter-injection-versus-constructor-injection-and-the-use-of-required/ schon 2007 beschrieb, sehen das unsere  Kollegen von Pivotal auch so wie hier beschrieben.

Voilà, das Problem ist sauber gelöst. Ohne Religionskrieg.

Eine zentrale Meldestelle für staatliche Willkür

Nach den sich immer wiederholenden Berichten rund um Polizeiwillkür (bedauerliche Einzelfälle), die oft sehr fragwürdigen Methoden der ARGEN und natürlich den großen Themen Voratsdatenspeicherung, Totalüberwachung, Geheimdienste, kam mir eine Idee: wenn der Staat zentrale Datenbestände hat, in denen er „Verdächtige“ speichert, warum sollen nicht auch Bürger einen zentralen Datenbestand anlegen, in denen sie Übergriffe sammeln. Ich werde hier ein paar Gedanken veröffentlichen, um weitere Mitstreiter zu finden, die hier unterstützen können.
Weiterlesen