J and I and Me
2006-01-29
 
Unser neuer Podcast

Unter http://se-radio.net/ gibt es den neuen SE-Radio Podcast, an dem auch ich beteiligt bin. Die Idee ist, regelmäßig interessante Themen aus dem Bereich der Software-Entwicklung durch dieses neue Medium zu vermitteln. Die Ausrichtung ist dabei eher auf Technologien. In einer Folge sprechen Markus Völter und ich über Dependencies, die anderen beiden jetzt schon verfügbaren Folgen sind ein Beitrag über Patterns und ein Interview mit Doug Schmidt.
  14:22 1 comments
Bookmark and Share
 
Kommunikation ist endlich wieder ein Abenteuer!

Ja, die Welt war so schön: Internet breitbandig und zuverlässig zu Hause. Telefonieren ohne Probleme und dann auch noch mobil, wenn man will. Anscheinend war es zu schön und der "technische Fortschritt" steht auch nie still.

Nehmen wir Skype: Zugegebenermaßen ein "It just works". Meistens. Wenn es nicht so wäre, dass dann überraschend irgendwo Rauschen auftaucht. Oder die Verbindung kurz weg ist. Letzteres ist ja wg. IP-Kommunikation noch erklärlich, aber der Grund für das Rauschen wird sich wohl nicht lokalisieren lassen.

Oder Internet per UMTS. Es ist wie in den guten, alten Tagen: Man schaut auf den Modem Monitor, um zu sehen, ob die Verbindung noch steht, und auf den Netzwerk Monitor, um zu sehen, ob noch Daten durchgehen. Und dann greift man zu Maßnahmen wie einem dauerhaft laufenden Ping, was zumindest subjektiv die Zuverlässigkeit erhöht.

Besonders spaßig ist es, Web Seiten auf dem Mobiltelefon anzuschauen: Der kleine Bildschirm ist ja schon ein Problem, aber lustige Fehlermeldungen wie "Die Seite ist zu groß" oder "Irgendwas stimmt mit der Seit nicht" garniert mit Abstürzen, bei denen man den Akku aus dem Handy rausnehmen muss, damit wieder was funktioniert, erinnern an die dunklen Netscape Zeiten, als man jedes neue Update in der Hoffnung installierte, dass es nun stabiler wird.

Ganz klar: Die neuen Technologien haben ihre Vorteile, aber vielleicht sollte man mal einen Moment innehalten und sich vergegegenwärtigen, was wir schon alles schönes haben. So, und jetzt gehe ich Skypen.
  11:43 0 comments
Bookmark and Share
2006-01-26
 
Und? Wie einfach ist Java EE 5?

Eine interessante Frage bezüglich Java EE 5 ist natürlich, wieviel die Vereinfachung bringt. Mein Kollege Christian Heinemann, hat sich dazu die Portierung des Adventure Builders von J2EE 1.4 auf Java EE 5. Dies ist eine Demo Anwendung, die zeigen soll, wie man Java EE Anwendungen baut.

Die Ergebnisse:


Aus meiner Sicht bedeutet dies, dass DI in Java EE eben nicht sinnvoll umgesetzt ist, da es auf Java EE Elemente beschränkt ist und dadurch Utility Klassen usw. so nicht verwaltet werden können. Bei Spring ist dieses Problem nicht vorhanden, da eben beliebige Objekte per Dependency Injection veraltet werden können.

In Bezug auf den Code selbst finde ich die Abnahme der Interface-Anzahl nicht überraschend, denn die alte Version hat EJB Interfaces ausprogrammiert, so dass sich hier eine massive Reduktion ergeben muss. Aber das dies nur zu 9% weniger Code führt, ist nicht sonderlich beeindruckend.

Vor allem bei DI habe ich das Gefühl, dass Java EE auf halben Wege stehen bleibt. Interessanterweise ist das jetzt schon klar und es führt jetzt schon zu Themen wie im Adventure Builder. Vielleicht droht ein zweites Pet Store.
  11:15 0 comments
