mobile.de nutzt also Tomcat, Spring und Freemarker

Aufruf von http://suchen.mobile.de/fahrzeuge/anbieter-521268-seite81-112.html

macro city [on line 30, column 9 in search/vlisting/listSearchResults.ftl] in user-directive city [on line 76, column 229 in search/vlisting/listSearchResults.ftl] in user-directive rd.html [on line 62, column 9 in search/vlisting/listSearchResults.ftl] ———- Java backtrace for programmers: ———- freemarker.template.TemplateException: Error executing macro: city required parameter: resultView is not specified. at freemarker.core.Macro$Context.sanityCheck(Macro.java:181) at freemarker.core.Macro$Context.runMacro(Macro.java:161) at freemarker.core.Environment.visit(Environment.java:537) at freemarker.core.UnifiedCall.accept(UnifiedCall.java:128) at freemarker.core.Environment.visit(Environment.java:196) at freemarker.core.MixedContent.accept(MixedContent.java:92) at freemarker.core.Environment.visit(Environment.java:196) at freemarker.core.Case.accept(Case.java:80) at freemarker.core.Environment.visit

:

:

org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:542) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151) at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200) at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283) at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773) at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703) at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685) at java.lang.Thread.run(Thread.java:619)

Wenn man in Google nach "org.springframework.web.servlet.view" sucht,  bekommt man auch noch mehr indexierte Webseiten, die diese Fehler aufweisen.

Java AMF Client aus BlazeDS ziemlich beschränkt

BlazeDS (http://opensource.adobe.com/wiki/display/blazeds/BlazeDS/) ist

the server-based Java remoting and web messaging technology that enables developers to easily connect to back-end distributed data and push data in real-time to Adobe® Flex™ and Adobe AIR™ applications for more responsive rich Internet application (RIA) experiences.

Zunächst habe ich angenommen, das die API symmetrisch ist, also nicht nur Java auf der Serverseite das Protokoll VOLLSTÄNGIG implementiert, sondern auch auf der Clientseite. Ursprünglich gab es gar keine Java-Client-API, aber mit http://opensource.adobe.com/wiki/display/blazeds/Java+AMF+Client ist die Klasse http://livedocs.adobe.com/blazeds/1/javadoc/flex/messaging/io/amf/client/AMFConnection.html dazugekommen.

Using this feature, customers will be able to write and read AMF messages using Java on the client (i.e. no Flash player). This in turn will enable Java applications talk to AMF compliant servers such as BlazeDS, LCDS, or AMFPHP.

Beispiele, wie mit dieser API ein remote-Aufruf gemacht wird, zeigen etwa

  • http://www.infoaccelerator.net/blog/post.cfm/remoting-from-java-to-coldfusion-by-example
  • http://java.dzone.com/news/calling-flex-data-services-piv

Nun interessieren mit RCP-Aufrufe überhaupt nicht, viel interessanter fand ich Messaging-Möglichkeiten über RTMP (http://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol). Doch das gibt es leider in BlazeDS nicht, wie die Doku schreibt:

What this feature is not: 1) It is not full implementation of BlazeDS Actionscript client libraries. It will strictly be a mirror of Flash player’s NetConnection but no Channels will be built on top of it. Similarly, no Consumer, Producer, etc. of BlazeDS will be implemented on top. 2) Flash player’s NetConnection supports RTMP. AMFConnection will not support RTMP, and hence the name AMFConnection instead of NetConnection.

Vielleicht wird ja http://www.osflash.org/red5 eine vollständige Java-Client-API für  RTMP anbieten.

Thema der Woche: Abdecker

Bei der Codeabdeckung geht es darum herauszufinden, wie viel Programmcode ein Test (etwa von JUnit) abläuft. Wirf einen Blick auf

Schreibe einen eigenen Testfall mit JUnit und suche eine Apache-Commons-Bibliothek mit Testfällen aus und lasse ein Coverage-Tool laufen.

http://www.atlassian.com/software/clover/ ist ein kommerziellen Tool. Finde heraus, was Clover im Gegensatz zu den freien Tools für Vorteile hat.

macwidgets – Collection of Mac style widgets written in Java

Gibt es unter http://code.google.com/p/macwidgets/. Von der Webseite:

