Donnerstag, 22. Januar 2009

Es wird gespeichert

Unerwarteter Weise habe ich doch noch eine Antwort auf meine E-Mails von 1und1 erhalten. Kurz und Knapp schreibt mir die Datenschutzbeauftragte:

Der Gesetzgeber hat uns gem. § 113a TKG dazu verpflichtet, die
Verbindungsdaten für einen Zeitraum von sechs Monaten zu speichern.

Nicht, dass ich eine andere Antwort erwartet hätte. Jetzt kann ich mir aber zumindestens sicher sein - Big Brother ist über meinen Mailverkehr informiert, weiß wann ich online war und mit wem ich telefoniert habe. Zu der Frage, was nun gespeichert wird, habe ich viele, sich gegenseitig wiedersprechende Inhalt im Netz gefunden. Das BMJ fasst das Thema recht kurz, leicht verständlich und selbstbeweihräuchernd zusammen. Unsere Helden der Politik haben es der EU nämlich gegeben, in dem Sie die Mindestspeicherdauer auf 6 Monate beschränkt und die Speicherung von Webadressen nicht umgesetzt hat. Pünktlich zur praktischen Umsetzung der Speicherung scheint man über letzteres aber auch nicht mehr so glücklich zu sein (Link).

Montag, 5. Januar 2009

Konfiguration für Clientanwendungen

Jetzt ist mir das schon mehrfach passiert. Man programmiert mal eben ein Minniprogramm, das konfigurierbar sein soll. Je nach Anforderung werfe ich die Konfigurationsparameter eben per Kommandozeile mit rein oder benutze eben die System Properties alá System.getProperties().load(InputStream). Beides basiert auf dem Key/Value prinzip, was aber schnell mal umständlich werden kann, wenn man zum Beispiel eine Auflistung als Wert zu einem Key haben möchte. In meinem Fall müssen eine vielzahl von Pfaden einem Parameter zugeordnet werden. Soweit auch nicht weiter wild. Das kann man ja einfach mit einem Trennzeichen machen und das ganze dann auseinanderschneiden. Will man aber zu jedem Pfad noch weitere Eigenschaften reinreichen, wirds unhandlich.

Ich habe mir schon vor längerer Zeit mal überlegt was zu schreiben, mit dem ich komfortabel Konfigurationsdateien erstellen kann. Gekommen bin ich dazu freilich nie. Da nun das Problem wieder einmal aktuell geworden ist, und es ja schließlich nix gibt, wofür nicht irgendeine Javalibrary existiert, habe ich mich mal auf die Suche gemacht. Mir schwebte da was vor, womit ich Konfigurationsobjekte hierarchisch lesen und schreiben können wollte.

Als allererstes stößt man da natürlich auf IoC Container wie Spring. Damit läßt sich so ziemlich alles machen, was ich mir vorgestellt habe und noch ganz viel mehr, was ich allerdings gar nicht benötige. Zwar sehr interessant und sicher lohnenswert sich da mal einzuarbeiten, aber für meine Zwecke zu umfangreich.

Anschließend habe ich mir das Obix Framework mal angesehen. Leider ist die Dokumentation sehr dünn. Zumindestens kann Obix auch Collections komfortabel verwalten, was über die Fähigkeiten der System.properties schon mal hinaus geht. Die Konfiguration legt Obix dann im XML-Format ab.

Recht vielversprechend sieht das Apache Configuration Projekt aus. Damit lassen sich Objekte aus einer XML-Datei herstellen und Eigenschaften aus Properties oder Windows .ini Dateien auslesen. Will man nun aber mehr als nur Eigenschaften haben, also fertige Konfigurationsobjekte, kommt man um eine XML-Beschreibung des Objektes nicht umhin. Da ließe sich mit Xdoclet sicher was machen.

Letzendlich hängen geblieben bin ich bei dem Apache Betwixt Projekt. Dieses kann Objekte, die sich an das Javabean Naming halten, in XML schreiben und auch wieder herstellen. Das ganze dann auch noch ohne XML Beschreibung und einer API wie sie einfacher nicht sein könnte. Das ganze funkltioniert auch dann noch gut, wenn die Javabean weitere Javabeans enthält. Nach einigem rumspielen und Tests, werde ich Betwixt wohl erstemal benutzen. Der Ansatz zur Konfigurationsverwaltung mittels Javabeans ist auf jeden Fall sehr angenehm zu programmieren und auch die Erweiterung ist einfach. Einfach eine getter/setter Methode dazu tun, und schon hat man eine Eigenschaft mehr.


Samstag, 3. Januar 2009

Über eine Map Iterieren

Wenn ich alle Einträge einer Map durchlaufen wollte, habe ich für gewöhnlich das KeySet der Map hergenommen, einen Iterator geholt und dann drüber gelaufen:

        for (Iterator it = map.keySet().iterator(); it.hasNext();) {
            Object key = it.next();
            Object value = map.get(key);
        }

Das geht allerdings (in dieser Form seit Java 1.5) auch einfacher. Nämlich in dem man anstelle des KeySet das EntrySet verwendet:

        for (Map.Entry entry : map.entrySet()) {
            entry.getKey();
            entry.getValue();
        }


Diese foreach Konstruktion finde ich sehr angenehm und ich könnte mich glatt daran gewöhnen. Leider muss ich teilweise noch immer Java 1.4 kompatiblen Code schreiben.