Thema der Woche(n): Java 2D

Erste Woche:

Zweite Woche

  • Lies und verfolge die Diashows und Beispiele unter http://www.matheprisma.de/Module/Lmayer/index.htm. Nur das Kapitel “erster Blick”, “L-Systeme und Kröten 1 2” (3 und weiter ist nicht nötig).
  • Was beschreibt die Regel F F+FF+F ?
  • Die Vorschrift lässt sich in einer Methode modellieren, in dem für F eine Methode f(), und für +, – Methoden left() und right() angenommen werden. f() selbst ruft sich rekursiv auf, etwa so: void f() { f(); left(); f(); right(); right(); f(); … }. Allerdings fehlt da noch etwas für den Winkel und die aktuelle Zeichenlänge; wie kommt die Paramater mit ins Spiel? Was bestimmt das Rekursionsende?
  • Schreibe eine Methode f(), die die Kochkurvemit Java 2D zeichnet.

Kann Apache ein Java alleine stemmen? Gedanken zur Festzeit

Ein Blog-Leser machte in einer EMail folgenden Vorschlag:

Aus Harmony und einem Fork vom OpenJDK sollte eine eigenständige Sprache werden, hauptsächlich unabhängig von Oracle und dem Original-Java.

Das brachte mich zum Nachdenken, welche Rolle Apache überhaupt noch spielt und ob Apache Java ohne Oracle treiben können, wie Harmony dort hineinspielt und wie Oracle Java verändert.