Bookmark and Share
2006-01-22
 
Spring Tag auf der JAX

Das Programm für die JAX Konferenz findet sich hier. Ein besonderes Highlight (aus meiner Sicht) ist der Spring Tag, den ich auch mit organisiert habe. Das Programm bietet nach meiner Meinung einen guten Überblick über verschiedene weitergehende Themen wie Spring IDE, Spring Web Flow, das Acegi Sicherheits Framework, die Spring-JSF Integration sowie modell-getrieben Entwicklung und Spring. Ein Highlight ist sicher auch, dass mit Jürgen Höller einer der wichtigsten Entwickler des Spring-Frameworks uns aus erster Hand einen Überblick über die neuen Features in Spring 2.0 geben wird. Außerdem gibt es einige Case Studies, die zeigen werden, wo überall Spring heute schon verwendet wird und welche Erfahrungen dabei entstanden sind.
  15:19 2 comments
Bookmark and Share
2006-01-19
 
Mobilitätskonzepte

Ich stelle zunehmend eine Änderung fest, wie ich meine mobile Arbeit organisiere:



Dadurch wird langsam aber sicher tatsächlich die Vision von "always online" und volliger Mobilität realistisch. Theoretisch war das schon länger denkbar, aber mittlerweile ist es eben Realität. Das hat aus meiner Sicht vor allem den Vorteil, dass man immer und überall arbeiten kann. Das ändert auch die Bedeutung von der Kooperation durch die Möglichkeiten der Vernetzung - gerade für Berater ein wichtiges Thema. Schauen wir mal, was die Zukunft da noch an weiteren Dingen bringt.
  10:50 0 comments
Bookmark and Share
2006-01-16
 
Intel Macs?

Steve hat uns also Intel Macs gegeben. In diesem Zug ist die etablierte Marke PowerBook dann auch gleich gegen den Namen Mac Book ausgetauscht worden. Dabei hat PowerBook nichts mit PowerPC Prozessoren zu tun, denn schon die 680x0 Notebooks hießen so. Sei's drum, Steve wird nicht böse sein, dass ein Name, der nicht in seiner Zeit etabliert wurde, jetzt eliminiert wird.

Ich werde mir kurzfristig zumindest nicht kein Mac Book kaufen (und schon gar kein stationäres Gerät). Der Grund? Die Maschinen sind "nur" schneller und Geschwindigkeit habe ich ausreichend. Erinnert ein wenig an die Leistungsangabe bei einem Rolls Royce, die angeblich auch "ausreichend" ist. Zudem gibt es kein 12" Gerät und ein solches will ich. Und außerdem fehlt schlicht Software. Heise nach zu urteilen, kommt Firefox im März mit einer Intel Version. Das bedeutet, dass noch einige Zeit in's Land gehen wird, bevor die Software, die ich so typischerweise nutze, portiert ist. Ich habe sogar noch eine Mac OS 9 Anwendung (Outlook), die ich nicht so einfach ersetzen kann, denn Eudora kommt mit dem fraglischen Exchange-Server nicht klar. Da ist natürlich die Frage, ob Mac OS 9 Anwendung auf Intel überhaupt laufen.

Ein wesentliches Argument wäre natürlich eine Lösung, die einem den Betrieb von Windows oder Linux ohne signifikanten Performance Nachteil erlaubt. Dazu wäre aber VMWare oder Virtual PC für Mac/Intel notwendig.

Das Ende vom Lied ist, dass für mich eine vierfache Performance einfach kein ausreichendes Argument ist. Abgesehen davon, dass nun auf einmal die Intel Prozessoren viel schneller sind, obwohl Microsoft gerade bei der XBox 360 Richtung PowerPC geht. Na ja, vielleicht werfe ich doch noch einen Blick in einen Apple Laden, wenn die Rechner lieferbar sind...
  14:17 0 comments
