Über mich

Mein Bild
Seevetal-Horst in der Nähe von Hamburg, Niedersachsen, Germany

2017-05-20

Ach du meine Güte !

Mehr als 3 Jahre ohne ein Lebenszeichen von mir?  Was ist passiert ?

Seit dem 1. Juli 2014 bin ich nicht mehr sozialversicherungspflichtig - 49 Jahre und 3 Monate, nach dem Eintritt in das Berufsleben. 

Und wie es - dem Vernehmen nach - allen Rentnern so geht:  Ich habe keine Zeit mehr, um einen Blog zu pflegen. Hatte ich vorher ja eigentlich auch nicht; aber nun ist die Zeit noch knapper. 

Verrückt! Da hat man so viele Dinge vor sich her geschoben, die man machen wollte, wenn der Ruhestand eintritt und nun - so gut wie nichts davon wurde umgesetzt. Auch nicht in den ersten nun fast 3 Jahren des Rentner-Daseins.

Was hat sich geändert?  Der Fernseher von Philips läuft noch. Den Toyota Prius haben wir im vergangenen Oktober (nach 7 Monaten Lieferzeit) gegen einen RAV4 Hybrid eingetauscht. Und seit Januar 2013 haben wir noch einen Toyota Auris Hybrid als Zweitwagen (purer Luxus!).

Seit vergangenem Dezember habe ich keine einzige Canon Kamera mehr und fotografiere nur noch mit Fujifilm Kameras und Objektiven.

Man findet meine Fotos auf meiner Homepage. Da schreibe ich auch - viel zu selten - etwas im Blog.

2014-05-04

Nun doch wieder ein iPad

Im Spätherbst des vergangenen Jahres stand ich vor der Entscheidung, mein iPad 1 zu ersetzen, weil es ja nun auch schon von Apple selbst verstoßen und nicht mehr mit frischen IOS Versionen ausgestattet wurde. 
Dieses mal sollte es das kleine iPad Mini werden. 
Dann sah ich das Samsung Note 3 und fühlte, wie mir plötzlich mein iPhone 4S in der Tasche schwer wurde. Die Herausforderung wurde angenommen, das iPhone einem guten Freund gegen eine angemessene Gebühr überlassen und der Kampf mit Android aufgenommen.

2010-08-13

Drei Jahre später (fast)

Kinder, wie die Zeit vergeht.

Aus den guten Vorsätzen beim Einrichten dieses Blogs ist nachweislich nichts geworden. Ich habe drei Jahre lang nichts veröffentlicht.

  • Sun gibts nicht mehr
  • Java EE 6 ist angesagt
  • GlassFish hat Version 3.0.1 erreicht
  • Adam Bien berät die Firma, für welche ich jetzt arbeite, regelmäßig. Er ist ein fleißiger Blogger.
  • Meine Kollegen sind überwiegend 30 Jahre jünger, als ich und ich bin das absolute Alt-Eisen (seufz)
  • Meine Canon G9 ist Geschichte und durch eine G11 abgelöst
  • Eine Canon D7 hat die 450D ersetzt
  • Ich bin neidisch auf die vielen guten Fotos anderer Foto-Amateure auf Flickr
  • Mein Fernseher hat jetzt 116 cm Diagonale und zeigt Blu-Ray. Dazu gabs den HD-TV Sat-Receiver und ein Home-Theater-System. Alles von Philips, damit ich alle Geräte endlich mit einer Fernbedienung kontrollieren kann.
  • Schön gedacht ... Philips sieht das anders. Das HTS schaltet sich nicht ein, wenn der Fernseher eingeschaltet wird und beginnt, sein Audio-Signal über die Coax-Verbindung zu senden. Wehe, man bedient das HTS mit der Fernseher-Fernbedienung, um die DVD zu pausieren oder zurückzuspulen. Da schaltet der Fernseher kurzerhand auf den Sat-Receiver und man braucht Minuten, um - mit Hilfe der HTS-Fernbedienung - endlich wieder an die richtige Szene der DVD zu gelangen.
    • ich sollte zum Thema Philips und Easylink getrennt posten, denke ich
  • Blu-Ray ist schön - sehr schön sogar, wenn man sich die BBC Blu-Ray-Disc 'Planet Earth' anschaut.
  • Blu-Ray ist beknackt, weil es Minuten dauert, bis man endlich den Film sehen kann, den man gekauft hat.
  • Avatar als Blu-Ray und ohne 3D finde ich deutlich besser, als die 3D Fassung im Kino ("man darf mich nicht schlagen, ich trage eine Brille").

Ich gelobe Besserung!

2007-09-08

JEE 5 Architektur

