Nörgelberni's Blog
Erlebnisse - Ereignisse - Wagnisse - Geheimnisse - Ergebnisse - Kenntnisse - Bildnisse - Hindernisse - Erkenntnisse - Schrecknisse - Erzeugnisse - Bedürfnisse - Versäumnisse - Zeugnisse - Erlaubnisse - Verhältnisse - Begräbnisse - Geständnisse - Gleichnisse - Hindernisse - Befugnisse
Über mich
- Bernd Zimmermann
- Seevetal-Horst in der Nähe von Hamburg, Niedersachsen, Germany
2017-05-20
Ach du meine Güte !
2014-05-04
Nun doch wieder ein iPad
2010-08-13
Drei Jahre später (fast)
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").
2007-09-08
JEE 5 Architektur
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
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
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
publicFü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: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; }
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
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
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.