Donnerstag, 24. Mai 2012


Artikel

Juni 2010 | Artikel

Gezwitscher via JSF!

(Link zum Artikel: http://www.entwickler-magazin.de/jaxenter//003161)

Die FacesTales-Kolumne

Text: Lars Röwekamp und Matthias Weßendorf
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share
Der Webdienst "Twitter" wird immer beliebter. Die Nutzer von Twitter sind schon lange nicht mehr nur die "Geeks" der Web-2.0-Szene. Mit der kommenden Bundestagswahl entdecken auch immer mehr Politiker und deren Parteien Twitter als eine Plattform, um kurze Meldungen in die weite Welt zu posaunen. Eine wachsende Zahl an Unternehmen nutzt Twitter für den Vertrieb oder den (direkten) Kontakt zum Kunden. Daher wundert man sich kaum noch, dass sogar CRM-Produkte nun mit einer Twitter-Anbindung daherkommen.

Twitter als Plattform

Twitter wird von den meisten Anwendern als reiner Dienst wahrgenommen. Über eine einfache Webseite hinterlässt ein Nutzer mit 140 Zeichen eine Nachricht, die dann von seinen "Abonnenten" gelesen werden kann. So weit, so gut. Wie wir bereits in der letzten Kolumne gezeigt haben, kann Twitter aber deutlich mehr. Die Integration von Twitter in ein bestehendes Produkt verdeutlicht, dass Twitter auch als eine Art Plattform zu betrachen ist. Twitter stellt ein HTTP-basiertes API zur Verfügung( hier, hier und hier), das nach und nach ausgebaut wird. Das offene HTTP/REST API ermöglicht eine leichte Einbindung der Plattform in die eigene Anwendung.

JSF – Möglichkeiten für Twitter

Für eine Hochzeit von Twitter und JSF liegt die Programmierung einer (oder mehrerer) Twitter-Komponenten nahe. Mittels einer <corp:myTweets numberOfTweets=“5“ .../ >-Komponente könnten zum Beispiel die letzten fünf Meldungen auf der Startseite der eigenen Firmenhomepage angezeigt werden. Das Entwickeln der JSF-Komponente(n) erfolgt nach dem gängigen Muster: Je eine Klasse für die Komponente und den JSP-Tag sowie eine Klasse für den Renderer der Komponente. Die Komponentenklasse übernimmt dabei die Kommunikation mit dem Twitter API. Diese Rollenteilung hat den Vorteil, dass der Renderer bei Bedarf ausgetauscht werden kann, ohne dass die Kommunikation erneut programmiert werden muss. Die Kommunikation mit Twitter kann wie hier beschrieben mit einfachen JDK-Bordmitteln (HttpURLConnection) oder einem etwas komfortableren REST-Framework stattfinden. Hier bietet sich die Verwendung des Apache-Wink-Projekts an, das neben einer Implementierung des JAX-RS-Standards zusätzlich eine intuitive Clientbibliothek bietet. Zur Realisierung der oben beschriebenen Komponente und somit zum Abruf der letzten fünf tweets eines Accounts benötigt man lediglich ein paar Zeilen:

  1. ...
  2. String logon = "user:passwd";
  3. String encodedLogon = new BASE64Encoder().encode(logon.getBytes());
  4. RestClient client = new RestClient();
  5. Resource twitter = client.resource("http://twitter.com/statuses/user_timeline.atom?count=5");
  6. twitter.header("Authorization", "Basic " + encodedLogon);
  7. twitter.accept(MediaType.APPLICATION_ATOM_XML_TYPE);
  8. String tweets = twitter.get(String.class);
  9. ...

Der Aufruf der get()-Methode schickt einen HTTP-GET-Request an Twitter und liefert ein Atom/XML-Dokument zurück. Die Ausgabe kann – in einfacherer Form – als String erfolgen, allerdings bietet sich der Einsatz einer Atom-Bibliothek an, um das XML-Dokument vernünftig zu parsen.

Damit die Marketing- und Vertriebsabteilung des Unternehmens nun auch aus dem eigenen Websystem Meldungen zu Twitter schicken kann, benötigt man eine weitere Komponente, die den Statusupdate entgegen nimmt. Eine solche <corp:inputTweet/>-Komponente nutzt intern einen Validator, damit die 140 Zeichen nicht überschritten werden. Der Code für die Kommunikation mit dem API ist ebenfalls – dank Apache Wink – sehr übersichtlich:

  1. ...
  2. Resource twitter =
  3. client.resource("http://twitter.com/statuses/update.json");
  4. twitter.header("Authorization", "Basic " + encodedLogon);
  5. twitter.contentType(MediaType.APPLICATION_FORM_URLENCODED_TYPE);
  6. twitter.accept(MediaType.APPLICATION_JSON_TYPE);
  7. javax.ws.rs.core.MultivaluedMap<String, String> msg =
  8. new MultivaluedMapImpl<String, String>();
  9. msg.add("status", "Neue Produkte im Online-Shop...");
  10. twitter.post(msg);
  11. ...

Der post()-Methode – die einen HTTP POST an Twitter schickt – übergibt man eine MultivaluedMap, die die für den Aufruf notwendigen Parameter enthält.

Fazit – oder die Frage nach dem Sinn

Twitter stellt neben anderen "neuen" Webdiensten, z. B. Google Map, Blogs oder Wikis, ein weiteres Instrument dar, das an einigen Stellen sehr nützlich sein kann. Das Zusammenspiel von JavaServer Faces und Twitter ist ideal, denn eine JavaServer-Faces-Komponente ist eine gute Möglichkeit, um den Grad der Wiederverwendbarkeit zu erhöhen. Dank des offenen HTTP/REST-Twitter-APIs ist die Integration sehr einfach. Also, fröhliches Twittern!

Lars Röwekamp ist Geschäftsführer der OpenKnowledge GmbH und berät seit mehr als 10 Jahren Kunden in internationalen Projekten rund um das Thema Enterprise Computing (Twitter: @mobileLarson). Matthias Weßendorf arbeitet für die Oracle an einer Server-Side-Push-Lösung für ADF Faces. Er ist PMC Chair von Apache MyFaces. Matthias bloggt regelmäßig auf http://matthiaswessendorf.wordpress.com (Twitter: @mwessendorf).
  1. http://www.germancowboys.de/twitter/3634
  2. http://blog.twitter.com/2009/03/salesforce-integrates-twitter.html
  3. http://apiwiki.twitter.com/
  4. http://apiwiki.twitter.com/Twitter-API-Documentation
  5. http://twitter.com/twitterapi
  6. http://incubator.apache.org/wink/
  7. http://jcp.org/en/jsr/summary?id=311
  8. http://abdera.apache.org/
  9. http://apiwiki.twitter.com/Twitter-REST-API-Method%3A-statuses%C2%A0update

andere Artikel dieser Serie

Kommentare