Java ist auch eine Insel

Dienstag, April 18, 2006

Insel: Log4j gegen Suns Logging versus Commons Logging

Sun hat in Java 1.4 das Logging-Paket definiert, was zu Erstaunen in der Java-Gemeinde geführt hat, da mit Apache Log4j (http://logging.apache.org/log4j/) eine ausgezeichnete API zum Loggen existierte. Das Sun-Logging, was erstmalig in der JSR47 beschrieben ist, ist dagegen nur ein laues Lüftchen, was nur Grundlegendes wie hierarchische Logger bietet. An die Leistungsfähigkeit von Log4j mit einer großen Anzahl von Schreibern in Dateien (FileAppender, RollingFileAppender, DailyRollingFileAppender), Syslog und NT-Logger (SyslogAppender, NTEventLogAppender), Datenbanken, Versandt über das Netzwerk (JMSAppender, SMTPAppender, SocketAppender, TelnetAppender) kommt das Sun-Logging nicht mit. Versuche mit dem Apache Commons Logging (http://jakarta.apache.org/commons/logging/) die Logging-Bibliothek von Sun und Log4j unter einen Hut zu bringen führt in der Praxis zu gewaltigen Problemen (http://www.qos.ch/logging/thinkAgain.jsp) und wird von einigen Kritikern als größten Irrsinn beschimpft (http://www.jroller.com/page/fate/?anchor=the_apache_syndrome).

AddThis Social Bookmark Button

Insel: Zum Weiterlesen - Kapitel JSP/Servlets

Sun hat zum Thema Web-Technologien viel auf den Webseiten http://java.sun.com/products/jsp/ und http://java.sun.com/products/servlet/. Allerdings reicht das Wissen nicht aus, um wirklich moderne Web-Applikationen zu entwickeln. Vielmehr sind JSP und Servlets die Basis jeder HTTP-getriebenen Anwendung. Tag Libraries (http://java.sun.com/products/jsp/taglibraries/) – unter ihnen besonders die JavaServer Pages Standard Tag Library (http://java.sun.com/products/jsp/jstl/) und Jakarta Taglibs (http://jakarta.apache.org/taglibs/) – sind die Gewürze, die JSPs erst richtig schmackhaft machen. Servlets dienen – neben der seltenen Generierung von binären Dokumenten – lediglich dazu, als Front-Controller (http://java.sun.com/blueprints/corej2eepatterns/Patterns/FrontController.html), Anfragen vom Klienten entgegen zu nehmen und and die View weiterzuleiten. Diese Weiterleitung selbst zu schreiben erübrigt sich mit der Masse an MCV-Frameworks; Sun dokumentiert die Notwendigkeit im „Dokument Designing Enterprise Applications“ (http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/web-tier/web-tier5.html). Als Standard-Framework kristallisiert sich mehr und mehr JavaServer Faces (http://java.sun.com/javaee/javaserverfaces/) heraus, was das klassische Struts (http://struts.apache.org/) für Neuapplikationen den Rang abläuft.
Web-Anwendungen nur mit einem einfachen Editor zu schreiben ist aufwändig und fehlerträchtig. Entwickler-Teams sollten sich von Tools unter die Arme greifen lassen, um zum Beispiel Pageflow visuell zu modellieren und die Konfigurationsdateien schnell über Wizards zu generieren. Im Eclipse-Umfeld machen Exadel Studio (für Struts und JSF) und Oracle (mit den Erweiterungen Oracle ADF Faces Components) eine gute Figur. Unter Eclipse selbst hat sich zwar schon das „JavaServer Faces Tooling Project“ (http://www.eclipse.org/webtools/jsf/) als Teil vom WTP gebildet, aber das brachte zum Zeitpunkt der Drucklegung keine bemerkenswerte Ergebnisse.
Web-Anwendungen sehen auf den ersten Blick mit ein Paar Klicks leicht zu entwickeln aus, sind aber bei genauerem Hinweis in Punkto Lastverteilung/Clustering (Tomcats Clustering wird immer besser), Ausfallsicherheit bei großen Sites und Sicherheit nicht trivial. Besonders die Sicherheit (Web Application Security) vernachlässigen Entwickler gerne bis zum Ende, um dann Teile wie unzureichend ungeprüfte Eingaben oder Authentifizierung anpassen zu müssen. Peinlich war zum Beispiel die Situation für Gateway, die jedem registrierten Benutzer eine sechsstellige ID zuwies und als Identifizierung an den Server schickte. Natürlich war es kein großes Problem, diese ID anders zu generieren und Informationen anderer Benutzer abzurufen. Der zeitlose Report „The Ten Most Critital Web Application Security Vulnerabilities“ (http://prdownloads.sourceforge.net/owasp/OWASPTopTen2004.pdf) sensibilisiert für die Problematik. Injizieungs-Fehler (wie SQL-Injection, mit Beispielen etwa beschrieben unter http://www.unixwiz.net/techtips/sql-injection.html) und Cross-Site-Scripting (http://de.wikipedia.org/wiki/Cross-Site_Scripting) sind mittlerweile Fehler-Klassiker, die es zu umschiffen gilt.

AddThis Social Bookmark Button

Mittwoch, April 12, 2006

Change insets/margin of a swing button

Use this before you start the program:
UIManager.put( "Button.margin", new InsetsUIResource(10, 20, 10, 20) );
BTW: To global change the icon of you JTree use:
Icon leafIcon = new ImageIcon( bla );
UIManager.put( "Tree.leafIcon", leafIcon );
UIManager.put( "Tree.openIcon", openIcon );
UIManager.put( "Tree.closedIcon", closedIcon );

AddThis Social Bookmark Button