GWT 1.5 fertig

HOWTO Build a REST-Application with Jersey and Jetty

Resource first:


package com.tutego.traida.server;

import javax.ws.rs.*;

@Path( "/" )
public class GreetingResource
{
@GET @ProduceMime("text/plain")

public String get()
{
return "Yea!";
}
}

Bring it to Jetty


package com.tutego.traida.server;

import org.mortbay.jetty.Server;
import org.mortbay.jetty.servlet.Context;
import org.mortbay.jetty.servlet.ServletHolder;
import com.sun.jersey.spi.container.servlet.ServletContainer;

public class Application 
{
public static void main( String[] args ) throws Exception
{
ServletHolder sh = new ServletHolder( ServletContainer.class );

sh.setInitParameter( "com.sun.jersey.config.property.resourceConfigClass",
"com.sun.jersey.api.core.PackagesResourceConfig" );
sh.setInitParameter( "com.sun.jersey.config.property.packages", "com.tutego.traida.server" );

Server server = new Server( 9999 );
Context context = new Context( server, "/", Context.SESSIONS );

context.addServlet( sh, "/*" );
server.start();

}
}

To use REST-parameters


@Path( "/edit-customer/{customerid}" )
public class EditCustomerResource
{
@GET @ProduceMime("text/plain")
public String editUser( @PathParam("customerid") String customerId )
{
....
}
}

HOWTO Add a JDBC DataSource/JNDI to GlassFish

Use asadmin with option create-jdbc-connection-pool first:

asadmin create-jdbc-connection-pool --datasourceclassname org.apache.derby.jdbc.EmbeddedDataSource --property databaseName=\$\{com.sun.aas.instanceRoot\}/databases/tutegodb:connectionAttributes=\;create\=true tutegoPool


Use asadmin again to install the actual JNDI name:



asadmin create-jdbc-resource --connectionpoolid=tutegoPool jdbc/tutego


To remove the pool and all attached JNDI names:



asadmin delete-jdbc-connection-pool --cascade tutegoPool

Labels:

DZone-Interview mit Sacha Labourey über JBoss AS 5

Gibt es unter http://java.dzone.com/videos/tech-chat-sacha-labourey-jboss.

Natürlich galt es im Interview zu klären, warum man auf JBoss 5 so lange warten muss. Fertig ist er aber immer noch nicht!

We are very close to GA.

Warum noch immer nicht soweit? Weil der JBoss einen ganz neuen Microcontainer bekommt und weil unter anderem die Messaging-Lösung (JBoss Messaging) neu entwickelt wurde und JBoss 5 einen neuen Transaktions-Monitor bekommt. Einen Lacher erntet er bei mir aber mit:

Intuitively people usually think that it is an issue with the J2EE spec and how much time it took us to implement this pretty significant update of the J2EE spec.

JBoss war immerhin einer der ersten Container, die EJB 3 unterstützten. Aber Web-Services machen den JBoss 4 immer etwas Probleme, was auch an der Integration von Axis lag.