Bookmark and Share
2006-01-13
 
Spring und Testen

Es gibt zwar auch gerade (wie hier schon geschrieben) eine Diskussion zum Thema Testen und Dependency Injection, aber ich muss dennoch noch einmal etwas zu dem Thema sagen. Ich habe langsam den Eindruck, dass man das Thema Testen in seiner Wichtigkeit gar nicht überschätzen kann. Es ist eine triviale Weisheit: Ohne Testen kann man die Qualität einer Software nicht gewährleisten. Trotzdem gibt es in diesem Bereich immer noch deutliche Innovation. JUnit war die erste, die Testing plötzlich in den Vordergrund gerückt hat. Der nächste Schritt für mich war Easymock. Man hat sich dann gefragt, wie man vorher überhaupt Tests geschrieben hat. Die letzte größere Innovation scheint Fit zu sein, mit dem auch Akzeptanz-Tests mit einem einfachen, eleganten und effektiven Tool besetzt werden.

Das interessante ist nun, dass Dependency Injection (DI) sich tatsächlich in diese Reihe von Test-Tools in gewisser Weise einreiht. (Ja, ich bin voreingenommen und dies ist vereinfacht). Dennoch stellt sich bei der Auswahl von Möglichkeiten, die Spring bietet, die Frage, welcher Teil denn nun der wichtigste ist. Erstaunlich oft ist die Antwort DI. Es geht ja eigentlich "nur" darum, die Abhängigkeiten in einer Anwendung anders zu organisieren. Nachdem meistens sowieso eine oder mehrere Factories eingesetzt werden, ist die Einführung von DI in einem existieren Projekt eigentlich recht aufwändig. Und der nutzen ist recht gering: Man bekommt die Referenzen halt zugewiesen, statt sie selber zu suchen. Erst wenn man die isolierte Testbarkeit in die Gleichung einfügt, wird klar, dass der Aufwand gerechtfertigt ist. Auch die Abstraktion von der Ausführungsschicht (Java EE oder Java SE) bringt vor allem Vorteile beim Testen. Es ist also möglicherweise nicht die Vereinfachung von Java EE, die das entscheidende Argument darstellt, sondern die leichtere Testbarkeit. Insofern ist Spring vielleicht wirklich ein Testtool....
  22:22 0 comments
Bookmark and Share
2006-01-07
 
Artikel im Java Magazin

Im aktuellen Java Magazin sind zwei Artikel von mir: Zum einen über das Acegi Security Framework, das aus dem Spring-Umfeld kommt und meiner Ansicht nach eine interessante Alternative in diesem Bereich darstellt. Zum anderen gibt es den Salon, in dem Jan Leßner, Oliver Ihns, Andreas Holubek und ich jeweils unsere Meinung zum Thema Dependency Injection, Testing und EJBs niedergelegt haben.
  20:48 0 comments
Bookmark and Share
2006-01-06
 
Tournee Daten

Ich gebe im Januar einige Vorträge:


Vielleicht sieht man sich ja...
  13:16 0 comments
Bookmark and Share
 
UMTS: Die stille Revolution

Dieses Posting ist eine Premiere, denn es ist das erste, das ich über eine Mobilfunk-Verbindung erstellt. Seit dieser Woche bin ich Besitzer des SonyEricsson K600i UMTS Mobil-Telefons und der dazu passenden EPlus Daten Flatrate. Das ganze ist mit 30-40 kB/s bei Download nicht so schnell wie DSL (was auch niemand erwartet hat) und insbesondere die Latenz ist hoch (ping auf www.web.de ist ca. 300ms). Dadurch ist die Benutzung eines Microsoft Terminal-Servers nur bedingt spaßig. Aber ansonsten läuft es recht gut.

