Neue JRebel Lizenz – weiterhin keine Redeployments mehr

Meine einjährige „JRebel Personal Lizenz“ (kostete 156 Dollar) läuft jetzt im Dezember ab und staunend musste ich feststellen, dass die Lizenz abgeschafft wurde und Zeroturnaround stattdessen die „JRebel Base Lizenz“ für 265 Dollar (+ 20% Steuern) anbietet. Eine Verlängerung der Lizenz wollte ich mir nach der erheblichen Preiserhöhung noch überlegen, aber als Besitzer einer „JRebel Personal Lizenz“ bekommt man von Zeroturnaround eine ermäßigte „JRebel Base Lizenz“ für 154 Dollar (+ 20% Steuern) – da musste ich natürlich gleich zuschlagen.

Wer JRebel nicht kennt, fragt sich sicherlich: „Warum gibt ein Java-Entwickler für Entwicklungswerkzeuge heutzutage noch Geld aus?“. Wir haben doch schon so viele gute kostenlose Frameworks, Werkzeuge und Servers: Spring, Eclipse, Git, Jenkins, Tomcat, JBoss usw.

JRebel: Vergleich mit JVM Hot Swap

JRebel: Vergleich mit JVM Hot Swap (Quelle: Zeroturnaround)

JRebel bietet nach der Vergleichsmatrix offenbar einige Features, für die Entwickler auch gerne bezahlen. Doch was bedeutet JRebel für den Alltag eines Java-Entwicklers? Weiterlesen

Advertisements

CloudBees – Continuous Integration & Delivery leicht gemacht

Wenn man als SW-Entwickler eine kleine Webanwendung für Freunde, Kollegen oder die ganze Menschheit bereitstellen möchte, müssen oft einige Herausforderungen gemeistert werden. Das eigentliche Programmieren der Anwendung geht vielleicht noch recht problemlos. Aber es entsteht ja leider noch allerhand weiterer Aufwand, um beispielsweise die benötigte Infrastruktur zu installieren:

  • Verwendung einer Quellcodeverwaltung (z.B. Git)
  • Installation einer Datenbank (z.B. MySQL, PostgreSQL)
  • Ausführen von Entwickler-Tests (z.B. mit Ant oder Maven)
  • Bauen der Anwendung (z.B. mit Ant oder Maven)
  • Bereitstellung der Anwendung auf einem Server (z.B. mit ssh-Skripte)
  • Testen der bereitgestellten Anwendung (z.B. manuell durch den Entwickler)

Sobald wir öfters neue Anforderungen oder Bugfixes ausliefern müssen, sollten wir diese Schritte nicht mehr manuell durchführen sondern automatisiert haben. Das Zauberwort heißt hier natürlich Continuous Integration und falls wir fehlerfreie Software auch gleich deployen, sind wir schon bei Continuous Delivery. Der CI-Server Jenkins (vormals Hudson) leistet dabei gute Dienste. Den müssen wir uns noch nicht einmal selber installieren, sondern wir bekommen ihn als Platform as a Service (PaaS) von CloudBees bereitgestellt. Dazu liefert uns CloudBees auch alle weiteren Werkzeuge, sodass Continuous Delivery problemlos realisierbar ist:

CloudBees: Continuous Cloud Delivery

Weiterlesen

Test-Driven-Development (TDD) mit den passenden Eclipse-Plugins

Die Entwicklungsumgebung Eclipse bietet für das Testen mit JUnit die JUnit-View. Um allerdings testgetrieben entwickeln zu können (Test-Driven-Development – TDD)  ist das etwas wenig. Jeder Entwickler, der es mit TDD ernst meint, sollte sich für effektives testgetriebenes Entwickeln (und mehr Spaß 😉 ) weitere Eclipse-Plugins installieren.

Während ich schon seit vielen Jahren die Plugins MoreUnit und EclEmma einsetze, habe ich erst vor kurzem bei der Java-User-Group Bremen (XING – JUG Bremen) das Plugin Infinitest kennengelernt. Was machen diese Plugins denn Schönes?

  • MoreUnit: Tests + Testmethoden anlegen und einfaches Wechseln zwischen Produktionscode und Testcode
  • Infinitest: kontinuierliches Ausführen der Tests im Hintergrund mit Testergebnis-Anzeige (rot / grün)
  • EclEmma: Überprüfung der Testabdeckung

Mit installierten Plugins können wir uns über viele zusätzliche nützliche UI-Elemente freuen und unser Eclipse sieht dann etwa folgendermaßen aus:

Editor mit einer "Klasse unter Test"

Editor mit einer „Klasse unter Test“

Weiterlesen

Migration der Konfigurationsdateien des m2e-Plugins (Maven Integration for Eclipse)

Mit dem Eclipse-Plugin m2e (m2eclipse) ‚Maven Integration for Eclipse‘ kann man innerhalb von Eclipse die Mächtigkeit von Maven nutzen. Das Plugin ist mit der 1er-Version von Sonartype zu Eclipse umgezogen, wobei vorhandene Konfigurationen nach dem alten Plugin mit der neuen Plugin-Version nicht mehr funktionieren.

