continuous-integration

Nie wieder Monolithen! Micro Services in der Praxis.

Bei der Hypoport AG haben wir bereits drei verschiedene Modularisierungsinkarnationen erlebt. Jede Inkarnation brachte uns näher an das Ideal einer flexiblen, wartbaren Architektur. Und dennoch stellten wir nach wenigen Jahren der Produktweiterentwicklung wieder fest: Die Anwendung ist voll von unbeabsichtigter Komplexität, Innovationen sind nur schwer möglich und die Umsetzung von Funktionalität dauerte kontinuierlich länger. Der Micro-Service-Architekturstil verheißt durch die Zerlegung eines Systems in kleine, unabhängige Services nachhaltige Besserung. Wir haben’s ausprobiert und sind begeistert.

  • ghostadmin
java

Update zur JavaOne und zu EE 7

Am 29.11. waren Wolfgang Weigend und Peter Doschkinow von Oracle im Rahmen einer JUG Veranstaltung bei uns. Sie haben Neues von der JavaOne und zu Java EE 7 berichtet. In den Folien von Wolfgang finden sich Details zum Java Community Process, zum Status von Java 7 und zur Roadmap von Java 8+. Peters Folien führen unter anderem aus, warum der Fokus von Java EE 7 geändert wurde. Der Schwerpunkt hat sich von PaaS in Richtung HTML5 Features verschoben.

gpars

Dierk König spricht bei uns über GPars

Gemeinsam mit der Java User Group Berlin-Brandenburg präsentieren wir am 16.10.2012 einen Vortrag von Dierk König zum Thema: „GPars – Parallele Programmierung für Dich und mich“ Seit jeher bietet die Java platform gute Unterstützung für die nebenläufige Programmierung. Die Bordmittel für multithreading und Synchronisation haben aber ihre Tücken. Dierk König stellt daher zusätzliche Konzepte für den vereinfachten Umgang mit Nebenläufigkeit vor: fork/join, map/reduce, Aktoren, Agenten und Datenflüsse. Der Beispielcode wird mit GPars vorgeführt, Groovys Standardbibliothek für Nebenläufigkeit.

dumbster

Verwendung eines SMTP-Servers in Unit-Tests

Im Rahmen von Unit-Tests möchte man die Anbindung externer Systeme vermeiden um Stabilität der Tests zu gewährleisten. Leider hat man genau dann Probleme, wenn man gerade diese Anbindung oder die Integration mit externen Systemen testen möchte. Für solche Unit-Test mit integrativem Charakter kann man Mocks verwenden, die recht spezifisch für den jeweiligen Anwendungsfall selbst implementiert werden. Wenn es allerdings an die Implementierung eines Mail-Server Mocks geht, ist der Aufwand der Eigenimplementierung oft nicht mehr gerechtfertigt.

automatisches-tests

Unit- und Integration-Test eines MicroService mit Maven

Was ist ein MicroService? In unserem Kontext ist es ein (kleines) Modul der Gesamtanwendung, welches seinen Dienst als Webapplikation (.war) anbietet. Das konkrete Schnittstellen-Protokoll ist für diesen Artikel nicht entscheidend. Möglich ist klassisch SOAP, REST aber auch Spring HttpInvoker. Ein MicroService ist eine gute Möglichkeit Sollbruchstellen in die Gesamtanwendung einzubauen. Nun zum eigentlichen Thema: Wie teste ich einen solchen Service? Im Grunde wie immer, d.h. viele Unit-Tests und ein paar ausgewählte Integration-Tests.

  • leif
    leif
architecture

Oliver Gierke von SpringSource kommt am 14. Juni 2012 nach Berlin

Gemeinsam mit der Java Usergroup Berlin-Brandenburg präsentieren wir am 14. Juni den Vortrag von Oliver Gierke Huch, wo ist meine Architektur hin?. Einlaß und Zeit für Networking startet ab 18:30 Uhr. Der Vortrag beginnt um 19:00 Uhr. Vortrag Wenn Applikationen über eine bestimme Größe oder einen bestimmten Zeitraum hinaus wachsen wird Modularität ein Kernaspekt für Wartbarkeit. Designentscheidungen die getroffen wurden sind kaum noch im Code wiederzufinden, Abhängigkeiten zwischen einzelnen Modulen der Applikation wachsen oft wild.

  • leif
    leif