Meine Gedanken:

  • Harmony und OpenJDK kann man nicht vereinen, weil beide unter verschiedenen Lizenzen entwickelt wurden/werden.
  • Harmony ist eine Implementierung der Java SE-Bibliotheken. Es fehlen komplett der Compiler und die Laufzeitumgebung. Man hätte mit dem Eclipse-Compiler eine Alternative, aber es fehlt eine leistungsfähige freie JVM, die für den gesamten Stack nötig wäre. Davon ist die Community weit entfernt.
  • Harmony ist sehr unvollständig. Die “harten” und großen Teile fehlen, etwa Swing. Man siehe dazu nur auf die Webseite mit den Unterschieden. Die fehlenden Teile erst einmal nachzuliefern, um auf den Stand von Java 6 zu kommen, macht viel Mühe. (Siehe dazu auch Mono, die auch dem .NET-Framework hinterherhecheln.) Bei Android ist das egal, weil nur ein winziger Subset der Java SE-API genutzt wird und Harmony hier schon alles bot.
  • Java zu aktualisieren macht viel Mühe. James Gosling macht in einem Video (zu finden hier im Blog) den Kommentar, das Java zu pflegen sehr viel Arbeit macht. Java braucht Support für die Ewigkeit. Ich bezweifle, dass Apache das leisten kann – spezifizieren und implementieren/warten/dokumentieren sind immer noch zwei paar Schuhe. Hat Apache mit Harmony bewiesen, das sie in der Lage sind, eine ernsthafte API-Implementierung auf die Beine zu stellen? Das sehe ich nicht. Das ist alles viel zu unprofessionell. Ein alternativer Fork steht vor dem gleichen Problem. Es muss irgendwie an zentraler Stelle zusammenlaufen. Und Oracle gibt Java nicht aus der Hand.
  • Apache-Projekte werden immer irrelevanter und viele Projekte sind mehr und mehr verweist. (Siehe News http://jakarta.apache.org/site/news/news-2010-q3.html: von den 4 Meldungen aus diesem Jahr – alles danach ist älter als 1 Jahr! – sind 2 Hinweise, dass Projekte retired sind, also aufgegeben werden.) Es stimmt, dass Apache wichtige JSRs implementiert hat: Apache MyFaces (JSR 252, 314), Apache Tomcat (JSR 45,152,154,245,315), Geronimo im Java EE-Umfeld, Content-Repository Jackrabbit usw. Ich überspitze vielleicht, aber ich glaube, das Apache seine beste Zeit hinter sich hat. Tomcat ist nicht mehr die Referenzimplementierung für JSP/Servlets und an Tomcat 7 hat man gemerkt, wie lange es dauerte, Servlets 3 zu unterstützen. Jetty war hier schneller dabei. Das gleiche mit OpenJPA und JPA 2; hier gibt es Eclipse Link als Referenzimplementierung der JPA-Spezifikation. Wer nutzt OpenJPA? Geronimo? Hier ist GlassFish eine super RI; Geronimo zog erst später mit Java EE 6 nach. Und bis auf IBM gibt es keine große Unterstützung für das Projekt. Wer setzt MyFaces ernsthaft produktiv ein, wo es von Oracle eine gute RI gibt, die zackig auf dem Stand von JSF 2.0 war? Welche Apache-Implementierungen sind also heute wirklich essentiell? Klar: Ant, Maven, Lucene, POI. (Ironischerweise keine JSRs). Und sonst? Selbst die Apache Commons werden durch Lösungen wie Google Guava verdrängt. Und bei den Commons lässt sich gut ablesen, welche internen Diskussionen geführt werden, um etwa auf Java 5 upzudaten – Java 1.4 ist tot! Was bleibt dann noch von Apache übrig? Brauchen wir wirklich Apache als Implementierer von JSRs, die später kein Mensch nutzt? Im Linux-Bereich könnte man argumentieren, dass Gnome und KDE sich gegenseitig anheizen, aber das sehe ich bei den JSR-Implementierungen nicht.
  • Es bleibt die Frage, ob man Java Libs/Sprachfeatures/… außerhalb von Oracle spezifizieren könnte, etwa in im JCP oder in der OSGi-Alliance. Klar könnte man das! Doch dazu wird es aber nicht kommen. Oracle treibt Java nach seinen Kräften und Willen und will sich nicht reinquatschen lassen. Ich vergleiche das mal mit China: Demokratie ist toll, kostet aber Energie. Oracle zeigt bisher keine Motivation in die Demokratie investieren zu wollen und Endscheidungen sind hierarchisch. Das merke das auch als Java-Champion: Eigentlich sollten die JCs etwas mehr wissen (aber unter einer NDA vielleicht nicht darüber sprechen) – dem ist nicht so. Als sich Java 7 hinzog, hat keiner von Oracle mir eine klare Antwort gegeben, ob sich Java 7 verschieben wird (etwa 2 Monate vor dem geplanten Release im September 2010) und wenn, wie lange. JCs haben keinen Wissensvorteil und werden (im Moment) genauso doof gehalten wir alle anderen. Ich bin überzeugt, dass die Mitarbeiter alle schon wussten, das es mit Java 7 im September nichts wird, aber keine durfte es sagen.

Der Mehrzahl der Entwickler wird die Diskussion im Endeffekt egal sein. Wir alle wollen ein stabiles Java, was sich weiterentwickelt und gegen neue Sprachen und Frameworks konkurrenzfähig bleibt. Oracle ist der strenge Papi aber ich habe Zuversicht, dass Java bei Oracle gut aufgehoben ist. Wir müssen uns nur an eine neue Kommunikationskultur gewöhnen. Warten wir’s ab.

 

Wie denkt ihr darüber?

Thema der Woche: Java 6-Collections Upate

In Java 6 ist die Collections-API leicht umgebaut worden. Lies http://download.oracle.com/javase/6/docs/technotes/guides/collections/changes6.html.

Buchkritik: XDoclet in Action

Craig Walls, Norman Richards. Manning. ISBN 1-932394-05-2. 2004. 600 Seiten

XDoclet selbst stammt von Rickard Öberg, der auch das Vorwort für das Buch geschrieben hat, aber Craig (war selbst XDoclet Committer) und Norman leisten gute Arbeit, XDoclet vollständig zu beschreiben – Öberg hat Korrektur gelesen. Der Ursprung des Buches liegt laut Autoren in der Motivation XDoclet selbst besser zu verstehen, doch die Autoren sind allgemein und gründlich genug, damit Leser unterschiedlicher Bildungsschichten etwas davon haben. (Allerdings hört es in der Tiefe dann irgendwann einmal auf, das hat aber nichts mit XDoclet selbst zu tun, sondern etwa rund um EJB-Assoziationen.) Das erste Kapitel führt die Grundlagen von Codegenerierung ein und wie XDoclet ins Bild passt. Aktiver wird von passiver Codegenerierung unterschieden, unterschiedliche Ursprungsformen werden geschrieben und diskutiert ob und wie XDoclet ins eigene Projekt passt. Kapitel 2 ist technischer und führt Tags und Ant-Tasks ein, um Generierung von Todo-Listen zu zeigen. XDoclet Tasks und Subtasks werden kurz vorgestellt. Es folgt eine Kurzeinführung in Templates für die Codegenerierung, etwas detailliert vielleicht zu Anfang, aber in Ordnung. Im späteren Kapitel kommt das noch sehr genau zur Sprache. Es folgt das Konzept der wichtigen Merge-Points und das Kapitel schließt mit dem Bigger-Picture und der Feststellung, dass Metadaten nur an einer Stelle stehen sollte und Redundanzen minimiert werden müssen. Es folgt der zweite Abschnitt, der sich konkret mit dem EJB-Doclet, und XDoclet fürs Web beschäftigt. Kapitel 3 ist für die klassischen J2EE 1.4 Entwickler das wichtigste Kapitel. Das Beispiel ist mit einem Weblog gut und anschaulich gewählt. Dass die Property im UML-Diagramm allerdings „test“ heißt ist ein Fehler; es sollte „text“ heißen. Alle zentralen Tags werden an Beispielen gezeigt, also wie ein Session-Bean getagt wird, eine Entity-Bean und die Beziehungen der Entiy Bean aufgebaut, und wie eine Fassade und Utility-Klasse generiert werden und was im Prinzip darin steckt (Quellcode wäre gut gewesen hier). Es folgt die Generierung eines Value Objects (VO) was die Autoren hier mit dem Data Transfer Object (DTO) gleichsetzen, aber heutzutage trennt man die Konzepte. Matcher für unterschiedliche VOs kommen zur Sprache genauso wie Aggregationen und Composites, also das auch die assoziierten Objekte einer CMP mit in das VO aufgenommen werden. Die Beschreibung könnte allerdings etwas detaillierter sein und es wäre eine Bereicherung, wenn die Autoren alle Szenarien, also 1:1, 1:n, n:m einem Bi- und einmal Unidirektional durchgespielt hätten. Das Kapitel schließt mit den Sicherheits-Tags, Finder/Selector und einer Übersicht, welche Dateien XDoclet für das Blog-Beispiel generiert, Transaktionsattributen, DAOs für BMP und Message Driven Beans. Gewünscht hätte ich mir noch eine Zusammenfassung mit einer Gegenüberstellung der Tags mit dem Ergebnis im Deployment-Deskriptor bzw. Quellcode. Kapitel 4 widmet sich der Web-Tier. Der Ant-Task webdoclet wird vorgestellt und es beginnt mit dem Tag für Servlets, Filter, Listener und JSP-Tag-Libs, damit die web.xml erstellt wird. Das Beispiel führt die Idee des Blogs fort. Die Qualität der Quellcodebeispiel ist relativ gut wobei mir bei Listing 4.7 auffällt, dass die Autoren folgendes für doEndTag() schreiben:

try {

if(date != null) {

SimpleDateFormat formatter = new SimpleDateFormat(format);

pageContext.getOut().write(formatter.format(date));

}

} catch (IOException e) { }

return EVAL_PAGE;

}

