May 05
Jax 2010 logo

Wenn ich momentan eine Java Webapplikation bauen müsste, würde ich sie wahrscheinlich mit dem Spring Framework umsetzen. Im Rahmen der Jax 2010 hat Jürgen Höller (einer der Chefentwickler von Spring) einen Rückblick, eine Bestandsaufnahme und einen Ausblick auf Spring gegeben.

Danach spielte und spielt Spring, wie viele andere Frameworks und alternative Technologien (wie z.B. SWT und GWT), aus seiner Sicht vor allem in der Rolle als Plattform und Standards “Enabler” eine große Rolle. D.h., dass Frameworks innovativer sind und höhere Release Zyklen aufweisen als Standards, wie z.B. JPA. Sie bieten vielmehr sogar die Möglichkeit neue Standards in bestehende Umgebungen zu integrieren.

So ist es mit Spring 3.0 möglich Anwendungen zu entwickeln, die Standards wie JPA 2.0 oder JSF 2.0 nutzen und trotzdem auch auf älteren JBoss, Websphere oder sogar Tomcat Installationen laufen können.

Diese integrative Rolle wird laut Jürgen Höller auch weiterhin den Weg von Spring bestimmen. Dabei sind für Juni/Juli 2010 die Version 3.1 und in 2011 auch die Version 3.2 vorgesehen. Diese werden wie in der Vergangenheit durch Milestone Releases immer nah an den neuesten Versionen der Standards gehalten oder sind ihnen sogar einen kleinen Schritt voraus.

Ähnliche Artikel:

geschrieben von gklinkmann \\ tags: , ,

Mar 22

Ich habe ein paar Stunden dafür verwendet mein auf Google Code gehostetes Projekt grum auf den Stand der Dinge zu bringen (es wurde ja auch langsam Zeit). Grum ist eine kleine Grails Anwendung zur Benutzerverwaltung, die es mir ermöglicht mit dem Web Framework Grails “zu spielen”.

Ich habe bei der Umsetzung bewusst auf die vielen Grails Plugins verzichtet, um so wenig Seiteneffekte wie möglich zu haben und es auch für diejenigen einfach zu halten, die einen Einstieg in Grails suchen. So sind in Grum Lösungen enthalten, wie man z.B.:

  • den Zugriff auf eine Mysql Datenbank realisiert
  • 1:1, 1:n und n:m GORM Beziehungen modelliert
  • eigene Tag Libs schreibt
  • die JSP Tag Lib displaytag verwendet, um die Daten seitenweise anzuzeigen, zu gruppieren, zu sortieren und in alle möglichen Formate (excel, csv, xml, pdf) zu exportieren
  • den Upload von Dateien ermöglicht
  • funktionale Tests mit dem webtest Plugin verwendet
  • und die Auslieferung von XML aufgrund von besonderen URL’s (kurz Content Negotiation) umsetzt

Die neue Version 0.3 verwendet jetzt grails 1.2.1 und das Plugin webtest in der Version 2.0.3. Die Sourcen, die SQL Dateien zur Erstellung der Mysql Datenbank und ein Webarchiv mit allen notwendigen Bibliotheken stehen auf Google Code zum Download bereit.

Nutztungshinweise:
Der Code kann frei verwendet werden, kann aber Fehler enthalten, für die ich keine Haftung übernehme. Die Lizenzbedingungen der verwendeten Bibliotheken sind einzuhalten.

Ähnliche Artikel:

geschrieben von gklinkmann \\ tags: , , , ,

Oct 19

Während ich mich im ersten Teil in meiner kleinen Serie über HTTP Clients mit Pear beschäftigt habe, will ich nun im 2. Teil mein Augenmerk auf das Zend Framework richten.

Auch hier benötigt man 2 Packages zur Erledigung der Aufgabe (s. Teil 1). Das Package Zend_Http ist wie das Pear Package Http_Request2 zur reinen HTTP Kommunikation geeignet.
Mit Zend_Dom kann man das empfangene HTML zerlegen.

Ein Weg zur Lösung der Aufgabe könnte so aussehen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
require_once 'Zend/Http/Client.php';
require_once 'Zend/Http/Response.php';
require_once 'Zend/Dom/Query.php';
 
$url='http://www.google.de';
 
