... newer stories
Saturday, 19. April 2008
Document-Driven-Development mit FIT (2)
javatux, 19:36h
Im ersten Teil hatten wir eine einfache Tabelle mit Rechnername und Portnummer, die wir mit Hilfe des FIT-Frameworks automatisch überprüft haben. Jetzt wollen wir alle aktiven Ports testen:
Für solche Aufgaben, wo evtl. Tabellen-Zeilen hinzukommen können, bietet sich die RowFixture an:
getTargetClass() liefert eine Klasse zurück, die eine Reihe in der Port-Tabelle vom letzten Mal repräsentiert, und die query()-Methode liefert alle Ergebnisse zurück. Fangen wir mit getTargetClass() an und definieren dafür die PortTester-Klasse:
Für die Klasse gelten die gleichen Regeln wie für die PortScannerFixture-Klasse vom letzten Mal: Überschriften werden zu Attribute bzw. zu Methoden, wenn sie mit "()" enden. Damit können wir jetzt schonmal den FileRunner aufrufen:
FIT bemängelt hier, das beim Test die beiden Zeilen mit Port 22 und 80 fehlen – dies liegt daran, dass query() noch ein leeres Array zurückliefert. Das wollen wir ändern und für jeden offenen Port ein PortTester-Objekt in einem Array sammeln:
Hier werden jeweils für die wellknown Ports zwischen 0 und 1023 ein PortTester-Objekt angelegt. Nur wenn der Aufruf von Status() "aktiv" ist, wird es in die Liste aufgenommen und am Ende als Array zurückgegeben. Das Ergebnis auf meinem Rechner sah danach so aus:
Mit "surplus" werden die Spalten markiert, die hinzugekommen sind. Offensichtlich sind auf meinem Rechner noch die Ports 111 und 631 offen. Ein Blick in List of TCP and UDP port numbers offenbart, dass sich dahinter das "sun protocol" (RPC-Aufruf) und das "Internet Printing Protocol (IPP)" verbirgt.
Damit ist der kleine Ausflug in FIT beendet. Wenn Sie Interesse daran gefunden haben, dann besuchen Sie mich doch auf meinem Vortrag "Wie man tote Dokumente zum Leben erweckt" auf dem Java Forum Stuttgart.
Viel Spaß mit FIT!
de.aosd.PortScannerFixture | ||
Rechner | Portnummer | Status() |
localhost | 22 | aktiv |
localhost | 80 | aktiv |
Für solche Aufgaben, wo evtl. Tabellen-Zeilen hinzukommen können, bietet sich die RowFixture an:
public class PortScannerRowFixture extends RowFixture {
@Override
public Class<?> getTargetClass() {
return PortTester.class;
}
@Override
public Object[] query() throws Exception {
return new Object[0];
}
}
getTargetClass() liefert eine Klasse zurück, die eine Reihe in der Port-Tabelle vom letzten Mal repräsentiert, und die query()-Methode liefert alle Ergebnisse zurück. Fangen wir mit getTargetClass() an und definieren dafür die PortTester-Klasse:
public class PortTester {
public String Rechner;
public int Portnummer;
public String Status() throws UnknownHostException {
return PortScanner.isActive(Rechner, Portnummer) ? "aktiv" : "inaktiv";
}
}
Für die Klasse gelten die gleichen Regeln wie für die PortScannerFixture-Klasse vom letzten Mal: Überschriften werden zu Attribute bzw. zu Methoden, wenn sie mit "()" enden. Damit können wir jetzt schonmal den FileRunner aufrufen:
de.aosd.PortScannerRowFixture | ||
Rechner | Portnummer | Status() |
localhost missing | 22 | aktiv |
localhost missing | 80 | aktiv |
FIT bemängelt hier, das beim Test die beiden Zeilen mit Port 22 und 80 fehlen – dies liegt daran, dass query() noch ein leeres Array zurückliefert. Das wollen wir ändern und für jeden offenen Port ein PortTester-Objekt in einem Array sammeln:
public Object[] query() throws Exception {
ArrayList active = new ArrayList();
for (int i = 0; i < 1023; i++) {
PortTester tester = new PortTester();
tester.Portnummer = i;
tester.Rechner = "localhost";
if (tester.Status().equals("aktiv")) {
active.add(tester);
}
}
return active.toArray();
}
Hier werden jeweils für die wellknown Ports zwischen 0 und 1023 ein PortTester-Objekt angelegt. Nur wenn der Aufruf von Status() "aktiv" ist, wird es in die Liste aufgenommen und am Ende als Array zurückgegeben. Das Ergebnis auf meinem Rechner sah danach so aus:
de.aosd.PortScannerRowFixture | ||
Rechner | Portnummer | Status() |
localhost | 22 | aktiv |
localhost | 80 | aktiv |
localhost surplus | 111 | aktiv |
localhost surplus | 631 | aktiv |
Mit "surplus" werden die Spalten markiert, die hinzugekommen sind. Offensichtlich sind auf meinem Rechner noch die Ports 111 und 631 offen. Ein Blick in List of TCP and UDP port numbers offenbart, dass sich dahinter das "sun protocol" (RPC-Aufruf) und das "Internet Printing Protocol (IPP)" verbirgt.
Damit ist der kleine Ausflug in FIT beendet. Wenn Sie Interesse daran gefunden haben, dann besuchen Sie mich doch auf meinem Vortrag "Wie man tote Dokumente zum Leben erweckt" auf dem Java Forum Stuttgart.
Viel Spaß mit FIT!
Links:
- Beispiel-Projekt: portscanner080419 (zip, 7 KB)
- FIT: fit.c2.com
- Fitnesse: www.fitnesse.org
... link (0 Kommentare) ... comment
Tuesday, 15. April 2008
Tomcat Manager unter Eclipse WTP
javatux, 18:00h
Wenn man Tomcat aus den Eclipse Web Tools startet, hat man das Problem, dass dabei der Tomcat-Manager unter "/manager/html" nicht mitgestartet wird. Man kann zwar in der Server-Konfiguration für den Tomcat "${catalina_home}/webapp/manager" als externes Webmodul hinzufügen, aber das wird beim Starten mit einer SecurityException bestraft:
Ach ja, anmelden muss man sich als User "manager" - der ist nicht standardmäßig in tomcat-users.xml vorhanden. Falls man Probleme mit der Anmeldung hat, muss man evtl. dort nachschauen (falls man die Default-Authorisierung verwendet).
Happy Testing...
java.lang.SecurityException: Servlet of class org.apache.catalina.manager.HTMLManagerServlet is privileged and cannot be loaded by this web application org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) java.lang.Thread.run(Thread.java:595)Die Manager-Anwendung muss als "privileged" gekennzeichnet werden. Unter dem "Servers"-Projekt im Package-Explorer findet man die Tomcat-Konfigurationsdateien. Hier ergänzt man in servers.xml den Manager-Context:
<Context antiJARLocking="false" antiResourceLocking="false" docBase="/opt/tomcat6/webapps/manager" path="/manager" privileged="true" reloadable="false"/>
Die Pfade muss man natürlich an die lokale Gegebenheiten anpassen. Danach müsste der Tomcat-Manager nach Starten des Servers unter http://localhost:8080/manager/html erreichbar sein.Ach ja, anmelden muss man sich als User "manager" - der ist nicht standardmäßig in tomcat-users.xml vorhanden. Falls man Probleme mit der Anmeldung hat, muss man evtl. dort nachschauen (falls man die Default-Authorisierung verwendet).
Happy Testing...
... link (0 Kommentare) ... comment
Sunday, 13. April 2008
Document-Driven-Development mit FIT
javatux, 14:58h
(eine kleine Einführung in das FIT-Framework)
Schon mal TDD (Test-Driven-Development) ausprobiert? Dann wird Ihnen auch sicherlich das FIT-Framework von Ward Cunningham gefallen, dass sich sehr gut mit dem TDD-Ansatz kombinieren lässt.
Basis von FIT sind Tabellen, die als Eingabe für automatische Testfälle dienen. Als Beispiel werden wir eine Tabelle mit Ports heranziehen, die wir etwas abändern werden, um unseren eigenen Rechner damit überprüfen zu können:
Die Tabelle aus Wikipedia wurde um die Spalte "Rechner" und "Status()" ergänzt. Am Anfang der Tabelle wurde noch eine Zeile mit einem sogenannten "Fixture" eingefügt. Dabei handelt es sich um eine Java-Klasse, die später vom FIT-Framework aufgerufen wird:
ColumnFixture ist eine Oberklasse von FIT, die den meisten Komfort im Umgang mit Tabellen bietet. Zwei Dinge sind wichtig für die Imlementierung:
Der zweite Parameter (result.html) gibt die Ausgabedatei an, in der das Ergebnis abgelegt wird. Das Ergebnis entspricht im Wesentlichen der Eingabedatei mit Ausnahme der Tabellen:
Ok, jetzt können wir uns der Implementierung der Status()-Methode widmen, um die roten Tabellen-Einträge wegzubekommen:
Unter der Annahme, dass die PortScanner.isActive()-Methode das Gewünschte leistet, sollten die roten Einträge nun grün werden:
Damit wissen wir nicht nur, dass Port 22 und 80 auf unserem Rechner aktiv sind, sondern haben auch die isActive()-Methode unserer PortScanner-Klasse getestet.
Sollen noch andere Rechner oder Ports getestet werden, wird die Tabelle entsprechend erweitert. Was aber, wenn wir eine Liste aller aktiven Ports vorgeben wollen? Für solch eine Überprüfung bietet sich die RowFixture an – aber das ist ein Thema für's nächste Mal.
stay tuned...
Schon mal TDD (Test-Driven-Development) ausprobiert? Dann wird Ihnen auch sicherlich das FIT-Framework von Ward Cunningham gefallen, dass sich sehr gut mit dem TDD-Ansatz kombinieren lässt.
Basis von FIT sind Tabellen, die als Eingabe für automatische Testfälle dienen. Als Beispiel werden wir eine Tabelle mit Ports heranziehen, die wir etwas abändern werden, um unseren eigenen Rechner damit überprüfen zu können:
de.aosd.PortScannerFixture | ||||
Rechner | Portnummer | Dienst | Beschreibung | Status() |
localhost | 20 | FTP-Data | Dateitransfer (Datentransfer vom Server zum Client) | inaktiv |
localhost | 22 | SSH | Secure Shell | aktiv |
localhost | 80 | HTTP | Webserver | aktiv |
Die Tabelle aus Wikipedia wurde um die Spalte "Rechner" und "Status()" ergänzt. Am Anfang der Tabelle wurde noch eine Zeile mit einem sogenannten "Fixture" eingefügt. Dabei handelt es sich um eine Java-Klasse, die später vom FIT-Framework aufgerufen wird:
public class PortScannerFixture extends ColumnFixture {
public String Rechner;
public int Portnummer;
public String Dienst;
public String Beschreibung;
public String Status() {
return "not implemented";
}
}
ColumnFixture ist eine Oberklasse von FIT, die den meisten Komfort im Umgang mit Tabellen bietet. Zwei Dinge sind wichtig für die Imlementierung:
- ich muss Attribute als "public" bereitstellen, die genauso wie die Tabellen-Überschriften heißen (Rechner, Portnummer, Dienst, Beschreibung);
- Tabellen-Überschriften, die wie Methoden-Aussehen (hier: Status()) müssen implementiert werden und einen String zurückliefern.
> java fit.FileRunner services.html result.html
0 right, 3 wrong, 0 ignored, 0 exceptions
Der zweite Parameter (result.html) gibt die Ausgabedatei an, in der das Ergebnis abgelegt wird. Das Ergebnis entspricht im Wesentlichen der Eingabedatei mit Ausnahme der Tabellen:
de.aosd.PortScannerFixture | ||||
Rechner | Portnummer | Dienst | Beschreibung | Status() |
localhost | 20 | FTP-Data | Dateitransfer (Datentransfer vom Server zum Client) | inaktiv expected not implemented actual |
localhost | 22 | SSH | Secure Shell | aktiv expected not implemented actual |
localhost | 80 | HTTP | Webserver | aktiv expected not implemented actual |
Ok, jetzt können wir uns der Implementierung der Status()-Methode widmen, um die roten Tabellen-Einträge wegzubekommen:
public String Status() throws UnknownHostException {
return PortScanner.isActive(Rechner, Portnummer) ? "aktiv" : "inaktiv";
}
Unter der Annahme, dass die PortScanner.isActive()-Methode das Gewünschte leistet, sollten die roten Einträge nun grün werden:
de.aosd.PortScannerFixture | ||||
Rechner | Portnummer | Dienst | Beschreibung | Status() |
localhost | 20 | FTP-Data | Dateitransfer (Datentransfer vom Server zum Client) | inaktiv |
localhost | 22 | SSH | Secure Shell | aktiv |
localhost | 80 | HTTP | Webserver | aktiv |
Damit wissen wir nicht nur, dass Port 22 und 80 auf unserem Rechner aktiv sind, sondern haben auch die isActive()-Methode unserer PortScanner-Klasse getestet.
Sollen noch andere Rechner oder Ports getestet werden, wird die Tabelle entsprechend erweitert. Was aber, wenn wir eine Liste aller aktiven Ports vorgeben wollen? Für solch eine Überprüfung bietet sich die RowFixture an – aber das ist ein Thema für's nächste Mal.
stay tuned...
Links:
- Beispiel-Projekt: portscanner080413 (zip, 5 KB)
- FIT: fit.c2.com
- Fitnesse: www.fitnesse.org
... link (0 Kommentare) ... comment
Saturday, 1. March 2008
JUGS ObjektForum
javatux, 11:58h
Am 25. Februar gestaltete die Java User Group Stuttgart zusammen mit andrena objects ag eine Abend zum Thema Software-Qualität. |
|
... link (0 Kommentare) ... comment
Sunday, 24. February 2008
Patterntesting on ibiblio.org
javatux, 22:30h