Seminar mit Adam Bien bei OOSE.DE

Gute Architekten zeichnen sich dadurch aus, dass sie - auf Grund eigener Erfahrungen oder einer guten Schulung, wenn es darum geht aus einer Vielzahl von augenscheinlich gleichwertigen Alternativen eine auszuwählen, meistens die richtige treffen.

Verantwortungsvolle Architekten sorgen dafür, dass bei geringsten Zweifeln in einem Versuchsaufbau sichergestellt wird, dass die Auswahl der Zusammenstellung von Alternativen korrekt funktioniert. Das sind dann wohl meistens Architekten, für die kotzende Pferde vor Apotheken kein ungewöhnlicher Anblick sind und sich deshalb lieber selbst davon überzeugen, ob die vielen vollmundigen Versprechungen der Marketing Abteilungen führender auch tatsächlich greifen.

Mit JEE 5 kann man heute höchstens 1 1/2 Jahre Erfahrung haben (wenn man damit begonnen hat, bevor einigermassen robuste Entwickler-Werkzeuge zur Verfügung standen). Meine Erfahrungen erstrecken sich jetzt über ca. 6 Monate und sind durch praktisches Probieren untermauert. Wenn ich so weitermachen, kann es leicht noch einmal 6 Monate dauern, bis ich mir hinsichtlich aller Ecken und Kanten des neuen Systems einigermassen sicher sein kann.

Das ist das Problem, wenn man sich die Aufgabe gestellt hat, ein seit 17 Jahren funktionierendes, auf 20 Jahre alter Software-Technologie basierendes Anwendungssystem aus hunderten von Tabellen und Programmen auf eine neue Plattform zu stellen.

Darum habe ich mir Hilfe geholt und Adam Bien für drei Tage in mein Projekt geholt! Hört sich nicht übel an, nicht wahr? Neee also wirklich, vermutlich würde das mein Budget sprengen!

Aber: Adam Bien hat bei OOSE.DE in Hamburg in der vergangenen Woche ein Seminar abgehalten, welches viele der Probleme in meinem Projekt streifte. Da dieses Seminar in Hamburg nur sehr wenige Teilnehmer hatte, konnten viele individuelle Fragen geklärt werden und es war zeitweise wirklich so, als hätte man Adam persönlich gebucht.

Unterm Strich hat sich bestätigt, dass die Auswahl EJB3 auf JEE5 mit Netbeans und Glassfish absolut optimal ist. Ich möchte nicht versäumen, mich bei dieser Gelegenheit versäumen, Thomas Schütt dafür zu danken, dass er mich in diese Richtung geschubst hat.

Die Informix typischen Probleme lassen sich leider nur durch Work-Arounds beheben. Ansonsten geht es jetzt mit neuem Elan und vielen wichtigen Erkenntnissen weiter.

Informix Toplink Hibernate & Co

Die Informix Adaption in Toplink wirft mit NullPointerExceptions um sich. Ursache ist die Implementierung der - alten - Informix spezifischen Methode, Outer Joins in der Where Clause des Select Statements anzugeben. Genau diese Implementierung ist bei Toplink aber nicht (so gut) getestet, weil dieses Datenbank-Produkt von Oracle für Toplink nicht zertifiziert ist.

Siehe https://glassfish.dev.java.net/issues/show_bug.cgi?id=3574

Verwendet man Hibernate als Persistence Manager, gibt es mit den Outer Joins keine Probleme, weil Hibernate die von Informix schon seit einigen Jahren unterstützte ANSI Syntax für die Generierung der Select-Anweisungen generiert.

Leider habe ich aber mit Hibernate bisher keine Freundschaft schliessen können, weil es damit an anderen Stellen sehr unschöne Exceptions und wenig informativen Text dazu gibt. Wir reden hier - wie gesagt - von Java Code, der ansonsten mit Toplink als Persistence Manager einwandfrei funktioniert.

Richtig Spass macht es, wenn man statt Informix mit Derby arbeitet - da funktioniert alles so wie es soll. Vermutlich würde auch alles mit Oracle sehr gut klappen - leider wird es noch sehr lange dauern, bis die Anwendung soweit portiert ist, dass die Datenbank kurzerhand ausgetauscht werden kann. Vielleicht ist Informix bis dahin auch wieder so gut im Geschäft, dass diese Datenbank zu den für Toplink zertifizierten gehört? (Ich persönlich rechne nicht mehr damit).

2007-08-19

Cache mich

Test-Driven-Development ist eine feine Sache: man schreibt einen Test, welcher einen Anwendungsfall simuliert und implementiert und testet das Interface, bis alles so sauber funktioniert, wie es das Interface verspricht.