Die IOException zu schlucken ist vielleicht nicht so toll (in den übrigen Beispielen wird schön geloggt) und ich frage mich, warum der String format zwar in der Objektvariablen gehalten wird, aber warum nicht gleich SimpleDateFormat (und dann auch vom Basistyp DateFormat, der für format() reicht). Möglicherweise wissen die Autoren das die java.util.Format-Klassen nicht Thread-sicher sind, vergessen aber, dass die Tag-Objekte nicht wie die Servlet-Klassen geteilt werden, sondern der Servlet-Container wegen des Zustands der Tag-Objekte immer neue aufbaut (sogar bei jedem Request!) und es somit keine parallelen Zugriffe auf doEndTag() gibt. Es folgt das 5. Kapitel, welches die XDoclet-Unterstützung für Struts und Web-Works vorstellt. Es werden zwei wichtige Merge-Points für web.xml vorgestellt, dann folgend Details über die Struts-Actions und Validatoren und WebWork, bei dem sich die Aussage „Another web-layer framework that is gaining in popularity is OpenSymphony’s WebWork“ nicht bewahrheitet hat. Kapitel 6 springt dann wieder in die Welt der Application-Server und beschreibt Tags für die Container-spezifischen Deployment-Deskriptoren exemplarisch an JBoss und WebLogic. Das beendet den zweiten Abschnitt und der dritte Abschnitt beginnt mit spezielleren Technologien Hibernate/JDO/Castor, der alten Axis-Version, JMX, Mock-Objekte und Portlets. Hibernate wird nicht allzu tief vorgestellt, was ein echtes Manko ist, denn die XDoclet-Unterstützung ist/war perfekt und Entwickler griffen gerne zu XDoclet, um sich die .hbm.xml generieren zu lassen. Hier muss dann die Dokumentation aus dem Anhang oder der Webseite aushelfen, denn das Buch kommt über ein paar einfache Properties und Relationen nicht hinaus, denn sofort geht es zu JDO und dann Castor JDO, Castor XML. Es folgen Web-Services mit Apache SOAP (dem Vorgänger von Axis 1) und Axis 1 dann in Kapitel 8 und wie XDoclet die Deployment-Deskriptoren generiert. Es folgt der Hinweis, das für die Serializer und Deserializer keine Tags existieren, stattdessen ein Merge-Point genutzt werden muss. Damit schließt das Kapitel und das Kapitel 9 widmet sich einer Kurzeinführung zu JMX und kommt dann zu Generierung von MLET-Dateien und der unterschiedlichen Descriptoren für Container wie JBoss oder MX4J. Kapitel 10 entfernt sich komplett von Java EE-Technologien und geht auf Mock-Objekte ein; eine Schnittstelle Automobile wird getaggt und XDoclet erzeugt eine Klasse AutomobileMock. Warum die Autoren allerdings eine Schnittstelle mit 15 (!) Operationen deklarieren und nicht 1 und dann auch nicht bei Ihrem Blog-Beispiel bleiben bleibt im Dunkeln. Die 15 Operationen führen jedoch dazu, dass die AutomobileMock.java über 700 Zeilen dick ist und nicht abgebildet werden kann. Anschließend zeigt ein Beispiel wie im JUnit-Testfall das Mock-Objekt initialisiert und genutzt wird. Da XDoclet kein bekanntes Mock-Framework nutzt, ist die Bedeutung der Lösung gering. Kapitel 11 würde eigentlich viel besser an die Java EE Technologie passen, denn es beschreibt Portles und welche XDoclet-Tags es für welche Einträge im Deployment-Deskriptor portlets.xml gibt. Der letzte Abschnitt, beginnend mit Kapitel 12, geht tiefer in die Architektur von XDoclet ein und beschreibt, wie das Templating funktioniert und eigene Tags und Tasks entwickelt werden. Der 4. Abschnitt nimmt viel Raum ein. Zunächst stellte Kapitel 12 heraus, warum man sich mit Codegenerierung beschäftigten sollte. Es beginnt mit der Aggregation, also dem Sammeln von Informationen und einem einfachen Template; dabei werden die Grundelemente vom .xdt-Format der XDoclet-Template-Dateien vorgestellt. Es folgt die Transformation mit einem Factory-Generator – das ist anschaulich und für jeden gut verständlich. Danach spielen die Autoren den Template-Mechanismus für einen Command-Konfiguration weiter und stellen Tags vor um alle Attribute aus den Java-Klassen, etwa Felder, Konstruktoren auszulesen; das ganze erinnert ein wenig an Reflection. Es folgt ein eigener Content-Tag-Handler und Body-Tags, denn nicht alle lässt sich in XDoclet so einfach umsetzen; es ist wie die JSTL unter Verbot von Skriptlets: Nur lesen ist einfach, aber Zwischenzustände halten wird schnell unleserlich. Das Kapitel schließt mit einem Abschnitt, danit eigene Tags wie eingebaute aussehen – Ant steht naturgemäß im Mittelpunkt. Im Kapitel 13 folgenden XDoclet-Erweiterungen und Tools, worunter die Autoren die IDE-Integration in IntelliJ und Eclipse (mit JBoss IDE) meinen und das MDA-Werkzeug AndroMDA und Middlegen, was Datenbanken ausliest und aus dem Schema XDoclet-versehene EJB-CMP-Klassen (oder JDO-Klassen) generiert. Abschließend gibt der Anhang A eine ausführliche Installationsanleitung für Ant und XDoclet und Anhang B listet die Tasks/Subtasks auf, Anhang C gibt auf über 100 Seiten eine schöne Übersicht über alle XDoclet-Tags, Anhang D die XDt-Template-Syntax und zu aller letzt philosophiert Anhang E über die Zukunftsaussichten von XDoclet. So kommt zu Sprache, dass es XDoclet 2 mit einer neuen Code-Generierungs-Engine Generame gibt sowie einem Code-Templating der auf Jelly bzw. Velocity zurückgreift. Dass XDoclet durch Annotationen komplett sterben wird konnten die Autoren 2004 nicht ahnen; nur ein Jahr Mitte 2005 später bleibt die Uhr bei Version 1.2 stehen. Was ist also meine Zusammenfassung für das Buch? Wer mit XDoclet noch in alten Projekten zu tun hat, der wird dieses Buch mögen. Es ist ausführlich und gut und die Beispiele sind hervorragend, fast immer durchgehend und zu abgehoben. Der Quellcode im Buch ist mehrheitlich in Ordnung, es gib immer wieder Kleinigkeiten, die mich an den Allgemeinen Java-API Kenntnissen und Wissen um die gesetzten Java-Idiomen der Autoren zweifeln lassen. Bei:

String logLevel = config.getInitParameter("LogLevel");

if(logLevel.equals("debug"))

muss man sich fragen, ob man wirklich auf einen potenziellen null-Kandidaten equals() aufrufen möchte – die Variante "debug".equals(logLevel) ist da eigentlich angebrachter. Im Listing 7.9 ist eine public Standardkonstruktor als einziger Konstruktor ohne JavaDoc aufgeführt; die paar Zeilen hätte sich die Autoren auch schenken können und im gleichen Beispiel sind die Parametervariablen nicht prickelnd:

public void setEmail(String string) { email = string; }

public void setId(String string) { id = string; }

Das gleiche auch für Property name und owner. Vom Beispiel 8.1 bin ich enttäuscht. Die String-Variable VOWELS ist mit "AEIOUaeiou" vorbelegt und dann folgt in der Methode:

Character c = new Character(word.charAt(i));

if(VOWELS.indexOf(c+"") >= 0)

endBuffer.append(c.charValue());

Hier Character-Objekte aufzubauen ist grober Unfug, ein

char c = word.charAt(i);

if(VOWELS.indexOf(c) >= 0)

endBuffer.append(c);

hätte es voll getan (die String#contains(CharSequence)-Methode gab es damals noch nicht, sie wurde erst mit Java 5 eingeführt). In Listing 9.2 im JMX-Kapitel ist die Variable home ohne Sichtbarkeitsmodifizierer, aber private final wäre korrekter. Oder Listing 11.5 im Portlet-Kapitel:

private static String[] states = { … }

private static Set stateSet = new HashSet();

static {

stateSet.addAll(Arrays.asList(states));

}

Was soll das? Zunächst kann states und stateSet final sein, aber davon abgesehen ist der static-Block überflüssig denn der Konstruktor von HashSet nimmt gerne eine Collection an. Besser also – und auch großgeschrieben, wie es die Autoren bei den anderen static-Variablen auch gemacht haben – wäre:

private final static Set STATE_SET = new HashSet( Arrays.asList(states) );

Es fallen weiterhin Kleinigkeiten und Flüchtigkeitsfehler auf, etwa bei

public class Widget {

Widget() {

}

// … widget methods …

}

in dem der Konstruktor nicht public ist, die Klasse aber schon, und im Folgenden

public Widget new Widget() {

return new Widget();

}

was mit dem Leerzeichen auf keinen Fall ein gültiger Methodenname ist. In Kapitel 12 steht in Tabelle 12.1 bei „Field“ in der rechten Zelle „Working with method fields“, aber den Autoren ist beim Copy/Paste wohl das „method“ durchgerutscht. Dann ist ifDoesntHaveclassTag falsch geschrieben, es sollte ifDoesntHaveClassTag heißen, ein anderes Mal stimmen die Einrückungen nicht. Aber diese Kleinigkeiten kann man verzeihen und haben kein großes Gewicht. Aber die Gretchenfrage ist: Sollte man sich das Buch kaufen wenn man nicht aus einem Altprojekt XDoclet erbt? Die Antwort ist eindeutig: Nö. Statt Metadaten über JavaDoc zu setzen sind es heutzutage Annotationen der Standard. XDoclet hat den Dreh nicht bekommen, sich zu einem allgemeinen Code-Generator zu mausern. XDoclet 2 erwartet zwar die Metadaten nicht mehr zwingend in den JavaDocs, sondern kann durch seine Modulfähigkeit die Metadaten prinzipiell auch aus Annotationen lesen, aber irgendwie interessiert sich keiner dafür; Das Projekt kam nie aus der Planungsphase. Ein anderer Grund, dass XDoclet heute keine dominante Rolle mehr spielt, ist der Wegfall überflüssiger Klassen und Descriptoren aus modernen Frameworks. XDoclet machte EJB 2 angenehm, doch in EJB 3 ist XDoclet einfach nicht mehr nötig, genauso wenig wie für Hibernate oder Web-Services. Schade um das Buch, ich mag XDoclet aber seit auch Servlet 3.0 auf Annotationen setzt wird auch die web.xml zur Nussschale. Daher wird auch kein Buch-Update mehr geben und so bleiben Versionen für immer eingefroren: JBoss 3.2, Servlet 2.3, Hypersonic Database statt HSQLDB, drei MBean-Typen (es sind nun 4, da Open MBean dazugekommen ist) und MX4J lebt im Buch noch. Wie schnelllebig die IT-Zeit doch ist.

GWT 2.1.1

http://googlewebtoolkit.blogspot.com/2010/12/gwt-211-is-now-available.html listet auf:

GWT SDK

GWT’s RequestFactory component, introduced in GWT 2.1, received a lot of attention, both from the GWT team at Google and from the GWT open source community at large. Based on this feedback, we’ve added the following:

  • A service layer, which includes support for non-static service objects
  • Value object support
  • Multiple methods calls on a single request

Google Plugin for Eclipse

  • Improved UiBinder error reporting within SpringSource Tool Suite (STS)
  • Optimized the IDE experience by removing unused Java builders and leveraging the AspectJ fixes in the latest STS release
  • Updated Speed Tracer to perform a full J2EE publish before launching

GWT Designer

Buchkritik: Art of Java Web Development

Art of Java Web Development. Struts, Tapestry, Commons, Velocity, JUnit, Axis, Cocoon, InternetBeans, WebWork
Neal Ford. Manning. ISBN 1932394060. 2004.630 Seiten

Ford teilt sein Buch in drei Teile ein: Architektur von Web-Anwendungen, konkreten Frameworks und Best-Practices. Im ersten Teil „State-of-the-art web design“ ist von One-Page-Applikationen keine Rede und auch der Begriff „Ajax“ fällt auf den 630 kein einziges Mal; Web-Applikationen haben sich innerhalb von 5 Jahren komplett gewandelt. Die Web-Frameworks die Ford dann im zweiten Teil vorstellt sind allesamt veraltet, sodass man das Buch getrost beiseite legen kann. Und InternetBeans Express von JBuilder? Noch exotischer als WebWork! Wer noch ein Altprojekt hat, nimmt sich besser ein Spezialbuch zu dem jeweils relevanten Framework. Bei diesem alles-in-einem-Ansatz bleibt sonst zu viel auf der Strecke. Die Beispiele selbst sind gut und der Quellcodestil ordentlich, aber das Buch ist eben auf dem Stand, was 2004 gerade „State of the Art“ war. Das ist lang her, damals was noch nichts mit Ajax und Single Sign On. Das Buch hat eine Webseite bei Manning (http://www.manning.com/ford/) und Kapitel 5 (Struts 1, nützlich zum Einstieg) und 13 (Flow Handling) gibt es zum kompletten Lesen frei sowie die Quellcodes.

Thema der Woche: Rekursion

Theoretisches:

  • Lies http://de.wikipedia.org/wiki/Rekursive_Programmierung.
  • Was ist das größte Problem rekursiver Lösungen?
  • Kann man jede rekursive Lösung in eine iterative umschreiben?
  • Was ist Endrekursion?
  • Nenne 10 Beispiele rekursiver Lösungen (andere als Fakultät und Fibonacci) in der Programmierung.

Praktische Aufgabe:

  • Entwerfe eine Methode, die rekursiv ein Verzeichnis inklusive aller Unterverzeichnisse mit den Dateien löscht. Wichtig: Wie lässt sich die Methode testen? Theoretische Überlegung: Wie würde sich das ganze iterativ umsetzen lassen? Kann Nebenläufigkeit zum Problem werden?

WEB.DE setzt auf das Java-geschriebene ThinkFree Office

Man glaubt es kaum, aber in den Zeiten von modernen JavaScript-Office Implementierungen setzt WEB.DE auf das ThinkFree Office (nicht ThinkFree Online!), was in Java implementiert ist. Ein großer Vorteil ist, dass ThinkFree die Office-Formate ausgezeichnet unterstützt und es auch so aussieht wie das alte Office. Java auf dem Client ist also doch nicht tot  Smile.

Aufgeschnappt unter http://netzwertig.com/2010/12/14/online-office-web-de-integriert-office-tools-auf-java-basis/.

Eclipse 3.5 zu Eclipse 3.6 –> @SuppressWarnings("unchecked") und @SuppressWarnings("rawtypes")

Von http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.jdt.doc.isv/porting/3.6/incompatibilities.html Punkt 3:

@SuppressWarnings("unchecked") does not ignore raw types warnings anymore

What is affected: Usage of @SuppressWarnings("unchecked").

Description: Up to Eclipse 3.5, @SuppressWarnings("unchecked") was used to suppress the unchecked and raw types warnings. This was not consistent with other compilers (e.g. javac). A new warning token "rawtypes" has been added to cover the case of raw type warnings exclusively. So in order to get rid of all warnings, in Eclipse 3.6, it might be required to add "rawtypes" in the warning token list.

If it is not possible to update the code, a system property (-DsuppressRawWhenUnchecked=true) can be added to the -vmargs list on startup. This preserves the old behavior. The projects need to be manually cleaned and rebuilt after toggling the property.

Action required: When new warnings that were previously ignored are now reported, add "rawtypes" to the list of warning tokens.

Before:

@SuppressWarnings("unchecked")
    void bar(List list) {
        List<String> ls2 = list;
    }
@SuppressWarnings("unchecked")
private List l;

After:

@SuppressWarnings({"unchecked", "rawtypes"})
    void bar(List list) {
        List<String> ls2 = list;
    }
@SuppressWarnings("rawtypes")
private List l;

Supergau? Apache zieht sich vollständig aus dem JCP zurück

Aus https://blogs.apache.org/foundation/entry/the_asf_resigns_from_the:

The Apache Software Foundation has resigned its seat on the Java SE/EE Executive Committee.  Apache has served on the EC for the past 10 years, winning the JCP "Member of the Year" award 4 times, and recently was ratified for another term with support from 95% of the voting community.  Further, the project communities of the ASF, home to Apache Tomcat, Ant, Xerces, Geronimo, Velocity and nearly a 100 mainstay java components have implemented countless JSRs and serve on and contribute to many of the JCPs technical expert groups. 
We’d like to provide some explanation to the community as to why we’re taking this significant step.
The recent Java SE 7 vote was the last chance for the JCP EC to demonstrate that the EC has any intent to defend the JCP as an open specification process, and demonstrate that the letter and spirit of the law matter.   To sum up the issues at stake in the vote, we believe that while continuing to fail to uphold their responsibilities under the JSPA, Oracle provided the EC with a Java SE 7 specification request and license that are self-contradictory, severely restrict distribution of independent implementations of the spec, and most importantly, prohibit the distribution of independent open source implementations of the spec.  Oracle has refused to answer any reasonable and responsible questions from the EC regarding these problems.
In the phrase "fail to uphold their responsibilities under the JSPA", we are referring to Oracle’s refusal to provide the ASF’s Harmony project with a TCK license for Java SE that complies with Oracle’s obligations under the JSPA as well as public promises made to the Java community by officers of Sun Microsystems (recently acquired by Oracle.)  This breach of the JSPA was begun by Sun Microsystems in August of 2006 and is a policy that Oracle explicitly continues today.  For more information on this dispute, see our open letter to Sun Microsystems.
This vote was the only real power the Executive Committee has as the governing body of the Java specification ecosystem, and as we indicated previously we were looking for the EC to protect the rights of implementers to the degree they are able, as well as preserve the integrity of the JCP licensing structure by ensuring that JCP specifications are able to be freely implemented and distributed.  We don’t believe this is an unreasonable position – it should be noted that the majority of the EC members, including Oracle, have publicly stated that restrictions on distribution such as those found in the Java SE 7 license have no place in the JCP – and two distinguished individual members of the EC, Doug Lea and Tim Peierls, both have resigned in protest over the same issue.
By approving Java SE 7, the EC has failed on both counts : the members of the EC refused to stand up for the rights of implementers, and by accepting Oracle’s TCK license terms for Java SE 7, they let the integrity of the JCP’s licensing structure be broken.
The Apache Software Foundation concludes that that JCP is not an open specification process – that Java specifications are proprietary technology that must be licensed directly from the spec lead under whatever terms the spec lead chooses; that the commercial concerns of a single entity, Oracle, will continue to seriously interfere with and bias the transparent governance of the ecosystem;  that it is impossible to distribute independent implementations of JSRs under open source licenses such that users are protected from IP litigation by expert group members or the spec lead; and finally, the EC is unwilling or unable to assert the basic power of their role in the JCP governance process.
In short, the EC and the Java Community Process are neither.
To that end, our representative has informed the JCP’s Program Management Office of our resignation, effective immediately.  As such, the ASF is removing all official representatives from any and all JSRs. In addition, we will refuse any renewal of our JCP membership and, of course, our EC position.

Die letzte Aussage ist besonders hart: “As such, the ASF is removing all official representatives from any and all JSRs. In addition, we will refuse any renewal of our JCP membership and, of course, our EC position.”

Android-App Bezahlung über PayPay war wegen der Wikileaks-Payback-Attacke nicht möglich

Die http://en.wikipedia.org/wiki/Operation_Payback führt(e) eine DOS-Attacke auf PayPay und andere Dienstleister durch. Weiter auf http://en.wikipedia.org/wiki/WikiLeaks:

On December 5., a group of activists and hackers known as "Anonymous" called upon supporters to attack sites of companies that oppose WikiLeaks as part of Operation Avenge Assange.[158] Paypal has been targeted following their decision to stop processing donations for Wikileaks.[159][160] Gregg Housh, who previously worked on other projects with Anonymous, said that he had noticed an organized attempt taking place to attack companies that have not supported WikiLeaks. In reference to the support being shown for Wikileaks, Mr. Housh said; "The reason is amazingly simple, we all believe that information should be free, and the Internet should be free."[161] On 8 December 2010 Paypal website was victim of a Denial-of-service attack by Anonymous.[162][163][164] Later that day, Paypal announced in his blog that they will release all remaining funds in the account to the foundation that was raising funds for WikiLeaks.

Android-Apps konnten über PayPay nicht bezahlt werden, was die klare Verwundbarkeit des Bezahldienstes zeigt.

Die Software, die für den DOS genutzt wird, ist die C#-Software http://en.wikipedia.org/wiki/LOIC (lustiger auf http://encyclopediadramatica.com/LOIC).

Thema der Woche: Technologien der Java SE platform

Die Seite http://download.oracle.com/javase/6/docs/ enthält eine bunte Grafik mit unterschiedlichen Technologien.

  • Schreibe zu jedem Punkt eine Kurzzusammenfassung um was es sich geht.

Konkrete Fragen:

  • Welche Bedeutung hat IDL heute? Was ist eine moderne Version der “IDL”?
  • Welche Bedeutung hat das endorsed-Verzeichnis?
  • Was kann die URLConnection caching API?
  • Welches Problem lösen Klassen des Pakets java.util.concurrent.atomic?
  • An welcher Stelle greift die Instrumentalisierung für die es Typen im Paket java.lang.instrument gibt?
  • Wie wählt man zwischen Server- und Client-JVM? Oder wird die Entscheidung auch automatisch vorgenommen?

Android 2.3 (Gingerbread) freigegeben

Auf dem Entwicklerblog http://android-developers.blogspot.com/2010/12/android-23-platform-and-updated-sdk.html ist heute zu lesen, dass Version 2.3 veröffentlicht wurde. Zentrale Punkt sind:

  • Enhancements for game development
  • Rich multimedia
  • support for front-facing camera, SIP/VOIP, and Near Field Communications (NFC)

Mehr unter http://developer.android.com/sdk/android-2.3-highlights.html.