Java SE 7 Developer Preview Release verfügbar

Oracle schreibt im Blog http://blogs.oracle.com/java/2011/02/java_se_7_developer_preview_release_now_available.html , dass die Java SE 7 Developer Preview Release verfügbar ist. Download unter http://jdk7.java.net/preview/.

Interessant ist, dass JSR 308 nicht Teil von Java 7 sein wird und gemachte Änderungen wieder rausfliegen: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7015156.

Eine echtere Änderung ist auch http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7012540, hier muss ich in der Insel etwas umbenennen.

Weiterhin sind NIO2 Methoden hinzugekommen, auch etwas, was ich für die kommende Version aktualisieren muss: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7006126. Die neue Files-Klasse geht in Richtung Google Guava.

Auch http://hg.openjdk.java.net/jdk7/jdk7/jdk/rev/82c8c54ac1d5 ist gefixt.

Thema der Woche: Kindle-HTML auf Korrektheit prüfen

Der eBook-Reader Kindle kann HTML-Seiten anzeigen, ist allerdings mit dem HTML etwas eingeschränkt. So sind nur ganz bestimmte HTML-Tag und dann auch nicht alle Attribute erlaubt. Der Anhang “Appendix. Supported HTML tags" in der PDF “Amazon Kindle Publishing Guidelines. How to make books available for the Kindle platform” erklärt welche.

Aufgabe: Schreibe ein Java-Programm, welches eine HTML-Datei (wir können vereinfacht annehmen XHTML) analysiert, ob nur unterstützte HTML-Tags und Attribute vorkommen und andernfalls eine Fehlermeldung ausgibt. Hinweis: Natürlich soll das Programm nicht aus 100 Fallunterscheidungen bestehen, sondern das ganze soll etwas clever programmiert werden. Könnte ein Guava Typ wie com.google.common.collect.Mulimap vielleicht helfen?

Java taucht nix für Enterprise? Meine Gedanken