Meine Tests laufen als Remote-Client und testen Remote-Interfaces von stateless Session Beans. Das ist zwar etwas umständlich, entspricht aber dem für die Anwendung geplanten Szenario. Es sind also keine Unit- sondern eher Integration-Tests. Mit Glassfish und Netbeans ist das einfach aufgesetzt - man muss nur appserver-rt.jar im Classpath der Tests haben und kann dann einfach InitialContext JNDI lookup() ausführen.

Implementieren von Methoden, Deployen der stateless Beans und Ausführen der Tests geht selbst auf meinem 2GB Thinkpad T60 recht zügig (natürlich läuft da auch die Informix DB noch drauf).

Etwas macht mir aber Kummer: Irgendwie passiert es immer wieder, dass der Persistence Context definitiv behauptet, es gäbe von einer Entity garantiert gar kein Exemplar mehr und dann beim persist() eine ExceptionEntityExists auslöst, weil er dann meint, den Primary Key doch schon zu kennen. Und das, obwohl unmittelbar vor dem persist() ein Query "delete from Entity" ausgeführt wurde und ein em.find() mit dem Key der neu einzufügenden Entity nichts findet.

Ich habe den Eindruck, dass durch das Deployen der zu testenden EJBs die Synchronisation der Persistence Contexts, die für jede Methode der stateless Beans (pro Transaction) erzeugt werden, mit dem 2nd Level Cache der Toplink Essentials beschädigt wird.

Ich habe in Wonseok Kim's Blog einiges zum Thema Toplink Cache gefunden.

Das Problem lässt sich nur durch Stoppen und Starten des Glassfisch beheben.

Allerdings macht mich die Idee nervös, mit solchen Effekten rechnen zu müssen, wenn in einem in Produktion laufenden Glassfish neue Versionen deployed werden. Kommt Zeit, kommt Rat!?

2007-08-14

Lohn der Ordnung

Da hatte ich mir eine handvoll prima funktionierender, generischer Methoden zur Persistierung der Entities in eine stateless Bean geschraubt, um mit JUnit meine Mappings zu testen. Das sah dann zum Beispiel so aus:
public  T getEntity(Class t, K k ) {
log.info("getEntity(" + t + ", "  + k );
Object o = em.find(t, k);
@SuppressWarnings("unchecked")
T r = (T) o;
if ( r != null) {
em.refresh(r); // unbedingt nötig, damit OneToMany aktualisiert wird
}
return r;
}
Für den Einsatz in einer richtigen Anwendung war das aber zu unpraktisch und ließ keinen Raum für Geschäftslokik. Also wurde eine Facade gebaut:
public Xyz getXyz(final Integer xyzKey){
Xyz xyz = this.getEntity(Xyz.class,cargowrid);
... xyz geschäftlich bearbeiten ...
return xyz;
}
Prima! Es ging um ein Package mit ungefähr 50 Entities. Für jedes Entity Methoden fürs
  • Einfügen
  • Finden
  • Ändern
  • Löschen
macht zusammen 4 x 50 = 200 Methoden im Remote Interface. Einige Stunden Arbeit später fiel der Startschuss für die Wiederholung der inzwischen auch angepassten JUnit Tests.

Ich sollte hier erwähnen, dass meine JUnit Tests gegen das Remote Interface ausgeführt werden und bis vor dieser Neu-Ordnung prima funktionierten. Meine Überraschung war nicht gering, als ich das erste Ergebnis sah:
Testcase: testCargowWithCarseqInsert(ejb.TestPartnerServiceRemoteCargow): Caused an ERROR
-98
java.lang.ArrayIndexOutOfBoundsException: -98
at com.sun.corba.ee.impl.presentation.rmi.bcel.BCELStubBase.invoke(BCELStubBase.java:193)
at ejb.__PartnerServiceRemote_Remote_DynamicStub.finishSession(ejb/__PartnerServiceRemote_Remote_DynamicStub.java)
at ejb._PartnerServiceRemote_Wrapper.finishSession(ejb/_PartnerServiceRemote_Wrapper.java)
at ejb.TestPartnerServiceRemoteCargow.tearDown(TestPartnerServiceRemoteCargow.java:38)

Das ist doch ganz klar, um was es hier geht ... oder? Na - ich habe jedenfalls ungefähr eine Stunde gebraucht, um von der Fehlersuche in und am Glassfish Application Server abzulassen.

Um es kurz zu machen: Die Testanwendung, welche im Glassfish installiert ist und das Local Interface verwendet, hatte gar keine Probleme mit der neuen Facade. Also war mein JUnit Testaufbau kaputt? Hatte ich plötzlich falsche JARs am Wickel?

