Java ist auch eine Insel

Dienstag, August 22, 2006

Three Visual Eclipse Tutorials

Sad to see, that all tutorials are old and based on Eclipse 3.1 or Eclipse 3.0.

AddThis Social Bookmark Button

Mittwoch, August 16, 2006

Insel: Abfangen und Weiterleiten von Exceptions/fillInStrackTrace()

Die Ausnahme, die ein try/catch-Block auffängt, kann in catch wieder neu ausgelöst werden. Dieses Re-throwing zeigt folgendes Beispiel, in dem das Programm den Fehler erst über einen Logger ausgibt und dann weiter nach oben reicht.

Rethrow.java

import java.util.logging.Logger;

public class Rethrow

{

private static Logger log = Logger.getAnonymousLogger();

static void rethrow( RuntimeException e )

{

log.warning( "RuntimeException occurred!" );

// e.fillInStackTrace();

throw e;

}

public static void main( String[] args )

{

try

{

((String)null).length();

}

catch ( NullPointerException e )

{

rethrow( e );

}

}

}

Die Ausgabe ist:

16.08.2006 18:35:27 Rethrow rethrow

WARNUNG: RuntimeException occurred!

Exception in thread "main" java.lang.NullPointerException

at Rethrow.main(Rethrow.java:20)

Wichtig an der Stelle ist -- und daher die auf den ersten Blick unnötige Funktion rethrow() --, dass der Aufrufstack in e gespeichert ist, und daher der Stracktrace nicht die Funktion rethrow() enthält. Wünschten wir dies, müssen wir den Stracktrace neu füllen. Dazu dient die Funktion fillInStackTrace(). Nehmen wir sie im oberen Beispiel hinein, folgt die Ausgabe:

16.08.2006 18:36:16 Rethrow rethrow

WARNUNG: RuntimeException occurred!

Exception in thread "main" java.lang.NullPointerException

at Rethrow.rethrow(Rethrow.java:11)

at Rethrow.main(Rethrow.java:24)

AddThis Social Bookmark Button

Montag, August 14, 2006

Die neue Klasse java.awt.Desktop

Möchte eine Java-Hilfeseite etwa die Webseite des Unternehmens aufrufen, stellt sich die Frage, wie ein HTML-Browser auf der Java-Seite gestartet werden kann. Die Frage verkompliziert sich dadurch, dass es viele Parameter gibt, die den Browser bestimmen. Was ist die Plattform: Unix, Windows oder Mac? Soll ein Standardbrowser genutzt werden oder ein bestimmtes Produkt? In welchem Pfad befindet sich die ausführbare Datei des Browsers?

Seit Java 6 ist das über die Klasse java.awt.Desktop ganz einfach. Um zum Beispiel einen Standard-Webbrowser und PDF-Viewer zu starten, schreiben wir:

try

{

Desktop.getDesktop().browse( new URI("http://java-tutor.com/") );

Desktop.getDesktop().open( new File("S:/Public.Comp.Lang.Java/3d/Java3D.pdf") );

}

catch ( Exception /* IOException, URISyntaxException */ e )

{

e.printStackTrace();

}

Zusammen ergeben sich folgende Objektmethoden:

· void browse( URI uri )

· void edit( File file )

· void mail()

· void mail( URI mailtoURI )

· void open( File file )

· void print( File file )

Ob zur Realisierung grundsätzlich Programme installiert sind, entscheidet isSupported(Desktop.Action), etwa isSupported(Desktop.Action.OPEN). Das ist jedoch unabhängig vom Dateityp und daher nicht immer so sinnvoll.

AddThis Social Bookmark Button

Donnerstag, August 10, 2006

Inselupdate: Verbessern des Aussehens unter Windows mit JGoodies Looks

