When implementing a JavaEE application, I always question myself whether to base it on a full-blown JavaEE server such as WildFly or use a smaller hosting environment such as Tomcat or Jetty. All have their advantages and disadvantages, for instance the server environment provides many services out of the box whereas a smaller environment requires to set them up manually. However, recently I decided to switch from my default hosting environment WildFly to Jetty, because I often end up in collecting versioning information about every component within a bigger environment. Instead, I want to fully control, which version of a library (e.g. for object relational mapping) I am going to use. This allows for easily up- or downgrading those libraries without considering special configuration options for en- or disabling certain subsystems and environments within a server. Finally, I usually do not need the feature of deploying more than one application on a certain server such that I do not make use of shared services.

Sometimes, it is essential to think about the hashCode() and equals() Methods of JPA entities. Especially, when entities are retrieved again from the database, they might have another identity (i.e. the object reference is different) but contain the same content. However, if you are not using a business key within the equals() method (e.g. use all attributes of an entity), matching existing instances may be cumbersome.
I lately was searching for a bug for about two hours until I found out that I implemented equals() wrong: instead of using the fields of the business key of my entity, I used all fields. A JSF page which populated these fields with values, however, also wrote some values of type Date containing date and time values and compared them against entity instances freshly retrieved from the database - which only contained dates and not time values. I have no clue why the date and time converter function of JSF did give my both values or whether the JPA implementation did not follow the specification of retrieving only date values from the database; but implementing equals() in a right way (containing only fields of the business key) did the trick.

Lateley, I had to use the Primefaces PanelGrid component. While the component itself is really powerful, I ran into some misunderstandings when reading the documentation and applying the knowledge learned. It seems to me, that specifying a value for the columns attribute of the panelGrid tag interferes with a custom definition of the rows and columns (even the number of columns explicitly specified matches that mentioned in the columns tag). Moreover, spanning columns and rows seems only possible to me, if the columns attribute is missing within the tag.

While working on a server independent web application on the JavaEE plattform, I encountered the problem of setting up logging in a server independent way. While there exist many logging frameworks, the challenge is to integrate a logging framework with the logging capabilities of the different plattforms. This article describes my approach for solving this issue and which is based on WildFly (9), Arquillian for unit testing and a custom configuration for the logging subsystem within WildFly. To make things easier, I wrote a Maven profile reflecting my setup.

...continue reading "Maven Profile: WildFly 9 with Arquillian and Custom Configuration"

Zutaten (für zwei Personen)

  • Zwei Putenschnitzel
  • Zucchini (Menge nach individueller Verträglichkeit von Fruktose)
  • Reis
  • Ein Becher Sahne für die Soße
  • Salz, Pfeffer, Kümmel
  • Weitere Gewürze (z.B. Kräuter der Provence) nach Geschmack

Zubereitung

Die Zucchini würfeln und mit Wasser vorkochen. Den Reis kochen und in einem Sieb abtropfen lassen. Je nach Geschmack dem Reis etwas Butter bzw. dem Kochwasser etwas Salz hinzugeben. Das Putenfleisch waschen und in Streifen schneiden und mit etwas Öl in einer Pfanne je nach Geschmack mehr oder minder stark anbraten. Die gekochten Zucchiniwürfel hinzugeben und kurz zusammen mit dem Fleisch braten. Danach die Sahne hinzufügen und mit Salz, Pfeffer, Kümmel und den Gewürzen abschmecken. Zusammen mit Reis servieren.

Often, the root partition of a Linux systems turns out to be too small. Especially when the root partition is set up using the Linux Logical Volume Manager (LVM), this turns out to be a tedious task. Thus, I decided to write this short tutorial on how to extend a LVM root partition.

...continue reading "HowTo: Extend LVM Root Partition in CentOS 7"