Interessant war die Beauftragung: Man kann die Tarif-Option nicht gleich zu dem Vertrag dazubuchen, sondern man muss bei der Hotline anrufen. Auch online buchen geht nicht. Freundlicherweise hat der EPlus Shop für mich den Anruf getätigt. Als dann online nicht zu sehen war, habe ich selbst nachgehagt. Aussage war dann, dass man in "Mein EPlus" im Internet sieht, wenn die Sache aktiv ist und das es beantragt ist. Ein Tag später war da immer noch nichts zu sehen. Lustigerweise war es aber schon so, dass meine GPRS Verbindungen (UMTS taucht anscheinend explizit gar nicht auf) nicht mehr berechnet wurde. Die nächste Aussage von der Hotline war dann, das es aktiv ist...

Was lehrt uns das? Auch bei EPlus gibt es mindestens zwei unterschiedliche Systeme, nämlich für die Hotline und für Internet und beide sind anscheindend nicht gleich mächtig. Das aber nur als amüsante Bemerkung am Rande.

Ansonsten wie gesagt eine schöne Sache, aber weit davon entfernt, die große Revolution zu sein, die 2000 mit UMTS erwartet wurde. Es ist halt nur ein mobiles DSL und preislich auch nicht so teuer, dass es viel Profit verspricht. Vor allem ist EPlus dadurch ein Internet Service Provider und prinzipiell austauschbar. Aber was soll's, für den Kunden ist es auf jeden Fall toll.

BTW: Erwähnte ich, dass man auch offiziell Skype über diesen Service machen kann? Damit kann man dann im Prinzip mobil kostenlos telefonieren. VoIP ist allerdings nicht erlaubt, Chats gehen aber anscheinend. Fehlt noch ein Skype UMTS Mobiltelefon.
  09:09 0 comments
Bookmark and Share
2006-01-02
 
Noch ein Spring 2.0 Feature: SimpleJdbcTemplate

Nachdem das Java Magazin hier einen Link auf meinen Blog hatte (danke!), hier noch ein neues Feature aus Spring 2.0: Das SimpleJdbcTemplate.

Die JdbcTemplates aus Spring sind ein wichtiges Feature von Spring, da die Fehlerquellen in Bezug auf das Schließen der verschiedenen JDBC-Ressourcen damit eliminiert werden und die API auch wesentlich einfacher ist als die pure JDBC API. Sie sind ohne den Rest von Spring nutzbar, so dass man sie auf jeden Fall verwenden sollte, wenn man JDBC Code schreiben will. Das SimpleJdbcTemplate verwendet nun JDK 1.5 Features, um das Leben noch einfacher zu machen. Hier ein Code-Beispiel:


getSimpleJdbcTemplate().update(
"INSERT INTO KUNDE(VORNAME,NAME,KONTOSTAND) "+
" VALUES(?,?,?)",
kunde.getVorname(), kunde.getName(),
kunde.getKontostand());


Dabei muss die Klasse von SimpleJdbcDaoSupport erben, damit man mit getSimpleJdbcTemplate() auch ein SimpleJdbcTemplate bekommt (alternativ kann man selber eines unter Angaben einer DataSource oder eines JdbcTemplates erzeugen).

Was hier nun auffällt ist, dass man bei Kontostand nicht mehr double in Double umwandeln muss (Autoboxing) und man kann die Parameter einfach so übergeben, da JDK 1.5 Methoden mit einer variablen Anzahl Parameter erlaubt. Beim JdbcTemplate musste man noch ein Object-Array verwenden. Im Prinzip ist der Umgang recht natürlich: Man gibt eben die SQL-Anfrage an und die Parameter - das war's.

Für Queries kann man nach wie vor queryForInt oder queryForLong verwenden, falls man einen primitiven Typ als Rückgabe erwartet. Neu ist, dass bei dem generischen queryForObject aus dem übergebenen erwarteten Typ vom Compiler Typ-Informationen abgeleitet werden, so dass der Typ-Cast entfällt:


Date d=
simpleJdbcTemplate.queryForObject(
"SELECT date from DBLOG where id=?", Date.class, id);