Ich sehe eher weniger gute Zukunfsaussichten für JBoss. Mit der wachsenden Popularität von GlassFish und Geronimo wird JBoss 5 zu kämpfen haben. GlassFish und Geronimo/IBM WASCE sowie WebLogic Server v10.0, SAP NetWeaver 7.1, Apusic Application Server, TmaxSoft JEUS 6, NEC WebOTX 8.1 sind (zum Teil schon sehr lange) Java EE 5 zertifiziert (http://java.sun.com/javaee/overview/compatibility.jsp) und JBoss 5 hat das auch noch vor sich.

Weiterhin glaube ich in der Java-Community einen Trend in Richtung der Sun-Implementierungen erkennen zu können, was zum Beispiel die RI für JavaServer Faces, aber auch etwa JAX-WS für Web-Services angeht. Interessant ist auch, dass GlassFish die JSP-Servlet-Übersetzung optimiert über JSR 199 regelt, eine Entwicklung, die eben nicht von Tomcat ausgeht. So nutzt auch Jetty das. (Schon 2006 war zu lesen: "patch to allow Jetty to use JSP2.1 from Glassfish instead of Jasper from Tomcat"). Von GlassFish geht im Moment ein sehr starker Zug aus und es bleibt sehr spannend.

Labels: ,

MouseScrollableUI für JXLayer

Browser haben mich zum ersten Mal auf ein Gui-Feature aufmerksam gemacht, das folgender Screenshot am Besten erklärt:

demo screenshot

In der Tabelle erkennt man ein Symbol, mit dem sich leicht durch große Views scrollen lässt. Aktiviert wird diese Möglichkeit über die mittlere Maustaste.

Nun ist so etwas auch einfach für Swing über einen Dekorator möglich:
JScrollPane sp = JScrollPane( table );
JXLayer<JScrollPane> lsp = new JXLayer<JScrollPane>( sp, new MouseScrollableUI() );
container.add( lsp );

Labels:

Thema der Woche: Refactoring

Refactoring von Code ist eine wichtige Aufgabe von Entwicklern neben der Neuentwicklung von Programmcode. Die Pflege und Aufarbeitung darf natürlich nicht zum Selbstzweck werden, aber langlebige Software muss zwingend für immer die Kriterien Wartbarkeit und Erweiterbarkeit bewahren und gut dokumentiert und verständlich sein.

Den größten Einfluss auf das Thema Refactoring hat das Refactoring-Buch von Martin Fowler, der auf seiner Webseite das Prinzip Refactoring, Refactoring-Tools und News auflistet.

Martin Fowler hat mir erlaubt, seinen Refactoring-Katalog auf Deutsch zu übersetzen: http://www.tutego.com/java/refactoring/catalog/. Gehe kurz über alle Refactorings.

Moderne IDEs erlauben von Haus aus das Refactoring von Code. Im Fall von Eclipse finde zu jedem unterstützten Refactoring ein Beispiel und lasse es von Eclipse umbauen:

Labels:

GWT 1.5 RC2

Bezug unter http://code.google.com/webtoolkit/download.html . Changelog unter http://code.google.com/webtoolkit/releases/release-notes-1.5.1.html#Release_Notes_Current . Grundsätzlich für GWT 1.5:
  • Java 1.5 Support
  • Compiler Enhancements to Improve Application Speed
  • UI Library Additions: Widget Animations, Visual Themes
  • DOM API for simplified DOM Programming
  • Internationalization Improvements: Bi-di, Pluralization
  • Accessibility Support
  • Enhancements to the JRE Emulation Library

Labels: , ,

Eclipse-News

Seit dem 8.8. ist nicht nur Olympia, sondern es es gibt auch den ersten Milestone von 3.5. Die Neuerungen sind aber seeehr mager und bis zur endgültigen Version ist ja auch noch viel Zeit. Bei NetBeans tut sich zur Zeit mehr.

Plugin-News:

  • WindowBuilder ist ein WYSIWYG-Gui-Builder für Swing, SWT und auch GWT.

    http://www.instantiations.com/images2/wbp/wb-screenshot.png

  • PyDev. Von der Pyhthon-IDE gibt es ebenfalls Neues. Ältere Screenshots:




  • ANTLR IDE

    http://antlrv3ide.sourceforge.net/resources/screenshot.png

    http://antlrv3ide.sourceforge.net/resources/interpreterview.png

Labels: ,

Erster Java Closures Prototype im openjdk

Von http://gafter.blogspot.com/2008/08/java-closures-prototype-feature.html:

The complete source code, released under GPLv2, is in the project's openjdk repository. A binary build, suitable for use with an existing JDK6, is at http://www.javac.info/closures.tar.gz. Other related documents are on the website http://www.javac.info/

Neu sind Method references aus dem  FCM proposal:

{ String => int } parseInt = Integer#parseInt(String);
int x = parseInt.invoke("42");


Damit wird es immer wahrscheinlicher, dass es Closures in Java 7 gibt, obwohl Zeitpunkt und Inhalte immer noch nicht feststehen.

Labels:

Generics zum Verstecken von Exceptions

Im Blog http://nat.truemesh.com/archives/000738.html schreibt Nat über eine interessante Anwendung von Generics zur Vermeidung von lästigen throws im Fall von RuntimeExceptions.

Der Ampel-Bär

Das CI-System Hudson wird immer populärer und lustige Dinge kommen dazu:
http://hudson.gotdns.com/wiki/pages/viewpage.action?pageId=20250625. Gefunden unter http://blog.last.fm/2008/08/01/quality-control