Hints and tricks for developers

Martins Amazon Wunschliste

Sonar Postgresql 30. January 2015

Do you want to use Sonar with postgresql?
Then read the following articel.

This can be very handy if you want to use the maven sonar pluging.
All results of the scan will be stored to this DB.

No Comments on Sonar Postgresql
Categories: Uncategorized

Continuous delivery 29. January 2015


  • XXX-build (executes test and builds the current snpashot
  • XXX-deploy (creates a package and deploys it to nexus)
  • XXX-deliver (deploys the release-package to test-server)


  • Executes the JUnit Tests.
  • Perform Sonar checks.
  • creates an snapshot-package.
  • deploys the snapshot-package to nexus.

This Job is executed on every commit.
The time leak is 5 mins.

The build can be executed manually by pushing the “Jetzt bauen”-Button



skips the JUnit-Tests.
Skkps the Sonar checks.
creates an release package.
deploys the release-package to nexus.

This Job is executed by pushing the “Perform Maven Release”-Button.
Hudson screenshot



The Hudson/Jenkins server executes a script over ssh that downloads the latest release package and restart the server. The script itself just executes a Java-Program that does all the nasty work.

  • determin the package version of the artifact
  • downloads the artifact to filesystem (e.g. /srv/stage/mywebapp.war
  • deploys the webapp in the Applicationserver

This Job has to be executed manually in Jenkins.

version overview

You should inform yourself about the current Versions.
It’s a good idea to do this before an after the deivery of your software.

Bildschirmfoto 2015-01-29 um 07.01.04

test overview

You should inform yourself about the current Versions.
testergebnisseIt’s a good idea to do this before an after the deivery of your software

No Comments on Continuous delivery
Categories: Uncategorized

log4j – where are my logs?

Create a Servlet that shows you the log4j-configuration

String configurationOptionStr = OptionConverter.getSystemProperty(
String configuratorClassName = OptionConverter.getSystemProperty(
writer.write("configurationOptionStr:" +configurationOptionStr+"n");
writer.write("configuratorClassName:" +configuratorClassName+"n");
No Comments on log4j – where are my logs?
Tags: ,
Categories: Java

Apache maven is searching in the wrong repository.

But it should point to

If you call with a browser you will be redirected to .
But other programs can’t follow the redirect.
In my case it was maven itself who wanted to download a plugin.

To fix this issue you have got to patch a dowanloaded jar.

The file you got to fix is called pom-4.0.0.xml.
It’S location $M2_HOME/lib/maven-model-builder-3.0.3.jar:org/apache/maven/model/pom-4.0.0.xml


      Central Repository

      Central Repository

No Comments on
Categories: Java Maven

Suspend uncaugth Exception 28. January 2015

Problem desciption

While debugging a webapp with eclipse and java. Nothing special happens but the IDE jumps in the debugging mode.


An uncaught exception has occured.


Uncheck the Suspend on uncaught Exceptions flag.

No Comments on Suspend uncaugth Exception
Categories: Uncategorized

Nexus – Performing a Release Build

Installing the m2release Plugin


Performing a Release Build

Hudson screenshot

Other option to perform an release-build

  • alternaviv :
No Comments on Nexus – Performing a Release Build
Categories: Uncategorized

jqueryui icons in pdf 24. January 2015

We are using the jqueryui icons in our webapp.
We also generate pdfs to create a printable document that fits our needs.
This post describes how tho add the icons in general.
Later we will provide a java sample by using iText

The jqueryui icons are organized in a ui-icons_xxxxxx_256x240.png file
where 2e83ff is the rgb color code in our example ui-icons_2e83ff_256x240.png.



No Comments on jqueryui icons in pdf

Maven and Eclipse

Previous steps to make:

  • Install Maven
  • Install Eclipse (luna)
mvn archetype:generate -DgroupId=org.apache.maven.archetypes 
    -DartifactId=wwsservices -DarchetypeArtifactId=maven-archetype-webapp 

mvn archetype:generate -DgroupId=com.porsche.wwsp 
    -DartifactId=wwsframework -DarchetypeArtifactId=maven-archetype-quickstart 
- src
  - main
    - java
    - resources
    - webapp
  - test
    - java
    - resources

- target

create a maven projekt

A pom.xml-File is created

create eclipse projekt

mvn eclipse:eclipse


Convert to Maven Projekt


Remove legacy build-path entries

No Comments on Maven and Eclipse
Categories: Java Maven

ant task to deploy to nexus

I you want to switch to maven and jenkins, I might happen that you can’t change all
dependies to maven and jenkins.
In my scenario one of the projects was a cobol-project that used a special compiler.
So I used ant to create it.

The following script shows you how to deploy your module to your company’s nexus.

No Comments on ant task to deploy to nexus
Categories: Uncategorized


The Company you work for is developping JEE and PHP Applications?
Many Companies make the mistake by trying to switch to one Programming Language.
But – that simply does not work.

Our approach is to provide guidelines on how to reuse as much as possible for both teams.

You will get following advantages

  • Quicker Application development.
  • Same look and feel of PHP and JEE Applications by reusing the the css – Same user experience
  • Reusage of SQL-Queries
  • Reusage of Javascript
  • Less time spent to solve commen problems. You can spend more time in the development of your business logik.
  • Easy way to reuse code in one Language in by the other

Quicker Application development.

If you use our blueprint you don’t have to start a discussion.
You dont’t need to setup project or a directory structure.
You cant take advantage of our dokumentations.
So you just need to add your parts to it.

Look and Feel

We are using the jQuery-UI-Framework to build user interfaces. It is quite simple to change the look and feel of your app. Just visit and download a theme you like. Thats it your done.
It is not complicated to cusomize the theme.
If you don’t like the theme then build you own.
By using jQuery-UI you get all kinds of ui-components that you can reuse.

  • Datepicker
  • Tabs
  • Autocomplete
  • Buttons
  • and many more

Bildschirmfoto 2015-01-24 um 07.40.10

Reusage of Javascript

Developing Javascript can be very complicated. Developping good Javascript is even more complicated. We are using jQuery to simplyfie the development. Features that are not part of javascript or jQuery are added by jQuery extensions and custom javascript.
If you use our javascript stack you don’t have to worry if the components fit to each other. They are.

Our Sample app.
All examples in this book are based on our sample app. You kann see it in real life at If you want to develop your own app the sample app is a good point to start from. It is an hybrid app wich means it can run in an JEE environment or on an Apache webserver using PHP.


Html_head.php bzw. htm_head.jsp
Navigation_menu.php or naviation_menu.jsp

Single-Page Application?

By reading todays web-development books you have 2 different paradigm.

  • Multi-Page App
  • Single-Page App
  • page.php
  • page.jsp
  • page.js

Reusage of SQL-Queries?

Yes it is defnitively possible.
We are putting all sql queries we use in one xml-File (Queries.xml).
We use the same syntax as hibernate does.

		select * from my_table1
		where x = '1'

If you want to use the query to make a custome select in your favorite dbtool just go ahead und cut-and-paste the query to it and exexute it.

We provide 2 samples to get the query. One in PHP and the otherone ind Java.

preserveWhiteSpace = false;


$xpath = new DOMXPath($doc);

// We starts from the root element
$query = '//hibernate-mapping/sql-query[@name="getAnliegenByKundennummerWithoutSpecifiedOne"]';

$entries = $xpath->query($query);

foreach ($entries as $entry) {
    echo "{$entry->nodeValue}";

Using jquery icons in pdf

You whant to reuse the jquery icons in a pdf?
A post on howto to this ist posted here here

Categories: Uncategorized

Maven repositories

If you work with maven in an enterprise environment you have to deal with multible repositories

1. your local repository
2. the official repository of you enterprise.
3. the repositories in the internet.

Scenario 1

your offical repository is connectect to the internet.
Bildschirmfoto 2015-01-24 um 08.20.52

Scenario 2

your offical respositry has no access to the internet


Normaly you sit behind a firewall.
So you need to configure your settings.xml to use the proxy to access the internet.
In my case I new the user and password.

When you setup a new project or you want to perform a compile maven
downloads …

The central repositories are supportin http and https-urls.
In my case I could not import the certificates…
So I had to configure maven to use the http-urls.

No Comments on Maven repositories
Categories: Uncategorized

Install maven on Mac OS X

  • Download the archiv from apache
  • cd ~/Downloads
  • unzip
  • cd /usr/local
  • sudo mkdir apache-maven
  • sudo mv ~/Downloads/apache-maven-3.3.3 /usr/local/apache-maven
  • cd /Library/Java/JavaVirtualMachines/
  • ls
  • cd ~
  • vi .bash_profile

1.Extract the distribution archive, i.e. apache-maven-3.2.5-bin.tar.gz to the directory you wish to install Maven 3.2.5. These instructions assume you chose /usr/local/apache-maven. The subdirectory apache-maven-3.2.5 will be created from the archive.
In a command terminal, add the M2_HOME environment variable, e.g. export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.5.
Add the M2 environment variable, e.g. export M2=$M2_HOME/bin.
Optional: Add the MAVEN_OPTS environment variable to specify JVM properties, e.g. export MAVEN_OPTS=”-Xms256m -Xmx512m”. This environment variable can be used to supply extra options to Maven.
Add M2 environment variable to your path, e.g. export PATH=$M2:$PATH.
Make sure that JAVA_HOME is set to the location of your JDK, e.g. export JAVA_HOME=/usr/java/jdk1.7.0_51 and that $JAVA_HOME/bin is in your PATH environment variable.
Run mvn –version to verify that it is correctly installed.

To set environmen variable on mac:
/bin/launchctl setenv FOO BAR
echo $FOO

edit the .bach_profile in your home directory

export M2=$M2_HOME/bin
export PATH=$M2:$PATH
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home

Finde out where java is
Use /usr/libexec/java_home -v 1.7 command on a terminal shell to figure out where is your java 1.7 home directory

thats it. you are set up

The local repositoy will be created in following folder:


if you perform

mvn install

install – install the package into the local repository, for use as a dependency in other projects locally

No Comments on Install maven on Mac OS X
Tags: , ,
Categories: Uncategorized

MySql, DB2 und postgresql 20. January 2015

Wie entwickelt und betreibt man eine SQL-Datenbank bzw. ein Datenmodel das
folgende Vorteile bietet.

  • Unterstützung von UTF8. Da die Welt groß ist sollte man alle Schrifzeichen speichern können.
    Meine Kunden betreiben u.a. Sites für Korea und China.
  • Es soll auf verschiedene Datenbanksystemen arbeiten.
    Dadurch erhält man Herstellerunabhängigkeit
    Unabhängigkeit des Betriebsystems.
  • Nach Möglichkeit sollte alle Datenbanken mit den gleichen Tools bedient werden
  • Die Datenbanken sollten eine Unterstüzung für die Programmiersprachen Java und PHP bieten.

Unterstüzung der Programmiersprachen Java und PHP

Warum dies 2 Sprachen? Weil diese Sprachen serverseitig ausgeführt werden und diese
laut RedMonk die wichtigsten Programmiersprachen sind. Top 20.
JavaScript fällt aktuell noch weg, da es aktuell haupsächlich im Browser ausgeührt wird.

  1. Java
  2. JavaScript
  3. PHP

Datenbanken mit den gleichen Tools bedient werde

Die verwendung eines einheitlichen Tools macht sinn. Wir müssen glaube ich nicht weiter darauf eingehen warumg es besser ist ein Tool zu verwenden stat drei.

Warum man sich mit dem Trio beschäftigen sollte.


Wenn man mit dem Internet arbeitet kommt man um diese Datenbank nicht herum.
MySQL läuft auf den gängigen Betriebsystemen. Was mir wichtig war, dass es
auf Windows, Linux und Mac OS X läuft.
Wenn man preisgünstig dynamische Seiten bei einem Provider hosten möchte sollte man php verwenden,
da dies von den Providern unterstützt wird und die Anbindung an MySQL Problemlos funktioniert.


Wird bei den meisten meiner Kunden verwendet.
Dies ist auch die Datenbank mir der ich mich am besten auskenne.
Leider läuft die Datenbank nicht auf meinem Mac.
Die alternative eine Virtuelle Machine zu verwenden war mir zu anstrengend.
Am liebsten arbeite ich mit meinem Macbook-Air. Da ist es für mich extrem wichtig
so wenig Resource wie nötig zu beanspruchen. Deshalb fällt DB2 für den Mac weg.


Läuft auch auf Windows, Linux und Mac OS X.
Hat einen super kleinen Foot-Print.
Die Datentypen sind fast identisch zu DB2.

Wie kann man diese Ziele erreichen

Man sollte sich nach Möglichket auf wenige Datentypen beschränken.
Es gibt Datentypen die sind auf den 3 Datenbanken identisch z.B. BIGINT.
Bei Datenbanken die für bestimmte Datentypen anderen Namen haben arbeitet das Datenbankmanagementsystem wie folgt.
Die allgemeingültigen Datentypen werden in Datentypen umgewandelt die von der
Datenbank unterstützt werden.

Ein paar Tips vorweg

Sie sollten immer nummerische Datentypen als Primärschlüssel einer Tabelle verwenden.
Der Primärschlüssel sollte von der Datebank generiert werden und nicht durch ihr Programm vergeben werden.
So ist auch gewährleistet, dass ein Cluster von Applikationsservern parallel auf die Datenbank opperieren kann.
Es sollte auf den BOOLEAN Datentyp verzichtet werden. Ein Boolean kann entweder true oder false sein.
Es kann passieren, dass diese 2 Ausprägungen nicht mehr ausreichen. Dann haben Sie ein Problem. Besser ist es
CHAR(1) zu nehmen und ‘1’ oder ‘0’ zu speichern. Falls Sie dann dann doch einen andere Ausprägung benötigen dann ist das problemlos möglich (z.B. ‘2’ ).
Verwenden Sie auch nicht INT. Dies kann zu problemen führen wenn Sie INT und BIGINT miteinander vergleichen. Ausserdem ist der Wertebereich eingeschränkt. Mit einem BIGINT sind sie wesentlich flexibler.
Die Zeiten in denen ein INT gegeüber einem BIGINT schnelle waren sind vorbeit. Dies liegt u.a. daran dass die meisten Betriebsysteme heutzutage 64-Bit Systeme sind.
VARCHAR(X) nicht zu klein dimensionieren. Besonders dann wenn sie mit asiatischen Zeichen arbeiten kommt es hierbei zu Problemen. Wenn Sie ein UTF8 Zeichen speichern wollen kann bis zum vierfachen an Zeichen in der Datebank verwendet werden. Wenn Sie auf nummersicher gehen wollen sollten sie die vierfache Länge in der Datenbank zulassen und die GUI bzw. Web-GUI auf die einfache Datenlänge beschränken.

Das Arbeiten mit unicode sollte out-of-the-box funktionieren

dies ist leider nicht der Fall. Die gute Nachricht ist. Das alle 3 Datenbanken dies aber können.
Man muss es nur richtig einstellen.


Wenn Sie eine MySQL-Datenbank anlegen sollten Sie sie mit der richtigen Kollation anlegen.
Es werden verschieden Kollationen angeboten die einzige die mir sinnvoll erscheint ist dabei utf8_unicode_ci.

Wenn Sie Java-basierte tools zur Entwicklung verwenden müssen Sie im Connection String mitteilen, dass
die Datenbank die sie verwenden UTF8 verwendet.

Bei mysql muss unbeding folgender Parameter mitgegeben werden.


Danach kann man die SQL-Statements wie gewohnt laufen lassen.


Bei DB2 kommt es darauf an mit welchem Zeichensatz die Datebank angelegt wurde. Achten Sie bei der Anlage darauf das dies geschehen ist. Sollten Sie eine leere Datebank im falschen Zeichensatz erhalten (z.B. ASCII) dann tauschen Sie diese sofort gegen eine UTF8 Datenbank ein. Bei einem unserer früheren Kunden war die Datenbank im falschen Zeichensatz. Dies lag daran, dass die Datebank sehr alt war (über 15 Jahre) und damals noch keiner an UTF8 gedacht hatte. Die Datenbank war für den Europäischen und amerikanischen Markt konzipiert. Durch diese Tatsache mussten wir ein paar Tricks anwenden um die Daten dennoch zu speichern. Leider war eine Migration auf UTF8 auch nicht möglich, da zu viele Programme auf diese wichtige und sehr große Datenbank zugegriffen haben. Eine Umstellung ist und war wirtschaflich nicht möglich.

Bei DB2-Datenbanken sollte der Connection Strig wie folgt aussehen.


Dies bringt den Vorteil, dass Fehlermeldung nicht mit kryptischen Codes ausgegeben werden, sondern eine sprechende Fehlermeldung angezeigt werden.



Im folgenden Beispiel existieren folgende Verzeichnisse
C:\Daten\pgsql in diesem Verzeichnis ist das DBMS installiert.
c:\Daten\pgsql-data leerer Ordner indem die Daten der Datebank die wir anlegen abgelegt werden soll.

Anlegen der Dateban psql-data
C:\Daten\pgsql\bin> initdb -D c:\Daten\pgsql-data - E UTF

C:\Daten\pgsql\bin>postgres -D c:\Daten\pgsql-data
LOG:  Datenbanksystem wurde am 2014-10-17 14:00:53 CEST heruntergefahren
LOG:  Datenbanksystem ist bereit, um Verbindungen anzunehmen
LOG:  Autovacuum-Launcher startet

Verbindung mit user ohne Passwd

C:\Daten\pgsql\bin>psql -l
                                        Liste der Datenbanken
   Name    | Eigent³mer | Kodierung |    Sortierfolge     |     Zeichentyp      | Zugriffsprivilegien
 postgres  | x115293    | UTF8      | German_Germany.1252 | German_Germany.1252 |
 template0 | x115293    | UTF8      | German_Germany.1252 | German_Germany.1252 | =c/x115293         +
           |            |           |                     |                     | x115293=CTc/x115293
 template1 | x115293    | UTF8      | German_Germany.1252 | German_Germany.1252 | =c/x115293         +
           |            |           |                     |                     | x115293=CTc/x115293
(3 Zeilen)

PostgreSQL has the data types smallserial, serial and bigserial; these are not true types, but merely a notational convenience for creating unique identifier columns. These are similar to AUTO_INCREMENT property supported by some other databases.
If you wish a serial column to have a unique constraint or be a primary key, it must now be specified, just like any other data type.
The type name serial create integer columns. The type name bigserial create a bigint column. bigserialshould be used if you anticipate the use of more than 231 identifiers over the lifetime of the table. The type name smallserial create a smallint column.

GENERAL MySql DB2 Postgres
SERIAL SERIAL PK_LAND bigint primary key not null generated by default as identity SERIAL


No Comments on MySql, DB2 und postgresql
Tags: ,
Categories: DB2

Ränder in iText-Tabellen.

Jede Tabelle hat ihre default cell.
Wenn man eine Tabelle ohne Rahmen haben möchte, dann muss folgender code ausgeführt werden:

table.getDefaultCell().setBorder(0); //kein Rahmen

table.getDefaultCell().setBorder(1); //Rahmen oben

table.getDefaultCell().setBorder(2); //Rahmen unten – was in unserem Fall gut ist
No Comments on Ränder in iText-Tabellen.
Categories: Java

Sicherung der Postgres Datenbank

pg_dump postgres > c:\Daten\db.sql

Wenn man ausversehen den Filenamen vergisst geht die Ausgabe an die Console.
Der Output dauert ewig.

Das Gute an dieser Art der Sicherung ist, dass dies über rechnerarchitekturgrenzen hinweg funktioniert.
Anders formuliert – ich kann die Daten von Windows sichern und auf mac wieder einspielen.

Weiter führende Links findest du unter:

Einspielen der Sicherung

psql postgres < c:\Daten\db.sql

No Comments on Sicherung der Postgres Datenbank
Categories: Uncategorized

Deployment und der Symlink

Wenn man eine Site im professionellen Umfeld betreiben möchte,
so kommt benötigt man ein Versionkonzept.

Ziel ist es zwischen verschiedenen Versionen einer Webanwendung hin und her zuschalten.

  • Entwicklung
  • Test
  • Staging
  • production

ITU – Integration-Umgebung
STU – Systemtest-Umgebung
PU – Produktionsumgebung


Erzeugung eines Links.

ln -s v1.2.1 production

Auf den 1und1 Servern ist der git client installiert.
Es ist somit ohne Probleme möglich über die Kommandozeile Versionen einer Software

alternativ kann man die Software auch über svn verwalten. Dies wird von 1und1 nicht unterstützt.

No Comments on Deployment und der Symlink
Categories: Uncategorized

eclipse datasource explorer vs. Squirell SQL 19. January 2015

Als Java-Entwickler arbeite ich Tag für Tag mit Eclipse.
Dadurch kenne ich die Shorcuts um schnell mit meiner Lieblings-IDE arbeiten zu können.

Die letzten Jahre habe ich mit Quantum gearbeitet. Jedes mal wenn eine neue Version von Eclipse erschiene ist,
musste ich das Plugin nachinstallieren.
Doch Eclipse kommt mit von sich aus mit einem eigenen Tool für die Datenbank.
Den Eclipse Datasource Explorer.

Der ist gar nicht mal so schlecht wenn man weiß wie er zu bedienen ist.
Als ich ihn zum ersten mal ausgeführt habe konnte ich damit reichlich wenig anfangen.
Mir war nicht klar wo ich meine SQLs eingeben konnte und wie man sie ausführt.

Mit ALT + X kann man im SQL Scrapbook SQL-Queries ausführen.

Eine Funktion die ich von Squirell schätzen gelern habe ist.

No Comments on eclipse datasource explorer vs. Squirell SQL
Categories: Uncategorized
Martin Rocks