The SQL Server Data Tool Business Intelligence currently cannot be installed on Windows 10 (x64) standalone. While a common workaround is to first install Visual Studio 2013 and then SSDT-BI on top, it results in a much larger installation than the standalone installation. Even though disk space is rather cheap nowadays, it is no option in case you don’t need the full Visual Studio.
It took me a certain time to find a better suited workaround than the one mentioned above. The following descriptions detail my steps.

...continue reading "HowTo: Install SSDT-BI on Windows 10 (x64)"

Aktuell muss ich mich im Rahmen eines Projekts mit dem Thema „Internationalisierung“ im Kontext von JSF und MySQL auseinander setzen. Was anfangs noch relativ einfach aussieht, kann schnell in viel Arbeit ausarten. So muss nicht nur die Datenbank (MySQL) entsprechend parametrisiert werden um UTF-8 codierte Zeichenketten verwalten zu können, sondern zudem über Zeitzoneninformationen verfügen. Sonst kann es schnell passieren, dass Server (Datenbank) und Client (Webanwendung) in unterschiedlichen Zeitzonen landen und eine Konvertierung von Zeitstempeln und Datumsangaben ausgeführt wird. Diese kann dann dazu führen, dass z.B. ein Geburtsdatum je nach eingestellter Zeitzone um einen Tag „verjüngt“ oder „älter“ gemacht wird. Es ist daher mehr als nur sinnvoll, dafür Sorge zu tragen, dass sowohl Datenbank als auch daran angeschlossene Clients die gleiche Zeitzone „sprechen“.

Im Fall von MySQL bedeutet dies, Tabellen mit Informationen über Zeitzonen zu erstellen. Während dies z.B. unter Linux mit Hilfe eines beigelegten Skripts gelingt, muss man unter Windows diese Tabellen von der MySQL-Webseite herunterladen und manuell installieren. Dabei ist darauf zu achten, dass man die Tabellen in das richtige MySQL-Verzeichnis auf der Platte schiebt (üblicherweise C:\ProgramData und nicht C:\Programme).

Zudem ist es nicht ausreichend, für jede Tabelle die Collation auf „utf8“ einzustellen. Zusätzlich sollte man dem Server-Prozess selbst in der Datei mysql.ini durch Setzen der Parameter character-set-filesystem und character-set-server auf den Wert „utf8“ mitteilen, dass dieser UTF-8 verwendet.

Zusammen mit einer neuen Version des Mobilbetriebssystem iOS gibt Apple zumeist auch eine neue Version seiner Entwicklungsumgebung Xcode heraus. Zum diesjährigen Launch von iOS 8 folgte dementsprechend eine neue Xcode Version, welche die Unterstützung für iOS 8 Geräte über einen entsprechenden SDK enthält. Allerdings hat mit dieser Version der Entwicklungsumgebung auch eine neue Programmiersprache (nicht nur) für iOS Apps offiziell das Licht der Welt (d.h. die offizielle Freigabe) erblickt: Swift.

Mittels Swift soll die Entwicklung von Apps für die mobilen Endgeräte von Apple deutlich vereinfacht werden. War früher die Entwicklung von Apps eng an die in die Jahre gekommene Programmiersprache Objective-C gekoppelt, ist mittels Swift nun eine neue, offiziell von Apple unterstützte Sprache für die App Entwicklung verfügbar.

Zeit, sich die iOS Programmierung mittels dieser neuen Sprache anzusehen ...

Gestern Abend wurde im ZDF der Film "App" als einer der ersten (oder der erste?) mit zusätzlichen Inhalten für das Smartphone ausgestrahlt. Zu bestimmten Zeitpunkten im Film wurden dem Zuschauer auf einem "zweiten Bildschirm" - eben das Smartphone - zusätzliche Informationen über die Handlung vorgeführt, welche nicht im regulären Film enthalten sind. So wurden beispielsweise kleinere Zwischensequenzen oder Nachrichten der Protagonisten eingespielt.
...continue reading "Second Screen: Fernsehen der Zukunft?"