Mac Widgets for Java are a collection of widgets seen in OS X applications, offered in a Java API. These widgets help Java developers create more Mac-like applications. There usage is not restricted to Mac though, as they will render across platforms.

Sieht nett aus und die API ist einfach zu nutzen.

Darauf hat die Welt gewartet: Wieder ein neues/altes Web-Framework

Apache Click http://incubator.apache.org/click/ heißt es und läuft ab Java 1.4. Super. Kommt damit 5 Jahre zu spät. Also nix mit Annotationen. Schön XML und so. (Click 0.3 gab es auch schon im März 2005, also ist das Projekt nicht wirklich jung.) Das Wort Ajax taucht auf den ganzen Webseiten nicht auf. Immerhin gibt es eine http://incubator.apache.org/click/docs/click-ide.html auf Eclipse 3.4 Basis. Toll die Antwort auf die Frage "Why develop a new Web Application Framework?" Antwort: "Because the existing frameworks did not meet my needs. Struts doesn’t really do much, while Tapestry is too complicated. For a more comprehensive answer please see Why Click." Klar, als ob es nur Struts und Tapestry gibt. Vor 10 Jahren vielleicht. Bei Struts 1.x ist die Zeit schon lange abgelaufen und bei Tapestry 5 hält man sich noch ein wenig mit DI/IoC über Wasser.

Buchkritik: Pragmatic Unit Testing in Java with JUnit

Andy Hunt, Dave Thomas. The Pragmatic Bookshelf. ISBN 0-9745140-1-2. September 2003. 146 Seiten
Kompaktes und nicht allzu tiefes Buch zu Testkonzepten und dem Testframework JUnit 3.x. Gut gefallen haben mir die Vorstellung des CORRECT-Prinzips (Conformance, Ordering, Range, Reference, Existence, Cardinality, Time), die Kurzvorstellung von Mock-Objekten (hier hätte ich mir allerdings etwas mehr Hinweise gewünscht, wobei immerhin Frameworks wie EasyMock zur Sprache kommen) und die Diskussion, wie die Testbarkeit das Systemdesign (positiv) beeinflusst. Die Codequalität ist in Ordnung, aber Anweisungen wie Integer.valueOf(val).intValue() hätte ich gerne als Integer.parseInt(val) gesehen, denn der Aufbau eines Wrapper-Objekts (lassen wir das Caching aus Java 5 außen vor) ist völlig unnötig (aber immerhin ist die Fabrikmethode noch besser als new Integer(val), denn sie kann immerhin auf die gecachten Wrapperobjekte im JDK zurückgreifen ). Die Namenskonvention von Sun hält der Autor bei Variablennamen nicht ein (argument_list, small_list, naughty_url, num_degrees), wobei er auch kein konsistentes Nicht-Einhalten betreibt (ingredientsText oder exitButton). Größtes Dilemma dieser Ausgabe ist aber ihr Alter, da nicht der JUnit 4.x-Zweig verwendet wird ebenso wenig wie Java 5, also keine Generics oder Annotationen. Mit der relativ flachen Beschreibung ist das Buch heute wenig attraktiv.

emite – Chat-Client und GWT XMPP Bibliothek

Eine tolle GWT-Anwendung/Bibliothek ist http://code.google.com/p/emite/:

Der Chat-Client läuft im Browser als GWT-Anwendung. Über einen Proxy kann dann der Client (Browser) direkt mit dem Xmpp Server sprechen. (Noch ist ein Proxy nötig, siehe http://ejohn.org/blog/cross-site-xmlhttprequest/). Das heißt, emite implementiert das Extensible Messaging and Presence Protocol (XMPP), um über Bidirectional-streams Over Synchronous HTTP (BOSH) die Daten zum Chat-Server zu senden. Da emite auf der einen Seite eine Bibliothek ist und auf der anderen Seiten ein Chat-Client mit der hübschen Gui, lässt sich die Bib. natürlich auch getrennt nutzen; eine Nachricht wird etwas so versandt:

Session session = Suco.get(Session.class);
session.login(XmppURI.uri("me@domain", "myPassword");
Message message = new Message("send this");
session.send(message);

Intern setzt emite auf http://code.google.com/p/suco/ auf. Suco ist ein einfaches DI-Framework für GWT-Applikationen zusammen mit einem Eventing-Framework. (Suco ist nicht Annotationsgetrieben, da kein echtes Reflection mit GWT möglich ist. Mit einem speziellen Builder könnte man da aber was machen. Hm…)

GWT API’s for SmartClient

SmartClient Ajax (http://www.smartclient.com/) ist eine (weitere) Ajax-Bibliothek für RIA-Anwendungen. Die Demos unter http://www.smartclient.com/index.jsp#_Welcome zeigen auch, was man heute von RIA-Frameworks erwartet: Nette Komponenten, Layout-Manager und Data-Binding über diverse Datenquellen. Es geht nicht nur um hübsche Widgets allein und die Optik ist auch nur OK. (Obwohl http://extjs.com/ in meinen Augen immer noch aus optischen Gründen vorne liegt, hat doch SmartClient Ajax einen sehr großen Vorteil: SmartClient Ajax platform now open source under LGPL. Ext JS ist, wenn man es denn kommerziell einsetzten möchte, nicht ganz billig.)

Für die JS-Library gibt es mit http://code.google.com/p/smartgwt/ auch eine GWT-Wrapper SmartGWT. Der Showcase liegt unter http://www.smartclient.com/smartgwt/showcase/, die JavaDoc unter http://www.smartclient.com/smartgwt/javadoc/. SmartGWT liegt wie auch SmartClient Ajax unter der LGPL. Der Port ist mehr oder weniger die (Fleiß)Arbeit einer Person Sanjiv Jivan. Die folgenden Screenshots stammen aus seinem Blog http://www.jroller.com/sjivan/entry/smartgwt_1_0_released:

Miller Columns

Filter Builder

NetBeans 7.0 Roadmap und NetBeans 7.0M1/M2

Die Roadmap sieht so aus:

NetBeans Roadmap

Der Development Plan spricht vom 22. Juni, dann soll die finale Version kommen.

Mit NetBeans 7.0M2 ist auch die zweite Version aus dem 7er-Zweig raus.

  • Milestone 1: NewAndNoteworthyMilestone1NB70
  • Milestone 2: NewAndNoteworthyMilestone2NB70
  • Ein paar Impressionen aus den M1 und M2:

    Verbesserte Maven-Unterstützung (super, wo doch jetzt Ivy immer mehr zur Alternative fürs dependency management (nicht builds!!) wird). In den Dialogen, Vervollständigung, Web-Services, …

    cos.jpg

    add-dep.jpg

    generate_code.jpg

     

    worthy-maven-generate.png

     

    worthy-maven-completion.png

    Viele Neuerungen aus dem PHP-Projekt (netbeans php blog)

    Und Ruby

    Aktualisierung auf JS 1.7

    http://blogs.sun.com/tor/resource/wrong-yield.png

    http://blogs.sun.com/tor/resource/yield-ok.png

     

    http://blogs.sun.com/tor/resource/e4x-completion.png

    Komlettes Redesign unter Mac OS

     

    maclaf.png

    Bessere Unterstützung fürs Profiling:

     

    FitnessViaPartnership/profileme.png

    SVG-Komponenten in NB Mobility

    VMD.png

    Von jHat eine interessante Unterstützung, um im Speicherbaum zumzusuchen.

    OQL_code_completion.png

    Bei der C++-IDE: Unterstützung zum Bau vom Qt-Applikationen, Macro-Expansion (Tooltip), Tastaturvervollständigung, Setter/Getter bauen.

    Vervollständigung bei Grails:

    worthy-groovy-editordynamic.png

    Insgesamt viele Änderungen, wobei die meisten Sachen nicht in der Java-IDE selbst passieren, sondern im Tooling  und in anderen Sprachen.

    Video: Java 7, Modularisierung, Jigsaw, was kommt, was geht, 2010

    Mark Reinhold spricht über Java 7

     

    Geplante Änderungen:

    Wird (wohl) nicht in Java 7 kommen wird:

    • Closures
    • Reified Generics
    • First Class Properties
    • Überladene Operatoren
    • BigDecimal Syntax
    • JSR 295: Beans Binding

    Der Hammer: Java 7 wird Anfang  2010 erwartet.

    Wer mal was inspirierendes hören möchte: Unter http://channel9.msdn.com/posts/Charles/C-40-Meet-the-Design-Team/ sprechen C#-Macher Anders Hejlsberg und weitere C#-Experten über die Zukunft von C# und .NET, insbesondere im Kontext dynamischer Sprachen. Hier läuft man meilenweit vor Java; und das Interview ist schon 1 Jahr alt… Unter http://code.msdn.microsoft.com/csharpfuture geht’s es dann mit ein paar Links zur C# 4 und Ideen zu C# 5 weiter.

    Linux Tools Project

    Dass Linux Tools Project fasst verschiedene Projekte wie automake, Valgrind, Systemtrap-Editoren zur Linux-Entwickung zusammen. Von der Eclipse-Webseite:

    The Linux Tools project aims to bring a full-featured C and C++ IDE to Linux developers. We build on the source editing and debugging features of the CDT and integrate popular native development tools such as the GNU Autotools, Valgrind, OProfile, RPM, Systemtap, etc. Current projects include Autotools build integration, a Valgrind heap usage analysis tool, and an OProfile call profiling tool.

    Drei Scrrenshots von New and Noteworthy:

    New OProfile View UI

    Thema der Woche: Pfuschen erwünscht

    In der C-Welt gibt es bisher Wettbewerbe für das verpfuschteste Programm (http://www.ioccc.org/). Unter Java gibt es bisher diesen Obfuscated Contest nicht. Aufgabe: Schreibe nach den offiziellen C-Pfusch-Regeln

    • To write the most Obscure/Obfuscated [C] program under the rules below.
    • To show the importance of programming style, in an ironic way.
    • To stress [C] compilers with unusual code.
    • To illustrate some of the subtleties of the [C] language.
    • To provide a safe forum for poor [C] code. 🙂

    ein Java-Programm. Beispiel:

    class _{static long _
    (long __,long  ___) {
    return __==0 ?___+ 1:
    ___==0?_(__-1,1):_(__
    –1,_(__, ___-1)) ;  }
    static  {int _=2 ,___
    = 2;System.out.print(
    "a("+_+‘,’+___+ ")="+
    _ (_,  ___)) ;System.
    exit(1);}}//(C)tutego

    Ich bin gespannt auf das beste (also schlechteste) Java-Programm…

    Zwei interessante GWT-Erweiterungen: Gilead und GWT-SL

    Sind

    Gilead (früher Hibernate4GWT), abgeleitet von "Generic Light Entity Adapter" ist ein interessantes Projekt mit folgendem Konzept:

    transform persistent entities back to simple Plain Old Java Object, by removing code instrumentation and replacing persistent collections with their regular counterpart.

    Kommt zum Beispiel eine JPA-Bean mit Assoziationen mit Eager-fetching rein, kommt ein vollständig geladener Objektgraph raus. Das ist praktisch genau dann, wenn man einen Daten-Service hat, den man von der GWT-Oberfläche zum Holen der Daten nutzt, aber die JPA-Implementierung baut diverse Proxies ein.

    Das SF-Projekt "GWT-Widgets" besteht aus zwei Teilen: Der GWT Server Library (GWT-SL) und der GWT Widget Library. Die GWT-SL ist eine GWT-Spring-Integration. Mit dem GWTRPCServiceExporter können etwa die Spring-POJOs als GWT-Services veröffentlicht werden. Die Doku stellt die Arbeitsweise kurz vor.

    IntelliJ IDEA 8.1

    JetBrains hat eine neue Version ihrer IDE herausgegeben: IntelliJ 8.1. Die Änderungen sind eher unter der Haube (wie Performance Optimierungen) als das groß neue Features implementiert wurden. Dennoch gibt es einiges Neues:

    IntelliJ IDEA Server

    To make all of your favorite settings (keymap, fonts and colors, inspection profiles, etc.) accessible from any computer where you run IntelliJ IDEA, create a JetBrains Account and log in with it to a dedicated JetBrains server at IntelliJ IDEA startup.

    Team Foundation Server integration

    Perform all common VCS functions (commit, update, revert, etc.) from IDE. Create and manage TFS workspaces, merge branches, lock and unlock files, view the changes history, and do more.

    Git integration

    Carry out common VCS operations right from IntelliJ IDEA, plus do Git-specific tasks like cloning of remote repositories, pushing and pulling of local repositories, rebasing (including interactive mode and multiple Git roots), and more.

    Perforce jobs support

    click to enlargeClick to enlarge

    IntelliJ IDEA Perforce integration now lets you list Perforce jobs, view their details and link them to arbitrary changelists. Jobs can be selected and linked directly from the Commit Changes dialog.

    Oracle SQL dialect support

    click to enlargeClick to enlarge

    SQL editor supports Oracle SQL dialect, with completion, validation and highlighting.

    Resin integration

    Resin application server is supported via the dedicated run configuration, with application deployment and debugging (both local and remote).

    Copyright plugin bundled

    Generate copyright headers for any type of source code and let IntelliJ IDEA automatically keep them up-to-date. All it takes is creating a template for the copyright text and specifying the scope to which it should be applied.

    Auswirkung von neuen Sprachkonstrukturen in Java 7 und Project Coin

    Joseph Darcy veröffentlichte schon vor 2 Jahren einen interessanten Blog-Artikel über die Änderungen, die enum mit sich brachte: JSL, Compiler, Bibliotheken, JVM-Spezifikation, usw. Da Sun sich mit dem neuen Modulsystem Jigsaw wohl ganz gut was vorgenommen hat, wird es große Änderungen an der Sprache (wie Closures oder Reified Generics) wohl nicht in Java 7 geben. Dennoch gibt es mit dem aktuellen Project Coin: Small Language Changes for JDK 7 einen neuen Versuch, zumindest einige Features unterzubringen, die mit wenig Aufwand implementiert werden können. Dazu zählen ein switch mit Strings oder die Möglichkeit, multiple Exceptions in einem catch zu fangen.

    Folien zum Einsatz von Annotationen in Spring

    Habe bei SlideShare interessante Folien zum Einsatz von Annotationen in der Spring-Entwicklung gefunden. Zunächst werden allgemeine Annotationen aus dem Java SE und besonders aus dem Java EE-Umfeld vorgestellt. Dann werden JPA und REST im Kontext von Spring an Beispielen erklärt. Zum Schluss folgt noch etwa Spring MVC und wie dort Annotationen die Konfiguration vereinfachen.

    JavaFX 1.1 veröffentlicht

    Unter der Homepage http://java.sun.com/javafx/ kann man nun die neue Version JavaFX 1.1 beziehen. Neuerungen sind:

    Key Release Components

    • Official support for JavaFX Mobile
    • Language improvements
    • Performance and stability improvements

    JavaFX 1.1 SDK

    • JavaFX Mobile Emulator enables developers to begin creating advanced and expressive mobile content.
    • Desktop Runtime update improves performance and stability.
    • Better support is provided for developing mobile or desktop applications from the same code base.

    JavaFX 1.1 Platform Features

    • Support for "full screen" applications
    • Improved support for applications that need to access resources across multiple domains
    • Standard navigation method for cross-device content

    Documentation

    JavaFX 1.1 Language

    • Addition of all Java numeric types (float, double, long, int, short, and byte) to the type system
    • Sequence performance and footprint optimizations
    • Dynamic footprint optimizations in animations

    Aptana Studio wird immer größer (Rails, pydev, …)

    http://www.aptana.com/ find klein an. Erst war es die PHP-IDE auf der Basis von Eclipse, nun ist auch noch die Python-IDE pydev dazugekommen und eine Entwicklungsumgebung für Ruby/Rails und Mobile Web.

    Das Geschäftsmodell bei pydev ist wie folgt: Während der Kern immer noch OpenSource bei http://pydev.sourceforge.net/ bleibt, kommt es kommerzielles Pydev Extensions hinzu. Die Webseite zählt für das Produkt etwa die folgenden Neuerungen auf:

    Für die IDE gibt es unter http://showmedo.com/videos/series?name=PyDevEclipseList zwei Screencasts.

    Thema der Woche: HTTP Header

    Das http://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol überträgt neben dem Content auch über Header wichtige Informationen wie MIME-Typ, Datenlänge oder Caching-Informationen.