Hier ist keine Umwandlung in ein Date mehr nötig.

Wenn man nun ein fachliches Objekt erzeugen will, kann man die Daten aus dem SQL-Statement auch mit einem RowMapper in ein solches Objekt umwandeln. Auch hier sorgt das bessere Typ-System von JDK 1.5 dafür, dass einiges eleganter wird:


public class KundeDAO extends SimpleJdbcDaoSupport {

private static final class KundeResultSetRowMapper implements
ParameterizedRowMapper {
public Kunde mapRow(ResultSet rs, int rowNum) throws SQLException {
Kunde kunde = new Kunde(rs.getString(1), rs.getString(2), rs
.getDouble(4));
kunde.setId(rs.getInt(3));
return kunde;
}
}
public List getAll() {
return getSimpleJdbcTemplate().query(
"SELECT VORNAME, NAME, ID, KONTOSTAND FROM KUNDE",
new KundeResultSetRowMapper());
}

public Kunde getByID(int id) {
return getSimpleJdbcTemplate()
.queryForObject(
"SELECT K.VORNAME, K.NAME, K.ID, K.KONTOSTAND FROM KUNDE K WHERE K.ID=?",
new KundeResultSetRowMapper(), id);
}

}


Wie man sieht, gibt es nun den ParameterizedRowMapper. Dadurch wird es hier möglich, anzugeben, dass dieser als Ergebnis einen Kunden zurück gibt. Dadurch kann dann die getAll()-Methode ohne weiter Typ-Umwandlungen als Ergebnis ein List zurückgeben. Und bei getById() wird der Rückgabetyp Kunde ebenfalls automatisch abgeleitet.

Ingesamt empfinde ich diese Möglichkeiten als extrem elegant. Sie zeigen auch sehr deutlich die praktische Relevanz der JDK 1.5 Features. Von daher ist dies auf jeden Fall ein guter Tipp für Leute, die JDBC direkt nutzen wollen.
 
Bookmark and Share
J for Java | I for Internet, iMac, iPod and iPad | Me for me

ARCHIVES
Juni 2005 / Juli 2005 / August 2005 / September 2005 / Oktober 2005 / November 2005 / Dezember 2005 / Januar 2006 / Februar 2006 / März 2006 / April 2006 / Mai 2006 / Juni 2006 / Juli 2006 / August 2006 / September 2006 / Oktober 2006 / November 2006 / Dezember 2006 / Januar 2007 / Februar 2007 / März 2007 / April 2007 / Mai 2007 / Juni 2007 / Juli 2007 / August 2007 / September 2007 / Oktober 2007 / November 2007 / Dezember 2007 / Januar 2008 / April 2008 / Mai 2008 / Juni 2008 / August 2008 / September 2008 / November 2008 / Januar 2009 / Februar 2009 / März 2009 / April 2009 / Mai 2009 / Juni 2009 / Juli 2009 / August 2009 / September 2009 / Oktober 2009 / November 2009 / Dezember 2009 / Januar 2010 / Februar 2010 / März 2010 / April 2010 / Mai 2010 / Juli 2010 / August 2010 / Oktober 2010 / Januar 2011 / Februar 2011 / März 2011 / April 2011 / Mai 2011 / Juni 2011 / August 2011 / September 2011 / November 2011 / Februar 2012 / April 2012 / Mai 2012 / April 2013 / Mai 2013 / Juni 2013 / Januar 2015 / Juli 2015 / Februar 2016 /

Links

Twitter
Google +
Slideshare
Prezi
XING
LinkedIn
Das Spring Buch


Feeds

Feedburner


Impressum
Betreiber und Kontakt:
Eberhard Wolff
Leobschützer Strasse 22
13125 Berlin
E-Mail-Adresse: eberhard.wolff@gmail.com

Verantwortlich für journalistisch-redaktionelle Inhalte:
Eberhard Wolff