Eine Tasse Kaffee später ging mir ein Kronleuchter auf. Ich kommentierte 90% der Methoden im Remote Interface aus und suchte mir einen JUnit Tests, der mit dem Rest agierte aus: VOILA!

Die durch meinen Hang zur Ordnung hervorgerufene Inflation an Methoden im Remote Interface hatte eine Schallmauer durchbrochen, von deren Existenz ich nichts wusste. Meine anschliessende Suche nach der unsichtbaren Grenze blieb ohne Ergebnis. Wer weiß, wo man sowas nachlesen kann? Und, um es mit Torfrock zu sagen "Gibt es Leben auf anderen Planeten?" - also noch andere Limits, vor deren Überschreitung ich mich gern schützen würde?

Ich bin - um ehrlich zu sein - einfach nicht ehrgeizig genug, die nächsten Tage damit zu verbringen, nach diesen Grenzen zu suchen. Mein derzeitiger Auftraggeber ist auch nicht wirklich daran interessiert, Geld für diese Suche auszugeben.

.... aber irgendwie wurmt es mich doch, dass ich das alles noch nicht weiß!

Natürlich muss ich jetzt noch weiter aufräumen - neue Packages - neue Remote Interfaces - neue Lookups - neue Arbeit.

Schade - es war zu schön einfach.

Leider vermeldet die SUN Bug WebSite "Maintenance" ... also werde ich demnächst erfahren, ob es sich wirklich um einen Bug handelt oder lediglich die Exception mit besserer Diagnose Information ausgestattet wird.

Inzwischen heißt SUN jetzt ORACLE und die haben sich von diesem Bug völlig getrennt. Es lohnt sich also nicht mehr, auf den obigen Link zu klicken.

2007-08-11

Womit ich momentan viel Zeit verbringe

Java Enterprise Edition 5 (Java EE 5)

Endlich! Wieder ein neuer Weg, der grundlegenden Idee einen neuen Namen zu geben. Ich kann mich entsinnen, auch schon "Java 2 Enterprise Edition 5" gelesen zu haben. Seit mehr als 10 Jahren treibt SUN es mit der Vergabe von Bezeichnungen auf die Spitze.

Gibt es schon eine Zertifizierung für das fehlerfreie Aufsagen von Releases und zugehörigem marktwirksamen Namen? Ich sollte mal intensiv auf der SUN Website forschen, ob es da so etwas wie eine "Wenn Sie sich verloren vorkommen - schauen Sie doch einfach auf diese Tabelle aller Bezeichner und Relases, die uns innerhalb von 10 Jahren eingefallen sind .... ohne Gewähr für die Richtigkeit der Inhalte"

Man kann nur hoffen, dass die für die Entwicklung der Technologie zuständigen Mitarbeiter bei SUN nicht ähnliche Konfusionsaktivitäten im Quellcode veranstalten.

Da habe ich nun NetBeans 5.5.1 und Glassfish 2.0 Beta Build 53 auf der Platte und bin schwer damit beschäftigt, eine knapp 20 Jahre alte Informix 4GL Anwendung auf diese brandneue Plattform zu migrieren. Mehr als 280 Tabellen und einige komplexe Views möchten auf EJB3 Entities gemappt werden.

Nicht zu vergessen 323 Informix 4GL Module, die zu 214 Dialogprogrammen und 50 Reports gebunden sind, sowie deutlich über 300 Shellscripts, die das alles in Bewegung versetzen. Das alles ohne Dokumentation und mit sehr sehr wenigen Kommentaren im Quellcode, deren Aktualität in der Regel sehr sehr fragwürdig ist.

Eigentlich war ich durch IBM's RAD 6 und RSA 6 schon sehr gut mit Eclipse vertraut und hätte gern weiter damit gearbeitet. Aber leider haben alle Eclipse Distributionen, die ich mir näher angeschaut habe, keine auch nur annähernd vergleichbar nahtlose Integration mit Java EE 5, EJB3 und Glassfish geboten.

Nach einigen Wochen mit NetBeans 5.5 und ein paar Tagen mit NetBeans 6.0 Preview bin ich nicht wirklich unglücklich mit dieser Arbeitsumgebung. Wenn ich das mit IBM's RAD6 vergleiche, bin ich sogar sehr sehr sehr glücklich damit.

Dieses - mein erstes - Blog soll die Höhepunkte meines Zusammenlebens mit dem oben angerissenen Projekt festhalten. Bin schon sehr gespannt darauf, ob ich es schaffe, das Tagebuch regelmässig zu füttern. Und es sollen nicht nur Nörgeleien aufgezeichnet werden.