$client = new Zend_Http_Client($url, array(
    'maxredirects' => 0,
    'timeout'      => 30));
 
try {
   $response = $client->request('GET');
 
   if (200 == $response->getStatus()) {
 
      $dom = new Zend_Dom_Query($response->getBody());
      $forms = $dom->query('form');
 
      $form=$forms->current();
      $action=$form->getAttribute('action');
 
      $client = new Zend_Http_Client($url.$action, array(
          'maxredirects' => 0,
          'timeout'      => 30));
      $client->setParameterGet('q', 'http client examples');
      $response = $client->request('GET');
 
      $dom = new Zend_Dom_Query($response->getBody());
 
      foreach ($dom->query('a.l') as $link) {
         if ($link->hasAttribute('href')) {
            $href=$link->getAttribute('href');
            $linkText=$link->textContent;
 
            echo "<a href=\"$href\">$linkText</a><br />";
         } 
      }
 
   } else {
        echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
             $response->responseCodeAsText();
    }
} catch (Zend_Http_Exception $e) {
    echo 'Error: ' . $e->getMessage();
}
?>

Der Code spricht eigentlich für sich, deswegen werde ich ihn an dieser Stelle nicht so detailliert erläutern wie noch im ersten Teil.
Der Unterschied besteht im Parsen des HTML’s. Die Methode query() (Zeilen 18 und 31) liefert nämlich kein Array, sonder ein Objekt der Klasse Zend_Dom_Query_Result zurück. Da diese Klasse die beiden Interface Countable und Iterator implementiert, können die Ergebnisse der Anfrage mit einer foreach Schleife durchlaufen werden. Jeder einzelne Treffer wird über ein Objekt der Klasse DOMElement abgebildet.

Fazit:
Auch Zend bietet mit Zend_Http und Zend_Dom einen guten HTTP Client. Nutzt man in seinem Projekt bereits andere Klassen aus dem Zend Framework ist dieser Lösungsansatz empfehlenswert.

Ausblick:
In Teil 3 verlasse ich die PHP Welt und stelle mit HttpUnit einen sehr komfortablen und funktionsreichen HTTP Client für Java vor.

Ähnliche Artikel:

geschrieben von gklinkmann \\ tags: , ,

Oct 11

Die Woche vor dem Urlaub ist immer ein bisschen stressig. Von daher gibt es heute nur 2 Links:

Einstieg in Spring Roo RC2
Wer Grails nicht nutzen darf oder will erhält mit Spring Roo einen Code Generator für Webanwendungen, der auf Spring und Java basiert.
WordPress mit Lucene
Die freie Suchbibliothek hält über ein Plugin Einzug in WordPress.

Ähnliche Artikel:

geschrieben von gklinkmann \\ tags: , , , ,

Oct 03

Über die Woche verteilt, gibt es immer wieder interessante Artikel im Netz für mich, die mir ein Lesezeichen bei delicious.com wert sind. Einige sind der Anstoß für einen Beitrag in meinem eigenen Blog, die meisten aber gesammeltes Wissen (wir alle sind Jäger und Sammler), das zum Abruf bereit steht.

Diese Woche haben es folgende Artikel in meine Linkliste geschafft:

Quellensammlung: Die besten CSS- und Design-Galerien
Ein gutes Layout ist ebenso wichtig, wie die Technik dahinter. Hier sind ein paar Beispiele.
ImageFlow von Finn Rudolph
Eine sehr schöne Umsetzung des Apple Cover Flow fürs Web.
10 Useful Usability Findings and Guidelines
Das Smashing Magazine hat ein paar Ergebnisse seiner Studie zur Usability von Websites herausgegeben – sehr interessant.
Stylish Charts Using CSS jQuery and PHP
Bisher habe ich Diagramme immer als Bild on the fly erstellt. Die Lösung mit PHP und jquery ist aber auch ein interessanter Ansatz.
Browser mit PHP fernsteuern
Nils Langner vom phphatesme Blog erklärt, wie man mit selenium und PHP den Browser fernsteuern kann. Automatisierte Funktionstests stehen schon sehr lange auf der Themenliste für meinen Blog. Es wird Zeit für einen Beitrag.
Grails 1.2: Spring 3, Uri Rewriting und mehr
Sehr guter Artikel zum kommenden Grails 1.2 Release.

Ähnliche Artikel:

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