... link (0 Kommentare) ... comment
Thursday, 14. February 2008
Wie man tote Dokumente zum Leben erweckt!
javatux, 09:36h
Dokumentation ist nicht Teil der Lösung, sondern Teil des Problems. (Tom DeMarco, Timothy Lister)Dokumente sind oft die erste Anlaufstelle, um sich in fremde Systeme einzuarbeiten. Leider sieht es in der Praxis aber oft so aus, dass Dokumente widerwillig erstellt, nur oberflächlich geprüft und danach nie wieder angefasst werden. Entsprechend nehmen die Qualität und die Übereinstimmung mit der Realität immer mehr ab.
Mit dem FIT-Framework von Ward Cunningham besteht die Möglichkeit, Dokumente als Eingabe für Integrations-Tests heranzuziehen und damit auch die Dokumentation aufzuwerten und abzugleichen.
Auf dem iX CeBIT Forum 2008 bietet sich am 4. März ab 16:00 die Gelegenheit, Näheres über FIT zu erfahren oder/und sich auszutauschen.
It's CeBIT time!
... link (0 Kommentare) ... comment
Tuesday, 29. January 2008
PatternTesting 0.5.0 released
javatux, 00:00h

This is my first release since I reanimated patterntesting (see PatternTesting Reloaded). One goal of this release was to become familiarized with the release process for Maven and Sourceforge.net. If you plan to do it for your project here 2 links which helps me: The changes report and other project reports you can find on the PatternTesting home page.
Happy (Pattern)Testing!
... link (0 Kommentare) ... comment
Thursday, 10. January 2008
Prosit Neujahr
javatux, 00:47h

