Sonar http://sonar.codehaus.org/ (SONAR is a code quality management platform, dedicated to continuously analyze and measure technical quality, from the projects portfolio to the class method.) ist nun in der Version 1.6. Den besten Eindrück über das LGPL-Tool gibt die Webseite mit Beispiel-Metriken: http://nemo.sonar.codehaus.org/. Es gibt auch ein Hudson-Plugin für Sonar.
Autor: Christian Ullenboom
JRuby 1.2.0RC1 Released
Aus den News JRuby 1.2.0RC1 Released:
JRuby 1.2.0RC1 has fixed many many compatibility issues and continued to improve general performance. Highlights:
– Improved Ruby 1.9 support (via –1.9)
– Compiler now works
– Almost all of the missing 1.9 methods have been added
– New experimental –fast flag which does more aggressive optimizations
– Large scale compiler and runtime cleanup and performance audit
– Parsing is 3-6x faster now.
– Preliminary android support (Ruboto)
– Rails pathname issue fixed on Windows
– Major bug triage since last release
– 1052 revisions since 1.1.6
– 232 bugs fixed since 1.1.6
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
- http://java-source.net/open-source/code-coverage
- http://cobertura.sourceforge.net/
- http://www.eclemma.org/
- http://coverlipse.sourceforge.net/
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:
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:



NetBeans 7.0 Roadmap und NetBeans 7.0M1/M2
Die Roadmap sieht so aus:

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.
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, …





Viele Neuerungen aus dem PHP-Projekt (netbeans php blog)
- Generating Getters and Setters Improved
- SFTP support added
- Parameter Info
- Code completion for constructors
- Marking returns
- Go to type for class members – improved
- SQL code completion in the PHP editor
- Marking occurrences improved
Und Ruby
Aktualisierung auf JS 1.7



Komlettes Redesign unter Mac OS

Bessere Unterstützung fürs Profiling:

SVG-Komponenten in NB Mobility

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

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

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:
- re-throw
- null-dereference expressions
- Type-Inference — Wer zu viel Zeit hat, dem ist http://blog.henning.makholm.net/2008/11/java-50-type-inferences-is.html empfohlen
- Multi-Catch
- JSR 203 (More NIO, NIO2)
- JSR 296: Swing Application Framework
- SCTP
- SDP
- Unicode 5
- Swing-Updates wie JXLayer, DatePicker
- G1 GC
- JSR 308, http://groups.csail.mit.edu/pag/jsr308/
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:



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…
Java ME Anwendungen nach Android portieren
Das schafft das J2ME Polish-Projekt Janus + Zusatzbiblitotheken. Heise hat das Produkt kurz in den News vorstellt.
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
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
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
- Updates to JavaFX GUI tutorial with support for desktop and mobile
- Updates to the Media Browser tutorial to add support for advanced JavaFX features
- Improved JavaFX Script Programming Language tutorial and Reference Guide
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