debugging

Nie mehr ohne JSON Serializer

JSON Serializer in Debugging Session verwenden Welcher Java Entwickler kennt es nicht: Nach einigen konzentrierten Versuchen hat die Programmausführung endlich an exakt der richtigen Stelle angehalten. Alle Daten sind im kleinen Debugging Fenster erreichbar. Schade nur, das meine IDE keine Möglichkeit bietet, den riesigen Objektgraphen nach meinem relevanten Eintrag zu durchsuchen. Oder per EMail an die Fachabteilung zu verschicken. Dabei ginge das sehr einfach: Mit einem auf reflection basierenden Objekt-Serialisierer. Dieser erzeugt ohne vorherige Konfiguration aus einem beliebig tiefen Objektgraphen einen String z.

aspectj

Sonar Analyse eines Maven Projektes mit Cobertura und AspectJ

Wir verwenden unter anderem Sonar, um unsere Codequalität zu analysieren. Sonar bietet viel Spannendes. Interessant ist auch die Analyse der Testabdeckung. Hierzu kann man Cobertura verwenden. Im Zusammenspiel mit einem Projekt, welches AspectJ einsetzt kann es zu Problemen kommen, wenn man versucht das Kompilieren der Anwendung mit der Sonar-Analyse zu kombinieren. mvn clean install sonar:sonar -Dmaven.test.failure.ignore=true Die Lösung liegt wie so oft in RTFM. Der empfohlene Weg eine Sonar-Analyse durchzuführen ist es zuerst die Anwendung zu bauen und danach die Analyse zu starten.

  • leif
    leif
bed

Berlin Expert Days mit 4 Vorträgen unserer Mitarbeiter

Die Berlin Expert Days 2012 haben ein sehr interessantes Programm. Neben bekannten Speakern erhalten auch weniger bekannte Speaker die Gelegenheit sich und Ihre Erfahrungen zu präsentieren. U.a. gibt es 4 Vorträge von Hypoport Mitarbeitern: Continuous Delivery in der Praxis – 7+ Lektionen von Jörg Müller Inversion of Flow von Arne Burmeister Modularisierung wagen: warum es sich lohnt, diesen Weg einzuschlagen (und wie man unterwegs überlebt) von Ansgar Konermann, Jacob Fahrenkrug MongoDB für Java Entwickler und Architekten – Schema Evolution und Maintenance: Was wurde uns am Anfang verschwiegen?

  • leif
    leif
certificate

Java SSL-Konfiguration mit Keystores

Hier wird das Erstellen eines lokalen Keystores mit self signed certificate für einen Tomcat und Java-Clients beschrieben. Die Inhalte sind größtenteils aus einer externen Quelle übernommen und darüber hinaus durch weitere Details ergänzt. Im Rahmen dieses Artikels werden diverse Dateien erzeugt, die für die Erzeugung eines Java-Keystores mit selbst-signierten Zertifikaten verwendet werden. Mit einem durch eine offizielle Certificate Authority (CA) signierten Zertifikat sind einige Schritte nicht notwendig. Erstellen des lokalen Keystores für den Tomcat

cleancode

@Mock unused variable mit IntelliJ IDEA kein Problem

Ich bin froh, dass IntelliJ IDEA die Standard IDE bei uns ist. Hier ein kleines Beispiel wie flexibel – manche nennen es intelligent – IntelliJ ist:) Die Inspection unused variable warnt vor unbenutzten Variablen. Nach CleanCode lösche ich solche Variablen sehr gerne sehr schnell. Problematisch wird dies wenn man z.B. @Mock von Mockito oder @Resource von Spring verwendet. Was diese Annotationen inhaltlich machen gibt es ein anderes Mal. Für jetzt ist interessant, dass eine mit @Mock annotierte Variable nicht weiter im Code verwendet wird.

  • leif
    leif
java

Eine Migration auf SLF4J und Logback lohnt sich!

Bisher haben wir (Team emma) log4j eingesetzt. Es ist meines Erachtens derzeit der Standard wenn es ums Logging in Java Anwendungen geht. Es tut was es soll und das gut. Warum also wechseln? Wie so oft sind es die Kleinigkeiten, die den Unterschied ausmachen. SLF4J Die Simple Logging Facade for Java kurz SLF4J ist eine Logging Facade für diverse Logging Frameworks, wie java.util.logging, log4j und logback. Warum der Einsatz von SLF4J sinnvoll ist wird u.

  • leif
    leif