Vielleicht wird auch 2008 das Jahr des Linux-Desktops, wie so schon oft angekündigt wurde. Oder Linux bekommt den blauen Engel, weil es so schonend mit den Resourcen umgeht. Apropos Resourcen bzw. Umwelt - Green IT heißt jetzt bekanntlich das Schlagwort. Wie das aussehen wird? Vielleicht wird jetzt für jedes Programm bestimmt, wieviel CO2-Ausstoß es verursacht? So entspricht eine Google-Suche eine Stunde Licht. Oder ein Avatar im Second Life kommt auf knapp 1800 Kilowattstunden Strom pro Jahr, wie der SWR zu berichten weiß . Vielleicht wird es auch die erste Wärmekraftkopplung für Prozessoren geben - dann heißt es im Winter: fahr doch mal den Rechner hoch, mir ist kalt.
Ein weiteres Thema ist die Virtualisierung, die uns mit Second Life inzwischen auch bis ins tägliche Leben vordringt. Für das "Real Life" wünsche ich allen Lesern dieses Blogs ein frohes und erfolgreiches Jahr!
... link (0 Kommentare) ... comment
Thursday, 20. December 2007
UML-Editor für Eclipse
javatux, 19:42h
Modelle sind eigentlich nur was für Müsli-Programmer und Spanner, aber manchmal kommt man auch als "Real Programmer" nicht herum, Abläufe und Beziehungs-Probleme aufzumalen (nicht nur, weil es der Vorgesetzter so will, sondern weil es (über)lebenswichtige Diagramme gibt). Was man eigentlich immer braucht, ist ein Übersichtsbild über die gesamte Architektur (und das sollte möglichst aktuell gehalten werden!!!).
Wenn man seine Architekturen nicht immer mit Papier und Bleistift zeichnen will (auch das hat seinen Reiz und ist nicht immer der schlechteste Ansatz), kommt schnell der Wunsch nach einem UML-Tool auf. Zwei Eclipse-Plugins habe ich mir dazu näher angeschaut: Violet UML Editor und eUML2 (Free Edition).
Vorteile:
Vorteile:
Wenn man seine Architekturen nicht immer mit Papier und Bleistift zeichnen will (auch das hat seinen Reiz und ist nicht immer der schlechteste Ansatz), kommt schnell der Wunsch nach einem UML-Tool auf. Zwei Eclipse-Plugins habe ich mir dazu näher angeschaut: Violet UML Editor und eUML2 (Free Edition).
Violet UML Editor
Mein früherer Kunstlehrer meinte zwar immer, Lila ist die Farbe des Schwachsinns, aber dies gilt nicht für den lila Editor unter den UML-Tools. Auch wenn er ein Eclipse-Plugin ist, kann man ihn auch als Webstart-Anwendung starten - ideal für das kleine Diagramm zwischendurch.Vorteile:
- einfach zu bedienen
- auch als Webstart-Anwendung verfügbar
- kann leider nur Graphiken als PNG exportieren
- binäres Ablageformat (mag ich nicht so)
eUML2 (Free Edition)
Das eUML2-Plugin von Soyatec ist zwar ein kommerzielles Plugin, aber es gibt es auch in einer eingeschränkten "Free Edition", die für viele Fälle ausreichend sein dürfte. Was mir besonders gut gefallen hat, ist die Ablage direkt als XMI (Version 2.0) und die vielfältigen Export-Möglichkeiten der Diagramme (u.a. XVG und WMF, letzteres aber nicht in der Free Edition).Vorteile:
- direkte Ablage als XMI
- verschiedene Export-Möglichkeiten der Diagramme
Fazit
Beide UML-Tools eignen sich dafür, wenn man z.B. schnell mal ein Sequenz-Diagramm malen will. Inwieweit sie auch für größere Aufgaben geeignet sind, kann ich (noch) nicht beurteilen...... link (0 Kommentare) ... comment
Friday, 7. December 2007
10 Jahre JUGS
javatux, 23:33h
Gestern feierten wir von der Java User Group Stuttgart unser 10-jähriges Bestehen. Ich war zwar nicht von Anfang an dabei, aber doch schon ziemlich lange. Interessant war vor allem der Rückblick auf die "gute alte Zeit"; und die Erkenntis, dass die Probleme immer noch (fast) die gleichen sind wie damals.
Mal seh'n, was die nächsten 10 Jahre so bringen werden...
![]() |
2007-12-Ju |
Mal seh'n, was die nächsten 10 Jahre so bringen werden...
... link (0 Kommentare) ... comment
Tuesday, 27. November 2007
Umstieg von OpenSUSE 10.2 auf Ubuntu 7.10
javatux, 10:57h
Schon länger hatte ich den Umstieg von OpenSUSE auf Ubuntu geliebäugelt. Dabei war ich mit OpenSUSE nicht generell unzufrieden, aber manche Pakete (wie z.B. der Tomcat oder die JDK's) waren etwas undurchschaubar installiert. Und der Schmusekurs mit Microsoft birgt für die zukünftige Weiterentwicklung einige Risiken, sodass es schwer einzuschätzen ist, wie es mit Novell weitergehen wird.
Als dann im November vom Heise-Verlag ein Sonderheft Linux mit Ubuntu 7.10 ("Gutsy Gibbon") herauskam, habe ich den Umstieg gewagt. Ich war überrascht, wie problemlos die Installation auf meinem Notebook (IBM T41) geklappt hat. Auch die 3D-Unterstützung der ATI-Radeon-Karte wurde standardmäßig aktiviert.
Ubuntu bedeutete aber auch, weg von meinem geliebten KDE-Desktop hin zur Gnome-Oberfläche. Trotz guter Vorsätze bin ich aber doch wieder zurück zu KDE (und Kubuntu) gewechselt, da ich es nicht geschafft habe, dass ein Fenster die obere und untere Task-Leiste überlappen darf. Da ich nur eine Auflösung von 1024x768 habe, möchte ich aber mein Eclipse auf dem vollen Bildschirm sehen.
Etwas ungewöhnlich ist, dass seit Gutsy die vga=xxx-Einstellungen beim Booten ignoriert werden, wie ich jetzt im Ubuntu-Forum erfahren habe. Appropo Forum: für Fragen alller Art ist ubuntuusers.de eine gute Anlaufsstelle - mit einem gut gepflegten Wiki und aktivem Forum.
Als dann im November vom Heise-Verlag ein Sonderheft Linux mit Ubuntu 7.10 ("Gutsy Gibbon") herauskam, habe ich den Umstieg gewagt. Ich war überrascht, wie problemlos die Installation auf meinem Notebook (IBM T41) geklappt hat. Auch die 3D-Unterstützung der ATI-Radeon-Karte wurde standardmäßig aktiviert.
Ubuntu bedeutete aber auch, weg von meinem geliebten KDE-Desktop hin zur Gnome-Oberfläche. Trotz guter Vorsätze bin ich aber doch wieder zurück zu KDE (und Kubuntu) gewechselt, da ich es nicht geschafft habe, dass ein Fenster die obere und untere Task-Leiste überlappen darf. Da ich nur eine Auflösung von 1024x768 habe, möchte ich aber mein Eclipse auf dem vollen Bildschirm sehen.
Etwas ungewöhnlich ist, dass seit Gutsy die vga=xxx-Einstellungen beim Booten ignoriert werden, wie ich jetzt im Ubuntu-Forum erfahren habe. Appropo Forum: für Fragen alller Art ist ubuntuusers.de eine gute Anlaufsstelle - mit einem gut gepflegten Wiki und aktivem Forum.
... link (0 Kommentare) ... comment
Wednesday, 21. November 2007
Groovy begeistert
javatux, 14:59h
Durch die vielen Zugfahrten bin ich endlich mal dazu gekommen, mich etwas intensiver mit Groovy zu beschäftigen, und es begeistert mich immer mehr. Kürzlich hatte ich das Problem, einen einfachen Test-Client zu schreiben, der das Ergebnis einer Webseite zurückliefert (sozusagen ein einfaches 'wget'). In Groovy ist das ein Zwei-Zeiler:
Dies ist nur ein Beispiel unter vielen, wie sich einfache (und auch komplexere) Aufgaben mit wesentlich weniger Zeilen als mit "Pure Java" lösen lassen und man dennoch die gewohnten Java-Bibliotheken zur Verfügung hat. Und das Schöne daran ist, dass man es mit der Groovy-Console interaktiv ausprobieren kann und so sehr kurze Turnaround-Zeite hat.
Mein Fazit: Groovy rocks!
def url = new URL("https://oli.blogger.de/"); def httpConnection = url.openConnection(); println "received: " + httpConnection.inputStream.getText();Na ja, eigentlich ein Dreizeiler, aber die ersten beiden Zeilen könnte man noch zu einer Zeile zusammenfassen.
Dies ist nur ein Beispiel unter vielen, wie sich einfache (und auch komplexere) Aufgaben mit wesentlich weniger Zeilen als mit "Pure Java" lösen lassen und man dennoch die gewohnten Java-Bibliotheken zur Verfügung hat. Und das Schöne daran ist, dass man es mit der Groovy-Console interaktiv ausprobieren kann und so sehr kurze Turnaround-Zeite hat.
Mein Fazit: Groovy rocks!
... link (0 Kommentare) ... comment
Wednesday, 14. November 2007
Maven und JSF
javatux, 10:02h
Wer für den täglichen Build Maven einsetzt, kann zu MyFaces greifen, wenn er mit Java Server Faces (JSF) arbeiten will. Diese Bibliothek befindet sich unter ibiblio.org und lässt sich damit problemlos in das pom.xml einbinden.
Allerdings hat MyFaces 1.2.0 noch einige kleine Macken (z.B. bei der <h:dataTable>, so dass man vielleicht auf die Referenz-Implementierung (RI) der Java Server Faces von Sun zurückgreifen möchte. Aber wo bekomme ich diese Bibliothek für Maven her?
Die Lösung: für java.net gibt es ein eigenes Repository, das man unter dem Abschnitt <repositories> in sein pom.xml aufnehmen kann:
Allerdings hat MyFaces 1.2.0 noch einige kleine Macken (z.B. bei der <h:dataTable>, so dass man vielleicht auf die Referenz-Implementierung (RI) der Java Server Faces von Sun zurückgreifen möchte. Aber wo bekomme ich diese Bibliothek für Maven her?
Die Lösung: für java.net gibt es ein eigenes Repository, das man unter dem Abschnitt <repositories> in sein pom.xml aufnehmen kann:
<repositories> <repository> <id>java.net</id> <url>http://download.java.net/maven/1</url> <layout>legacy</layout> </repository> </repositories>Damit kann man die Artifact-Ids jsf-api und jsf-impl unter der Group-Id javax.faces in sein pom.xml mit aufnehmen.
... link (0 Kommentare) ... comment
Friday, 9. November 2007
Performance-Abend
javatux, 23:35h
Gestern leitete ich den Performance-Abend, der im Rahmen der SIG-AspectJ in der Alten Scheuer in Degerloch stattfand. Schon im Vorfeld hatten sich erstaunlich viele Teilnehmer angemeldet, und so war der Saal gut gefüllt.
Drei wichtige Erkenntnisse habe ich aus den Vorträgen mitgenommen:
![]() |
2007-11-Pe |
Drei wichtige Erkenntnisse habe ich aus den Vorträgen mitgenommen:
- es gibt keinen Grund, noch an JDK 1.4 festzuhalten (auch wenn das Management das manchmal anders sieht),
- vor Tuning-Maßnahmen muss erst mal gemessen werden,
- Performance-Engpässe ohne Tools zu suchen ist wie Bytecode schreiben mit vi -- mühsam!
... link (0 Kommentare) ... comment
... older stories