Nov 23
Groovy Logo

Aus meiner Sicht ist Groovy, die dynamische Sprache für die Java Virtual Machine, auf der großen Hype Kurve am Punkt der technischen Realität angekommen. Mit Scala und Clojure werden statt dessen gerade 2 neue Programmiersprachen durch die Gemeinde der Java Jünger getrieben.

So ist es an der Zeit einmal zu hinterfragen, was man selbst bis jetzt mit Groovy implementiert hat, ob man dabei bleibt oder doch auf den Scala Zug aufspringt.

Dierk König, der Autor von “Groovy in Action” (dem besten Fachbuch, das ich in letzter Zeit gelesen habe), hat einmal folgende 7 Anwendungsmuster für Groovy herausgearbeitet:

Super Glue, Liquid Heart, Keyhole Surgery, Smart Configuration, Unlimited Openness, House-Elf Scripts, Prototype

Oder nicht ganz so prosaisch, als:

  • Bindeglied zwischen Java Komponenten (wie z.B. Spring und Hibernate in Grails)
  • Auslagerung der Buisiness Logik, um sie dynamisch auf Veränderungen anpassen zu können
  • Eingriffsmöglichkeit in laufende Applikationen
  • Erweiterung der Konfiguration mit den Mitteln einer Programmiersprache (um endlich das plumpe XML loszuwerden)
  • die leichte Veränderung von Code zur Laufzeit
  • Hilfe für alle Aufgaben, die durch die Programmierung anfallen (Build automation, continuous integration, deployment, installer, service monitoring, reports, statistics, automated documentation, functional tests, HTML scraping, Web remote control, XML-RPC, WebServices)
  • Tool zur schnellen Erstellung von Prototypen, mit der Möglichkeit diese später auf Java portieren zu können.

Doch zurück zum Ausgangspunkt. Was mache ich mit Groovy?

Zuerst einmal schreibe ich 95 % aller neuen Tests in Groovy. Die knackige Syntax, die perfekte Interoperabilität mit Java und die gute (aber verbesserungsfähige) Integration in Eclipse machen die Erstellung von Tests sehr viel weniger lästig. Zudem gibt es kleinere Web- und Webservices Applikationen auf Basis von Grails (dem Webframwork, das seinerseits ebenfalls auf Groovy basiert), sowie Tools, die rein in Groovy geschrieben sind.

Letztendlich kann man sagen, der Hype ist dem Alltag gewichen und Groovy passt sich perfekt in die tägliche Arbeit ein. Mit Griffon und GPars stehen 2 weitere Frameworks für Swing Applikationen und Nebenläufige Programmierung (Threads) auf Groovy Basis zur Verfügung. Und eine lebendige Community hat sich um diese dynamische Sprache gebildet. Ein Umstieg auf Scala oder Closure kommt somit für mich momentan nicht in Betracht.

Und mal ganz ehlich, wenn die Kinder fragen: “Papa was machst Du?”, klingt “ich programmiere Groovy” viel cooler als “Ich programmiere Scala”. :-)

Links:
Groovy Usage Patterns by Dierk König

Ähnliche Artikel:

geschrieben von gklinkmann \\ tags: , , , , , , , ,

Sep 23

Es ist noch gar nicht so lange her, da wurde JavaScript aufgrund seiner Browser Inkombatibilitäten und Sicherheitsbedenken von vielen verteufelt.
Erst mit Ajax (Asynchronous JavaScript and XML) und den darum entstandenen Frameworks (die die Browserinkompatibilitäte abfangen) ist es zum Lieblingskind und “must have” der Webentwicklung geworden.

Doch zwischen den Frameworks gibt es teilweise erhebliche Unterschiede. Das gilt nicht nur für den Funktionsumfang, sondern auch für die Größe und Ausführungsgeschwindigkeit.