Wenn wir ein bestehendes Projekt mit der Konfiguration nach dem alten Plugin haben, müssen wir nur ein paar Einträge in den Eclipse-Konfigurationsdateien ändern, damit das Projekt mit dem neuen Eclipse-Plugin wieder funktioniert. Die folgenden Anpassungen habe ich mit Eclipse Indigo und der m2e-Version 1.0.100.20110804-1717 ausprobiert.

Zunächst müssen wir die .project-Datei anpassen. Dort müssen wir erst einmal den Nature-Eintrag von

<nature>org.maven.ide.eclipse.maven2Nature</nature>

auf

<nature>org.eclipse.m2e.core.maven2Nature</nature>

ändern, damit das Projekt als m2e-Projekt erkannt wird. Dann müssen wir noch den Builder-Eintrag von

<buildCommand>
   <name>org.maven.ide.eclipse.maven2Builder</name>
   <arguments>
   </arguments>
</buildCommand>

auf

<buildCommand>
   <name>org.eclipse.m2e.core.maven2Builder</name>
   <arguments>
   </arguments>
</buildCommand>

anpassen, sodass der korrekte Builder beim Erstellen des Projekts genutzt wird. Damit sollten alle m2e-Funktionalitäten im Eclipse-Projekt wieder verfügbar sein. Allerdings compiliert das Projekt vielleicht noch nicht.

Wir müssen in der .classpath-Datei noch den Eintrag für die Variable MAVEN2_CLASSPATH_CONTAINER anpassen, damit die Java-Librarys von Maven auch eingebunden werden. Dafür ändern wir die Zeile

<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>

auf

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"/>

um. Jetzt sollte in der ‚Package Explorer‘-View ein Library-Eintrag „Maven Dependencies“ mit den entsprechenden Java-Librarys vorhanden sein und das Projekt ohne Fehler compilieren.

Es gibt übrigens hier ein kostenloses Online-Buch zu m2e von Sonartype, das allerhand Tipps im Umgang mit dem m2e-Plugin bietet.

Starten von Android-Apps mit Intents

In diesem Jahr finden zum ersten Mal die Wettbewerbe Apps4Bremen und dessen großer Bruder Apps4Deutschland statt, die unter anderem Entwickler dazu aufrufen, auf Basis von öffentlichen Daten funktionsfähige Visualisierungen oder Web- und Handy-Anwendungen (Apps) zu entwickeln. Ich habe mir vorgenommen, mit einer Handy-App für Android-Systeme an dem Wettbewerb teilzunehmen.

Das Auswerten und Anzeigen von Daten innerhalb einer Handy-Anwendung kann ja alleine schon hilfreich sein. Echte Praxistauglichkeit beweist eine App jedoch damit, dass sie sich in das Handy-Benutzungskonzept integriert. So können beispielsweise aus einer Handy-App die Funktionen anderer Apps aufgerufen und genutzt werden. Das bietet sowohl für den Entwickler als auch für den Anwender Vorteile:

  • Entwickler müssen keine Zeit in die Entwicklung von Funkionen investieren, die andere Programme bereits bieten
  • Anwender werden für einen Einsatzzweck stets das gleiche bekannte Programm nutzen

In diesem Artikel stelle ich einige Code-Beispiele vor, mit welchen Aufrufen sich andere Android-Apps starten lassen. Die kleine Beispielanwendung ist bei Github verfügbar. Folgende Funktionen/Anwendungen werden vorgestellt (der Unterschied zwischen den Aufrufen besteht lediglich aus einer Zeile Programmcode): Telefonanruf starten, SMS verschicken, Webseite öffnen, Bild aufnehmen, Kontakte öffnen, Karte anzeigen und Navigation starten

Weiterlesen

Tomcat-Verzeichnisse der Webapps konfigurieren

Obwohl ich schon seit vielen Jahren beruflich mit dem Tomcat-Server entwickle, hat sich jetzt eine Anforderung ergeben, die ich so zuvor noch nie hatte. Und zwar soll der Tomcat-Server statische Inhalte und Inhalte unterschiedlicher Web-Anwendungen in einer ganz bestimmten Verzeichnisstruktur wiedergeben:

Hauptseite der Anwendung http://domain.de
Unterkategorie ‚Beispiel‘ http://domain.de/example
erstes Beispiel http://domain.de/example/example-1
zweites Beispiel http://domain.de/example/example-2

In anderen Projekten haben wir zumeist unsere entwickelte Webanwendung im webapps-Verzeichnis deployt und jegliche Verzeichnis-Anforderungen mit einem vorgeschalteten Apache-Server erledigt. Diesmal sollte jedoch weitere technische Infrastruktur vermieden werden, sodass kein Apache in Frage kam. Weiterlesen