Zwar bemühte sich Sun bis Java 6 bestmöglich das Windows XP-Look and Feel zu emulieren, doch an allen Stellen gelingt das nicht. Seit Java 6 nutzt das System den nativen Windows-Renderer, so dass Unstimmigkeiten eigentlich ausgeschlossen sein sollten. Verbesserungen lassen sich auch nicht so einfach publizieren, da Sun an Release-Zyklen gebunden ist. In diesem Fall hilft JGoodies Looks (https://looks.dev.java.net/), ein Look and Feel unter der BSD-Lizenz. Das Ziel von Looks ist die perfekte Nachbildung des Aussehens für die Windows-Reihen 95/98/NT/ME/2000/2003/XP/Vista ab Java 1.4. Gegenüber dem Windows Look and Feel von Sun korrigiert es viele Feinheiten, wie passende Insets bei Eingabefeldern, Icons, Farben, Rahmen, den richtigen Font, Menüeigenschaften, Auflösungen von 96 und 120 dpi und vieles mehr.

Gesetzt wird Looks wie jedes andere Look & Feel:

try {
String laf =
LookUtils.IS_OS_WINDOWS_XP
? Options.getCrossPlatformLookAndFeelClassName()
: Options.getSystemLookAndFeelClassName();
UIManager.setLookAndFeel( laf );
} catch ( Exception e ) {
System.err.println( "Can't set look and feel:" + e );
}


PS: winlaf habe ich rausgeschmissen, denn die Entwicklung geht mit Looks weiter.

AddThis Social Bookmark Button

Mittwoch, August 09, 2006

Inselupdate: Entwicklung der Servlet/JSP-Spezifikationen und Webserver mit Servlet-Funktionalität

Entwicklung der Servlet/JSP-Spezifikationen

Servlets gibt es schon seit 1995 und damit sehr lange. JSPs kamen etwas später, habe sich jedoch genauso in den Jahren weiterentwickelt. Während die ersten Versionen 1.0 und 1.1 ausschließlich Sun entwarf, lag beginnend bei der Spezifikationen für JSP 1.2 und Servlet 2.3 der Entwurf beim Java Community Process (JSR 53). Ende 2003 ist der Abschluss vom JSR 152 für die JSP 2.0 und JSR 154 für die Servlet 2.4 Spezifikation. Im Mai 2006 gab es kleine Aktualisierungen der JavaServer Pages auf Version 2.1 (JSR 245) und ein „Maintenance Release“ beim bestehenden JSR 154 als Servlet 2.5 Spezifikation. Sie integrierten die neuen Spracheigenschaften von Java 5, etwa die Annotation @Resource zum Injizieren von Objekten aus dem JNDI. Beide Standards sind Teil von Java EE 5.

Webserver mit Servlet-Funktionalität

Sun führt auf der Firmen-Webseite http://java.sun.com/products/servlet/industry.html eine Liste von servlet-fähigen Servern auf. Ein Server ist genau dann servlet-fähig, wenn er die Java-Servlet- und JSP-Spezifikation erfüllt. Drei freie Server sind:

  • Apache Tomcat. Tomcat ist die offizielle Referenzimplementierung, doch implementiert der Sever zurzeit noch nicht den neusten Standard, sondern lediglich die Servlet 2.4- und JSP 2.0-Spezifikation. Zum Testen von Servlets und JSPs kann Tomcat entweder als Standalone-Applikation eingesetzt oder auch in den Apache-Server eingebunden werden. Er ist wie der Apache-Server frei und zu finden unter http://jakarta.apache.org/tomcat.
  • Jetty. Ein weiterer freier HTTP-Server und Servlet-Container unter der Apache-Lizenz ist Jetty (http://jetty.mortbay.org/). Jetty lässt sich leicht in eigene Programme einbauen, die Servlet/JSP-Funktionalität benötigen, um etwa Web-Services anzubieten. Jetty 6 bietet Unterstützung für den aktuellen Servlet 2.5 Standard.
  • GlassFish. Die Servlet-Engine kann integraler Bestandteil eines Applikationsservers oder eigenständig sein. GlassFish (https://glassfish.dev.java.net/) ist ein Java EE 5 Container, dessen integrierter Webserver die Servlet 2.5 Unterstützung bietet. Bisher ist der Webserver integraler Bestandteil von GlassFish, doch gibt es Bestrebungen, in aus dem Container herauszulösen und Standalone für Verfügung zu stellen.

AddThis Social Bookmark Button

Dienstag, August 01, 2006

Permission und Rechteinklusionen

Mit den Permission-Objekten testet implies(), ob ein Recht Teil eines anderen Rechts ist. Das Beispiel zeigt eine Anwendung:


import java.io.FilePermission;
import java.security.Permission;

public class PermissionImplies
{
public static void main( String[] args )
{
Permission perm1 = new FilePermission( "c:\\windows\\*", "read,write" );
Permission perm2 = new FilePermission( "c:\\windows\\fonts", "read" );

if ( perm1.implies(perm2) )
System.out.println( perm1 + " implies " + perm2 );

if ( !perm2.implies( new FilePermission("c:\\windows\\fonts", "write") ) )
System.out.println( perm1 + " not implies " + perm2 );
}
}

AddThis Social Bookmark Button