Matthias Schütz hat mit seiner Ajax Framework Matrix versucht, die Eigenschaften der Ajax Frameworks in einer Übersicht zusammenzuführen, um sie so besser vergleichen zu können. Dass ist ihm nicht nur gut gelungen, sondern ist auch noch schön anzusehen.
In der Matrix sind auch die Links zu den Frameworks, deren Dokumentation und einigen Beispielen enthalten.

Fazit:
Die Matrix erleichtert wirklich den Vergleich zwischen den einzelnen Ajax Frameworks. Eines leistet die Matrix allerdings nicht.
Eine Entscheidung für eines der Frameworks muss man leider immer noch selbst treffen, nur der Weg dorthin wird unterstützt.

ajax framework matrix

Ähnliche Artikel:

geschrieben von gklinkmann \\ tags: , , , , ,

Aug 05

amazon product advertising api logo

Die Amazon Product Advertising API (Teil der Amazon Webservices (AWS)) bietet einen Zugriff auf Amazon Produktdaten. Grundsätzlich gibt es mit SOAP und REST zwei Möglichkeiten, um auf die AWS zuzugreifen. Für die Amazon Product Advertising API wird da

Zum 15.08.2009 ändert sich das Authentifizierungsverfahren. Grund genug um den geänderten Zugriff in einem kleinen Beispiel einmal genauer zu betrachten.
Reichte früher ein API Key, sind jetzt ein öffentlicher und ein privater Zugangsschlüssel notwendig, die man während der Registrierung erstellt. Für SOAP Anfragen ist alternativ auch die Authentifizierung über X.509 Zertifikate möglich. Eine Übersicht über die s.g. “Request Identifiers” gibt es hier.

Im Beispiel soll die Klasse AmazonService die Anfrage an die Amazon Product Advertising API übernehmen. Betrachtet wird nur der Fall, wenn alles gut geht. Im produktiven Einsatz muss natürlich noch das Fehlerhandling hinzugefügt werden.
Die bei der Registrierung erstellten Zugangsschlüssel werden in der Klasse als Konstanten hinterlegt. Die Variable xml benötigen wir für die Antwort von Amazon.

1
2
3
4
class AmazonService {
   const APIKEY='< Euer öffentlicher Schlüssel >';
   const PRIVATE_KEY='< Euer privater Schlüssel >';
   private $xml;

Das wichtigste für die Anfrage ist der Aufbau der URL. In Ihr werden die Parameter der Anfrage und die mit dem privaten Zugangsschlüssel erstellte Signatur an Amazon übergeben. Diese Aufgabe übernimmt die Funktion buildURL.
Continue reading »

Ähnliche Artikel:

geschrieben von gklinkmann \\ tags: , , ,

Mar 16
htmlcleaner

Manchmal bekommt man als Programmierer unsauberes HTML (z.B. aus Word) und soll dann die Spreu vom Weizen trennen, sprich daraus ein zur Weiterverarbeitung XML konformes Dokument machen.

Wer schon mal HTML Code gesehen hat, der von Word generiert wurde, weiß wovon ich spreche. Damit man nicht jedes einzelne Dokument von Hand mit Tools wie z.B. HTML Tidy säubern muss, kommt schnell der Wunsch nach einer Bibliothek auf, die man in die eigenen Java Programme einbinden kann, um dort sauber ihren Dienst zu tun.

Gute Erfahrungen habe ich mit htmlcleaner gemacht. Hier ist ein kleiner Code Schnipsel:

String html="<html><body><unsaubererInhalt /></body></html>";
 
// Konfiguration einlesen und html säubern
HtmlCleaner cleaner = new HtmlCleaner();
CleanerProperties props = cleaner.getProperties();
TagNode node = cleaner.clean(html);
 
// den Body extrahieren und als XML aufbereiten
PrettyXmlSerializer xmlSerializer = new PrettyXmlSerializer(props);
String xml=xmlSerializer.getXmlAsString(node.findElementByName("body", true));

Das ganze klappt übrigens auch sehr gut mit unsauberen XML.

Ähnliche Artikel:

geschrieben von gklinkmann \\ tags: , , ,

Apr 25

Der Begriff REST schwirrt schon seit einiger Zeit durch das Internet. Doch was ist REST genau und wie kann man REST mit Java implementieren?
Dieser Fragen hat sich in der JAX Session “Java API for RESTful Web Services” Stefan Tilkov von InnoQ angenommen und für mich sehr verständlich erklärt. Nachfolgend möchte ich das für mich Wichtigste dieser Session kurz zusammenfassen und hoffe, dass die kompletten Slides vn Stefan Tilkov bald auf der JAX Webseite heruntergeladen werden können.

Doch zurück zu REST.

Schaut man sich im Internet ein bißchen nach REST um, findet man viele Vergleiche von REST mit anderen Techniken, z.B. REST vs. SOA, REST vs. SOAP und REST vs. WS-* (Abkürzung für die recht vielfältigen Standards im Webservice Umfeld).
Laut Stefan Tilkov ist REST am ehesten mit Webservices zu vergleichen, ist aber nach seinen Erfahrungen eher ein unterschiedlicher Ansatz um High Level SOA Ziele zu erreichen.

Ursprünglich stammt der Begriff REST (Representational State Transfer) aus einer Dissertation von Roy Fielding (s.a. wikipedia) wird im heutigen Sprachgebrauch aber eher im Sinne des vollständigen “RESTful” Gebrauchs des Hypertext-Transfer-Protokolls (HTTP) benutzt.

Nach Tilkovs Aussagen, läßt sich REST auf 5 Kernaussagen reduzieren:

  1. alle Dinge haben eine ID, technisch durch die im Internet eindeutige URI umgesetzt
  2. Dinge sind untereinander verknüpft
  3. Die Benutzung von Standard Methoden (uniform Interface), technisch die Methoden von HTTP
    GET – zum Erhalten von optional gecachten Informationen
    PUT – Ändern oder Erstellen mit bekannter ID
    POST – Erstellen oder Anhängen einer Unter Resource (sub resource)
    DELETE – (logisches) Löschen
    HEAD – Anzeigen von Header Informationen (z.B. Größe einer Datei, bevor man sie herunter lädt)
    OPTIONS – Rückgabe von Methoden, die auf einer Resource zur Verfügung stehen.
  4. dem Erlauben unterschiedlicher Representation (auch Content Negotiation genannt), z.B als XML oder JSON String
  5. der statuslosen Kommunikation, wie sie im HTTP Protokoll spezifiziert ist.

Was sind die Vorteile von REST?

  • universelle Unterstützung in jeder Sprache (z.B JAVA, C, Perl, PHP, Ruby, C#, .NET …) und auch vielen Tools (z.B. wget, curl)
  • Eine sehr gute Skalierung
  • reale WEB Integration, durch die vollständige Ausnutzung von HTTP, samt seiner Status Codes
  • Unterstützung von XML, aber auch anderer Formate, wie z.B. JSON (JavaScript Object Notation

Doch wie lassen sich Anwendungen mit REST Unterstützung mit JAVA implementieren?

Antwort: durch den Java Specification Request (JSR) Nummer 311, der ein JAVA API for RESTful Webservices spezifizieren soll. Stefan Tilkov, nimmt aktiv an dieser Spezikation teil, deren Referenzimplementierung JERSEY momentan in der Version 0.7 vorliegt.
Ein Web Framework, das im JAVA Umfeld REST sehr gut umsetzt ist GRAILS.

Dass es sich lohnt, sich mit REST zu beschäftigen zeigt die Tatsache, dass Google gerade dabei ist eine Vielzahl seiner SOAP Schnittstellen (z.B. für die Suchanfragen) REST basiert umzusetzen.

Ähnliche Artikel:

geschrieben von gklinkmann \\ tags: , , , , , ,