brett-schuchert

Brett Schuchert's Talk

Letzten Donnerstag hatten wir die Gelegenheit die Java-User-Group Berlin Brandenburg zu einem Talk mit Brett Schuchert einzuladen. Brett war bei uns im Rahmen eines 4-tägigen internen Kurses zu Entwicklungsprinzipien. Er hatte sich dankenswerter Weise bereit erklärt, nicht nur für uns, sondern auch öffentlich noch eine Abendveranstaltung zu machen. Als Thema wählten wir „Working effectively with Legacy Code“ (siehe Ankündigung). Das gleichnamige Buch seines Kollegen Michael Feathers ist übrigens sehr empfehlenswert.

eai

Eigener ESB, andere ESBs oder einfach Spring Integration?

Bei Hypoport haben wir seit Jahren einen selbst entwickelten ESB im Einsatz. In unserem Team haben wir wenig KnowHow diesen zu nutzen und anzupassen. Die Anbindung und Erweiterung von externen Schnittstellen fällt daher nicht leicht. Erschwerend kommt hinzu, dass die Integration Flows nicht durch unser Continuous Delivery Skript automatisiert ausgerollt werden können. Wir standen vor der Entscheidung uns intensiv in diesen ESB einzuarbeiten oder es mit einer anderen Integrationslösung zu versuchen.

  • leif
    leif
Working effectively with legacy code
brett-schuchert

Working effectively with legacy code

Die JUG Berlin-Brandenburg und die Hypoport AG laden euch herzlich am 10.11.2011 von 19 bis ca. 22 Uhr zu unserer Veranstaltung „WORKING EFFECTIVELY WITH LEGACY CODE“ mit Brett Schuchert einladen. Brett ist ein ObjectMentor, ebenso wie dies Uncle Bob (Clean Code) ist. Zum Inhalt: Michael Feathers (ebenfalls ein ObjectMentor) defines legacy code as code lacking automated checks. You cannot simply change it without risking breaking something. If the code were not yet deployed, that might not be too painful but since we are talking about legacy code, it’s probably already deployed so we have to tread carefully.

  • leif
    leif
Java User Group am 12.10. - Folien und weitere Infos
event

Java User Group am 12.10. - Folien und weitere Infos

Die Veranstaltung der Java User Group Berlin-Brandenburg am 12.10. unter dem Titel „Fighting Layout Bugs“ bescherte uns wieder ein volles Haus. Der Vortrag von Michael Tamm enthielt viele durchaus überraschende Ideen, wie man Layout Probleme automatisiert finden kann. Das Ganze lässt sich noch mal in seinen Folien nachlesen: Weitere Informationen zu Michaels Projekt finden sich unter http://fighting-layout-bugs.googlecode.com sowie http://selenium.googlecode.com. Wir hatten außerdem die Gelegenheit, im Namen der Java User Group eine Karte zur WJAX im November zu verlosen.

java

Lessons learned - Der DelegatingFilterProxy von Spring

Wenn man einen ServletFilter für die eigene Webapp baut, dann muss man drei Methoden des Interfaces implementieren: init(), doFilter() und destroy(). Der Filter wird danach in die web.xml aufgenommen und startet zusammen mit der Webapp, wobei beim Starten des Filters seine init()-Methode aufgerufen wird. So weit die Theorie. Spring ermöglicht es, Filter im ApplicationContext zu definieren und ihnen damit Zugriff auf andere Beans zu bieten. Über die Namenskonvention Filtername == BeanId wird nun nicht mehr die Filterklasse in der web.

automatisches-tests

JUG BB am 12.10. - Fighting Layout Bugs

Am Mittwoch 12.10. wird Michael Tamm bei uns in der Klosterstrasse 71 einen spannenden Vortrag zum Thema „Fighting Layout Bugs“ halten. Um was geht’s in dem Vortrag: Für die „normale“ Programmierung gibt es Unit Tests. Aber wie können automatische Tests für die Arbeit von HMTL- und CSS-Programmierern aussehen? Wie kann man sicherstellen, dass jede Webseite so aussieht, wie es sich der Designer vorgestellt hat? Wie können automatische Tests für Layoutfehler aussehen?

  • leif
    leif