Archive for März, 2009

Bugtracking mit Mantis

mantis_logoIch war auf der Suche nach einem einfachen, webbasierten Bugtracking-Tool, mit dem ich mehrere kleine Projekte verwalten kann. Die Anforderungen waren im Groben: schnell und einfach auf einem LAMP-System aufzusetzen, private und öffentliche Projekte, feines Rechtemanagement (wer in welchem Projekt, Rollen (Berichter, Tester, Entwickler, …), einfache Benutzeroberfläche (auch für den normalen DAU), deutsche Übersetzung, gute Übersichtsseite, Open Source.

Natürlich kommen einem erst die „größeren“ Issue Management-Tools in den Sinn, insbesondere Bugzilla und TRAC. Bugzilla habe ich noch nie konfiguriert oder genauer betrachtet, auf den ersten Blick schien es mir zu „fett“ für meine Zwecke. TRAC habe ich in anderen Projekten schon im Einsatz (gehabt) – ein Super System, kann aber auch „zu viel“.

So bin ich nach kurzer Webrecherche auf den Mantis Bug Tracker gestoßen. Die Online-Demo hat mir so gut gefallen, dass ich gleich mal eine Testinstallation durchführte. Und siehe da, in weniger als 10 Minuten war alles installiert. Auch eine vernünftige Grundkonfiguration (Benutzer, E-Mail-Benachrichtigungen, Optik, Testprojekt, Spracheinstellungen) hat nur eine halbe Stunde beansprucht.

Fazit: Die oben genannten Anforderungen sind bei Mantis alle erfüllt – das Ding kommt nun bei uns nun zum Einsatz. Bleibt abzuwarten, wie es angenommen wird und ob die Kunden, Tester und Mitentwickler wirklich ihre Bugs, Featurewünsche etc. eintragen …

Share

JUG-Treffen mit Ed Burns

Am gestrigen Donnerstag fand das JUG-März-Treffen (JUG = Java User Group Erlangen-Nürnberg) diesmal in den Schulungsräumen der MATHEMA statt. Diesmal gab es eine Diskussionsrunde über die Zukunft des Webs mit Werner Eberling und Oliver Szymanski, sowie als „Star-„Gast Ed Burns (Spec. Lead von JSF, Sun Senior Staff Engineer).

Zunächst wurde über die Neuerungen im kommenden JSF2.0 diskutiert, mit der Quintessenz, dass vieles einfacher wird, aber nichts spektakulär Neues hinzu kommt. Viele Dinge, die man sich bisher über andere Frameworks/Tools ins Boot geholt hat, werden jetzt in den Standard integriert (z.B. Facelets). Die faces-config.xml lässt sich zukünftig auf ein Minimum reduzieren, da das meiste über Annotationen abgedeckt werden kann.

Im Anschluss ging die Diskussion um die Zukunft des Web (Web3.0?) zunächst um die Wünsche aus Entwicklersicht (z.B. RichClients im Web, …), die dann mehr und mehr in Richtung Anwendersicht abschweifte („Was will der Anwender in Zukunft?“) sowie die Probleme mit persönlichen Daten in einer vernetzten Welt.

Klar wurde dabei in erster Linie, wie schwer es ist, über Übermorgen hinaus zu blicken. Insgesamt hat es sehr viel Spaß gemacht und ich freue mich auf das April-Treffen.

Share

JSF / RichFaces: Doppelklick auf Tabellenzeile

Hier wird ein kurzes Beispiel gezeigt, wie man auf einer JSF-Seite unter Verwendung von RichFaces bzw. Ajax4jsf auf einen Doppelklick in einer DataTable mit einer Action reagieren kann.

Die Tabelle listet Personen auf, beim Doppelklick auf eine Zeile soll eine Maske zur Bearbeitung der selektierten Person geöffnet werden. In diesem Fall wurde nicht die „normale“ DataTable verwendet, sondern die ExtendedDataTable. Sie sieht in etwa so aus:

datatable

Zuerst der Codeausschnitt der JSF-Seite:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<h:form id="personen">
    <rich:extendedDataTable value="#{personListBean.fullPersonList}"
        var="person" id="persontable" 
        width="886px" height="400px" sortMode="single" selectionMode="single" >
        <a4j:support event="onRowDblClick" action="#{PersonEditBean.prepareEdit}">
            <f:setPropertyActionListener value="#{person}"
                target="#{PersonEditBean.selectedPerson}" />
        </a4j:support>
        <rich:column sortable="true" sortBy="#{person.nachname}"
            filterBy="#{person.nachname}" filterEvent="onkeyup"
            width="170px" label="Nachname">
            <f:facet name="header">
                <h:outputText value="Nachname"/>
            </f:facet>
            <h:outputText value="#{person.nachname}"/>
        </rich:column> 
        <rich:column sortable="true" sortBy="#{person.vorname}">
        <!-- [...] -->
        <!-- [weitere Columns ...] -->
    </rich:extendedDataTable>
</h:form>

Der entscheidende Code:
In Zeile 3 wird über var=“person“ die Variable für die verknüpften Instanzen in den Zeilen angelegt.
Die Zeilen 5 bis 8 definieren das AJAX Doppelklick Event. Als Action wird im PersonEditBean die Methode prepareEdit() angegeben. Dort geschieht eigentlich nichts weiter als das Umkopieren der Werte. Damit überhaupt die richtige (also die doppelgeklickte) Person verwendet wird, ist der PropertyActionListener nötig (Zeile 6 und 7).

Bleibt noch zu klären, wie denn nun die Maske zum Editieren der Person zum Zuge kommt. Dies wurde hier einfach mit einer klassischen Navigation geregelt; hier der Ausschnitt aus der faces-config.xml:

1
2
3
4
5
6
7
8
9
<navigation-rule>
    <from-view-id>/[...]/personen.jsp</from-view-id>
    <navigation-case>
        <from-action>#{PersonEditBean.prepareEdit}</from-action>
        <from-outcome>prepare_erfolgreich</from-outcome>
        <to-view-id>/[...]/editperson.jsp</to-view-id>
        <redirect/>
    </navigation-case>
</navigation-rule>

Die prepareEdit() Methode liefert als Ergebnis den String „prepare_erfolgreich“ und schon wird weitergeleitet. Immer? Eigentlich schon, lediglich der Internet Explorer will mal wieder nicht. Dagegen hilft aber Zeile 7 („<redirect/>“). Vielen Dank für diesen Hinweis aus Ralph’s Java Blog!

Share

Buchkritik: JPA mit Hibernate

jpa-hibernateEndlich mal ein Hibernate-Buch, das sich gleich voll und ganz auf die Annotations-Schreibweisen stürzt und die althergebrachte Konfiguration über XML-Dateien in einem separaten Kapitel abhandelt. Alles in allem haben die Autoren Bernd Müller und Harald Wehr in Ihrem Buch „Java-Persistence-API mit Hibernate“ einen geglückten Überblick über die Materie geschaffen und heben sich dabei durch einen kompakten, verständlichen Schreibstil hervor.

Besonders schön ist die Orientierung an der JPA – wann immer Feinheiten von Hibernate, die darüber hinaus gehen besprochen werden, wird dies gesondert hervorgehoben. Die Beispiele sind nie komplexer als nötig und damit leicht verständlich, wenngleich an manchen Ecken etwas konstruiert wird.

Als „Extras“ gibt es eine Einführung in Hibernate-Validator und -Search, einen Überblick über das Eclipse-Plugin Hibernate-Tools/JBoss-IDE, sowie eine Schnelleinführung in JBoss-Seam (wobei sich hier auch gleich Werbung für das neue Buch von Bernd Müller versteckt).

Share