Nach dem Eintrag im Blog (http://www.tutego.de/blog/javainsel/2011/02/forrester-untersuchung-sagt-java-taugt-nix-fr-enterprise/) über die Forrster Studie fragte ein Kommentator nach meiner Einschätzung. Also, taucht Java ab oder taugt es?

Es ist schwer einen Anfang zu finden, denn verschiedene Sachen laufen immer durcheinander. Zunächst ist Java eine Vereinigung:

Java = JVM + Java als Programmiersprache + Java SE Lib + Java EE Lib (wenn man Enterprise hinzunehmen möchte)

Man könnte noch “Great Communitiy” oder große Anzahl Open-Source Libs dazu nehmen, aber darauf kommt es jetzt nicht an.

An den Gliedern kann man anfangen unter verschiedenen Bewertungskriterien rumzunörgeln. Es steht außer Frage das die JVM unglaublich leistungsfähig ist. Bei der Programmiersprache Java fängt aber die Kritik schon an – bei der Java SE geht es weiter. Java EE kann man auch kritisieren, jedoch für einen anderen Grund.

  • Die Sprache Java hat sich die letzten Jahre nicht gewandelt, aber Skriptsprachen zeigen zum Beispiel deutlich den Trend auf, Collection-Unterstützung in den Sprachkern aufzunehmen und Closures sowie funktionale Aspekte zu unterstützen desweiteren Nebenläufig besser anzugehen.
  • Die Bibliotheken haben deutliches Potenzial. Einmal horizontal (unterschiedlichen Technologien) wie vertikal (in der Tiefe). Wenn Java SE schon fertig wäre, wäre Apache Commons * oder Google Collections/Guava gar nicht nötig. Wenn Java EE auch den Web-Technologie-Teil abdecken soll, OOOHA, da ist noch viel zu tun.

Der Autor der Studie ist nicht gegen Java: die Folien zeigen, das Java in vielen Bereichen perfekt passt. Er macht aber klar, dass Java eben nicht für jedes Problem die Antwort ist. Da hat der Mann natürlich Recht! Mit der Banane einen Nagel in die Wand zu schlagen wird auch kompliziert. Java ist explizit als General Purpose Sprache entworfen worden. Das heißt: Für alles und nichts! Während man außer Frage stellt, Java im Bereich Treiberprogrammierung einzusetzen, versuchen viele Java (also die Sprache + Java SE + Java EE) dort einzubringen, wo es bessere Lösungen gibt. Java ist im Gui-Bereich einfach schwach. Punkt. Gui ohne Databinding? Nicht gut. (Es geht immer noch darum, dass es kein Teil der Standard-Bibliotheken ist. Natürlich gibt es Databinding am Open-Source-Himmel … sogar gaaaanz viele Lösungen.) Es steht außer Frage, dass man mit Swing und JSF absolut geile Lösungen bauen kann. Doch Softwareentwicklung besteht nicht daraus, mit ein paar Experten ein System zu bauen; gibt Experten FORTRAN oder COBOL und auch dann wird das Design super sein.

Die zentralen Schwachpunkte im Gui-Bereich sind:

  • Zu kompliziert mit den STANDARD-Frameworks für den Durchschnitts-Joe. In einer Tabelle eine Fließkommazahl mit zwei Nachkommastellen zu formatieren muss einfacher gehen als extra einen Cell-Renderer zu programmieren.
  • Für echte Oberflächen muss man zukaufen, OS-Libs nehmen, oder stark in Eigenentwicklung investieren. Databinding gibt es, klar, aber eben nicht im Java SE. Man schaue nur auf Eclipse RCP und dann sieht man, was in Swing alles fehlt.
  • Agil mal eben schnell eine Änderungen umzusetzen geht nicht.

WENN man also Gui-Entwicklung zur Enterprise-Entwicklung zählt – und das tut der Autor der Studie, das ist aber auch Diskussionssache – hat er mit seiner Kritik recht. Mich wundert, was es an dem Punkt zu diskutieren gibt. Die Diskussion gleitet schnell in die Richtung das man sagt: Ja, aber in Ruby, mit Eclipse RCP, mit Vaadin, mit bla, … geht das alles! Stimmt, es geht aber hier um pures Java und um das, was in Java SE/Java EE von Oracle kommt. Hier hat eben Java nichts zu bieten. Ich finde Swing toll und mag es, aber für heutige Richclient-Anwendungen ist das nichts. Auch JSF ist nichts für moderne RIA-Anwendungen. Viel zu HTML-lasting.

Java EE ist im Kern ausgereift und für Geschäftslogik und Persistierung nahezu perfekt. Container wie GlassFish machen es rund. Hier liegt nicht das Problem. Entwickler großer Anwendungen müssen lernen das richtige Tool für den Job zu finden. Im Enterprise Bereich ist Java EE 6 ein guter Anfang für das Backend. Den Gui-Bereich können wir aufgeben. Klar, das es mit Swing und JSF “irgendwie geht”, aber wie gesagt: es darf keine Technologie für Experten sein. Es wird natürlich immer Softwareentwickler geben die sich wünschen, das eine Technologie für Experten ist, aber es geht um Wirtschaftlichkeit, ob wir das wollen oder nicht. Und wenn eben ein Swing-Entwickler für einen neuen Button 20 Minuten im Quellcode braucht, der Silverlight-Entwickler aber nur 5 Minuten, ist klar, wie die Rechnung aussieht. Und selbst das ist noch viel zu low-level gedacht.

Selbst wenn man Java aufbohrt und pimpt bis zum Abwinken mit Business-Rules-Engine, alles in dynamischen Programmiersprachen auf der JVM entwickelt, usw. usw., es wird immer noch zu viel selbst gebaut. Entwickler müssen lernen, sich in komplexe existierende Systeme einzuarbeiten, und auf deren Basis eigene Lösungen entwickeln. Im Web-Bereich sei einmal der JBoss-Stack oder Alfresco in den Raum geworfen, aber auch richtig fette Sachen wie SAP, auch wenn vielen das nicht gefallen dürfte. Oder Talend zur Konvertierung. Der Autor der Studie lässt Alternativen vielleicht bewusst offen (RoR wird genannt im Web-Bereich) und ich vermute einfach deswegen weil es keine Alternativen gibt! Oracle bietet eine wunderbare Basis aber es liegt an uns, mächtigere Framworks, und dann auch DSL für spezifische Probleme zu nutzen. Java hat seinen Platz und ist eben nicht für alles zu gebrauchen. Ich erinnere mich gut an dBASE, das zeigt schon vor über 10 Jahren die Richtung auf: Eine Entwicklungsumgebung mit Programmiersprache. Das ist Rapid Application Development von datatenbankgetriebenen Anwendungen. Eigenentwicklung wird es immer geben, aber für gewisse Probleme funktionieren wunderbar 4GL-Lösungen.

JBoss jBPM in der Version 5

Die Hauptseite http://www.jboss.org/jbpm zählt als Neuerungen auf:

jBPM5 is the latest community version of the jBPM project.  It is based on the BPMN 2.0 specification and supports the entire life cycle of the business process (from authoring through execution to monitoring and management).

The current jBPM5 snapshot offers open-source business process execution and management, including

  • embeddable, lightweight Java process engine, supporting native BPMN 2.0 execution
  • BPMN 2.0 process modeling in Eclipse (developers) and the web (business users)
  • process collaboration, monitoring and management through the Guvnor repository and the web console
  • human interaction using an independent WS-HT task service
  • tight, powerful integration with business rules and event processing

Contracts für Java

Ein neues Projekt eines Google-Mitarbeiter verspricht Zusicherungen zur Laufzeit zu prüfen. Ankündigung: http://google-opensource.blogspot.com/2011/02/contracts-for-java.html, Projekt unter http://code.google.com/p/cofoja/. Mal sehen wie sich das entwickelt, im .NET Umfeld ist da einiges im Gange. In Java 7 waren mal einige Annotationen geplant, die sind aber gestorben. @NotNull und so weiter hat sich als sehr nützlich erwiesen, das funktioniert in der Praxis.

Hat Apache bei Sun/Oracle doch geklaut?

Es geht die Frage um, ob Harmony bei Suns Implementierung geklaut hat. http://fosspatents.blogspot.com/2011/01/new-evidence-supports-oracles-case.html gibt ein Diff der compilierten Dateien und zeigt große Ähnlichkeiten auf. Ich stimme dem zu, dass das geklaut ist, denn so gleiche Implementierungen zu wählen halte ich für absolut unwahrscheinlich aus folgenden Gründen:

  • Einen Vector mit der Größe 10 (an anderer Stelle 20) vorzuinitialisieren und dann 10 (an anderer Stelle 20) als capacity-increment zu wählen ist sehr speziell; das exakt so zu machen ist eigentlich ausgeschlossen. Mein stärkster Indiz, das das geklaut ist.
  • Objektvariablen explizit auf null/false/0 zu setzen ist Unsinn; warum sollte Apache den Quatsch wiederholen?
  • Private Methode heißen alle gleich, was aber natürlich ein Implementierungsdetail ist. findTable() etwa ist nicht gerade naheliegend.
  • Warum nennen beide die (privaten) Variablen gleich, insbesondere permissionSet und nicht etwas permissions?

Code: http://www.docstoc.com/docs/69702407/1-AclEntryImpl-synopsis, http://www.docstoc.com/docs/69702409/2-AclImpl-synopsis.

Spiel Poisonville eingestellt. Ist Java daran Schuld?

Mit viel Tam-Tam hat das Hamburger Unternehmen Bigpoint vor anderthalb Jahren auf der Spielemesse GCO 2009 in Leipzig einen Brower-basierteren GTA-Klon vorgestellt:

Jetzt stelle Bigpoint das Spiel ein und erklärt das mit den “vielen Fehlern der Java-Plattform”. Siehe

Details sind leider nirgendwo aufgeführt. Wer weiß mehr über diese Probleme? Kann es sein, dass das Spiel einfach nicht am Markt ankam und Java jetzt Sündenbock ist?

JDK 7 ist eigentlich schon fertig

so schreibt es Mark Reinholt http://mreinhold.org/blog/jdk7-fc/. Was das heißt?

This means that all of the planned features have been implemented and integrated into the master forest, along with their unit tests, and all other planned tests have been written and run on a representative set of platforms.

Zwei Detailverbesserungen fehlen allerdings noch, was zu XML und JMX.

Spezifikation werden parallel geupdated wenn das nötig wird.

Thema der Woche: Valide XML

  • XML-Dokumente müssen well-formed und können valide sein. Was heißt das?
  • Kann man mit JDOM eine nicht well-formed XML erstellen?
  • XML-Validierung über Schema ist die übliche Art die Korrektheit von XML-Dokumenten zu garantieren. Was kann XML-Schema für Kriterien garantieren, was nicht?
  • Suche aus dem Internet ein XML-Schema und generiere eine XML-Datei mit Standard-DOM. Aktiviere die Validierung und versuche etwas nicht-valides zu schreiben. Welche Fehler werden produziert und wie kann man sie behandeln?