Saturday, 5. September 2009
gearconf in Düsseldorf
Eher zufällig wurde ich auf die gearconf Anfang Oktober aufmerksam. Da sie in Düsseldorf stattfindet und ich dort gerade tätig bin, habe ich einen Beitrag "Rettet die Dokumente!" eingereicht, um über meine Erfahrungen mit dem FIT-Framework zu berichten (siehe dazu auch den Beitrag über Document-Driven-Development mit FIT).

Was ich mir auf der Konferenz auf jeden Fall anhören möchte, ist der Vortrag über Hudson. Zum einen, weil ich inzwischen von Continuum zu Hudson als Build-Server gewechselt bin, zum anderen, weil der Vortrag auf dem Java Forum Stuttgart als bester mit der Traumnote 1,05 bewertet wurde.

... link (0 Kommentare)   ... comment


Sunday, 16. August 2009
Jetty and the NoSuchMethodError (3)
Last time we saw how we can use the ClasspathMonitor of PatternTesting and the JCconsole of the JDK to find classpath problems. But what if the program crashes immediately after you started it? You have no chance to use the JConsole here!

For this case the ClasspathMonitor can be added as shutdown hook:
public static void main(String[] args) throws Exception {
    ClasspathMonitor.addAsShutdownHook();
    ...
}

Each time your program crashes a text file "cpmonxxxxx.txt" is dumped into the temp directory. If you open this file and look for the string "IncompatibleClasses" you will see an entry like this:
...

=== IncompatibleClasses ===
class org.apache.jasper.compiler.Localizer

=== IncompatibleClasspath ===
/Users/oliver/.m2/repository/tomcat/jasper-compiler/5.5.9/jasper-compiler-5.5.9.jar
/Users/oliver/.m2/repository/tomcat/jasper-runtime/5.5.9/jasper-runtime-5.5.9.jar

...
There are two other useful side effects if you register the ClasspathMonitor as shutdown hook:
  • You need not to register it as MBean (it is automatically registered).
  • You'll get classes and classpathes which are never used during the lifetime of your application.
Do you know the Lava Flow Anti Pattern? PatternTesting can help you to find dead classes (and also dead methods) in your code. But this is another story...

... link (0 Kommentare)   ... comment


Saturday, 15. August 2009
Jetty and the NoSuchMethodError (2)
How can classpath problems like the NoSuchMethodError described yesterday be found? The answer to this question can be found with the ClasspathMonitor provided by PatternTesting. All you need is to add patterntesting-rt-xxx.jar from PatternTesting Runtime to your classpath and to register the ClasspathMonitor as MBean:
public static void main(String[] args) throws Exception {
    ClasspathMonitor.registerAsMBean();
    Runner runner = new Runner();
    runner.start();
}

If you start the application you have to add the options
  • -Dcom.sun.management.jmxremote.local.only=false
  • -Dcom.sun.management.jmxremote
for JMX otherwise you would not see your application in the list of started java processes when you open JMX console.

Start your program and then the jconsole. The jconsole is since Java 5 part of the JDK. When you open the MBeans tab you can find the ClasspathMonitor MBean under the patterntesting folder. As you can guess on the screenshot below the ClasspathMonitor found an incompatible class org.apache.jasper.compiler.Localizer, i.e. this class was found more than once in the classpath (in jasper-compiler-5.5.9.jar and jasper-runtime-5.5.9.jar) but with different versions.



I don't know why I had used this version of Jasper. After I upgraded to Jasper 5.5.15 my JSP page appears without an error.

to be continued...

... link (0 Kommentare)   ... comment


Saturday, 15. August 2009
Jetty and the NoSuchMethodError
Jetty is a small servlet engine you can embed in your application. For my first experiment I started with a simple program to use it as HTML server:
public final class Runner {

    private final Server jetty;

    public Runner() {
        jetty = new Server(4040);
    }

    public void start() throws Exception {
        jetty.setHandler(new WebAppContext("src/main/webapp", "/"));
        jetty.start();
    }

    public static void main(String[] args) throws Exception {
        ClasspathMonitor.addAsShutdownHook();
        Runner runner = new Runner();
        runner.start();
    }

}

I have created a simple HTML page which is located in the directory src/main/webapp. After running this little Runner class from Eclipse I could see the HTML page under http://localhost:4040/.

Now I want more - I want to use it as JSP engine. Before I did a small test to use it as servlet engine which was successful (I created only a small web.xml with an InitServlet). To use Jetty as JSP environment you must include some libraries which are listed in Embedding+Jetty (e.g. the Jasper libraries).

I put the needed libraries in my classpath, created a simple JSP and started Jetty again. When I access the JSP page I got a HTTP ERROR 500 and the following stacktrace:
org.eclipse.jdt.internal.compiler.env.NameEnvironmentAnswer.(Lorg/eclipse/jdt/internal/compiler/env/IBinaryType;)V

Caused by:

java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.env.NameEnvironmentAnswer.(Lorg/eclipse/jdt/internal/compiler/env/IBinaryType;)V
	at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:214)
	at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:183)
	at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:119)
	at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.getPackage(Scope.java:2149)
	...
What the hell is the problem here? My first suspicion was that it could be a classpath problem. But how can I confirm it?

to be continued...

... link (0 Kommentare)   ... comment


Sunday, 9. August 2009
Synchronisieren mit dem Mac
Heute stand ich vor dem Problem, dass ich mein MacBook mit meinem Ubuntu-Server abgleichen wollte. Unter Linux hatte ich dazu anfangs rsync verwendet, später bin ich dann auf Unison umgestiegen, da es dazu eine wirkliche nette GUI gibt.

Unison

Unison gibt es auch in einer Mac-Version. Die ersten Eindrücke mit dieser Version waren auch ganz vielversprechend. Allerdings zeigte sich dann nach der ersten Sychnronisierung und anschließendem Neustart, dass teilweise die gleichen Dateien wieder zum Abgleich angeboten wurden. Außerdem hatte Unison Problem mit Umlauten im Dateinamen. Hier schien Linux und Mac OS-X doch zu unterschiedlich zu sein.

Synkron

Synkron ist eine plattform-übergreifende Anwendung, mit der sich Ordner synchronisieren lassen. Die Oberfläche sieht zwar ganz brauchbar aus, allerdings wird die Bedienung oft durch lange Wartezeiten zur Qual. Weitere Erfahrungen finden sich unter den Kommentaren zu Synkron – Backup-Lösung aus der Linux-Welt.

arRsync

arRsync ist eigentlich nur ein graphisches Frontend zum rsync-Kommando. Leider fehlt die Möglichkeit, einen Simulationslauf durchzuführen, sodass ich mir dieses Programm nicht näher angeschaut habe.

Fazit: Bis jetzt habe ich noch nichts gefunden, was mich wirklich überzeugt hat. Vielleicht werde ich doch wieder zu rsync zurückgehen, schließlich hat es alles, was ich brauche (wenn nur die Bedienung nicht so besch...eiden wäre!).

Nachtrag (21.8.): Ursache für das Unison-Problem (Dateien wurden erneut zum Abgleich angeboten) war vermutlich eine volle Platte, wie sich aus dem Studium der Log-Datei (unison.log) ergab.

... link (0 Kommentare)   ... comment


Monday, 6. July 2009
AJDT-Installation mit Eclipse 3.5
Mit der Installation des neuen AJDT-Plugins für Eclipse Galileo hatte ich das Problem, dass mir nach Eingabe der AJDT Update Site (http://download.eclipse.org/tools/ajdt/35/update) keine Plugins zur Auswahl angeboten wurde.
Lösung: das Kästchen vor "Group items by category" darf nicht selektiert sein.

... link (0 Kommentare)   ... comment


Monday, 29. June 2009
Weblogic-Server 10.3 auf Mac OS-X
WLS 10.3 wird zwar nicht offiziell unterstützt für Mac OS-X, aber mit ein bißchen Handarbeit sollte er auch darunter laufen. Hier die wichtigsten Schritte:
  1. den Mac auf Java 6 umstellen (Dienstprogramme > Java-Einstellungen)
  2. folgende Kommandos ausführen, um dem Installer eine bekannte Java-Version vorzugaukeln:
    $ cd /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
    $ sudo mkdir -p jre/lib
    $ sudo touch jre/lib/rt.jar
    $ sudo touch jre/lib/core.jar
  3. von der WLS-Download-Seite die Version für HP herunterladen (server103_generic.jar, 473 MB)
  4. java -Dos.name=unix -jar server103_generic.jar starten, daraufhin erscheint der graphische Installer
  5. Bei "Choose Install Type" Custom auswählen und den Workshop abwählen (den braucht man nicht)
  6. Bei "JDK Selection" erscheint dann ein "Unknown 0.0.0" als lokales JDK (was anderes steht aber auch nicht zur Auswahl, also weiter)
Der Rest sollte (fast) genauso funktionieren wie auf den anderen Systemen.

Hilfreiche Links:

... link (0 Kommentare)   ... comment


Wednesday, 17. June 2009
Brownbag in Düsseldorf
Brownbags sind Info-Veranstaltungen, zu denen man sich zwanglos trifft und sein mitgebrachtes Futter verzehrt, während einer über ein interessantes Thema referiert. Der Begriff kommt aus dem Amerikanischen, da man dort sein Essen in "braunen Tüten" aus dem Supermarkt mitbringt.

Zum ersten Mal erlebte ich diese Form des Informations-Austausches bei Pironet in Köln und war so begeistert davon, dass ich sie bei uns in der Firma (agentes) vorgestellt und etabliert habe. Heute habe ich es bei Örag in Düsseldorf ausprobiert (Thema war Rettet die Dokumente!), wo ich seit 1. April tätig bin. Auch hier war das Feedback positiv.

Wer's selbst mal ausprobieren will: einfach interessantes Thema aussuchen, Pizza bestellen und Leute einladen...

... link (0 Kommentare)   ... comment


Friday, 29. May 2009
Getting Started with PatternTesting
Logo for PatternTestingThe old article Hello World with PatternTesting is a little bit outdated because the patterntesting-check.jar was splitted into patterntesting-check-ct.jar and patterntesting-check-rt.jar. The reason for this split was performance problems with Eclipse 3.3 (not 3.4, see also Performance Boost with Eclise 3.4 / AJDT 1.6.3). But since this week there is now a MediaWiki with a Getting Started section available.
Happy PatternTesting...

... link (0 Kommentare)   ... comment


Saturday, 9. May 2009
Nachbetrachtung zu den Test-Tagen
2009-05-TestTage
Die Suttgarter Test-Tage sind jetzt vorbei - Zeit, ein kleines Resümee zu ziehen. Beim Vortrag von Johannes Link wurde wieder alte Erinnerungen vergangener Hardware-Generationen wach (als die Hardware wirklich noch "hard" war). Einen PET 2001 kannte ich nur aus Katalogen (ich glaube, Quelle hatte ihn damals vertrieben), aber die Nachfolgegeräte wie der VC20-Brotkasten oder Atari ST hatte ich selber unter den Fingern.

Beim Glass-Box-Test kam dann CodeCover zum Zuge, dessen Eclipse-Plugin mich überzeugt hat. Die kommerziellen Tools zum Auffinden von Memory-Leaks dagegen konnten mich nicht überzeugen - sie gab es nämlich nur für Windows, so dass ich sie nicht ausprobieren konnte. Dafür gibt es immer noch den HPJmeter, den ich mal vor Jahren ausprobiert hat. Und er wird sogar noch aktiv weiterentwickelt (allerdings musste ich eine ganze Weile suchen, bis ich ihn auf der HP-Seite gefunden habe).

Bei der abendlichen Postersession (z.B. Einstieg in PatternTesting) und beim Grillabend (der von agentes gesponsort wurde) bestand die Gelegenheit, sich auszutauschen, was von den meisten Teilnehmern auch angenommen wurde. Mit dem Wetter hatten wir Glück, es schien die Sonne. Ganz im Gegensatz zum Freitag, an dem es mehrfach regnete. Das wäre nicht weiter störend gewesen, wenn das Dach nicht so laut gewesen wäre.

Beim Vortrag von Marc Guillemot rächte es sich dann, dass wir keinen Internet-Anschluss hatten. Das Nachinstallieren von Groovy und einiger Maven-Bibliotheken nahm dadurch doch mehr Zeit ein als geplant. Für's nächste Mal werden wir darauf schauen, dass wir online gehen können.

Fazit: alles in allem war es eine gelungene Veranstaltung, die wir wahrscheinlich wiederholen wollen. Was wir für's nächste Mal vielleicht anders machen würden, wären (neben Internet-Anschluss) längere Pausen zwischen den Vorträgen, um den Teilnehmern mehr Zeit zum gegenseitigen Austausch zu geben.

... link (0 Kommentare)   ... comment


Saturday, 2. May 2009
Stuttgarter PatternTest-Tage
Logo for PatternTestingAm Donnerstag ist es soweit - da beginnen die Stuttgarter Test-Tage. Auf der Postersession am Donnerstag abend wird es dann die Gelegenheit geben, seine ersten Schritte mit PatternTesting auszuprobieren.
Resourcen: Happy (Pattern-)Testing!

... link (0 Kommentare)   ... comment


Tuesday, 7. April 2009
Stuttgarter Test-Tage 2009
Das Programm der Stuttgarter Test-Tage ist jetzt online. Und da sind einige bekannte Namen wie Angelika Langer, Andy Bosch oder Johannes Link (der auch die Keynote halten wird) dabei. Es lohnt sich also in jedem Fall, sich dafür anzumelden, auch wenn man selbst natürlich keine Fehler macht ;-)

Wer Fragen oder Anregungen zur Veranstaltung hat, kann sie auch im JUGS-Forum unter Events (ein)stellen.

Frohe Ostern

... link (0 Kommentare)   ... comment


Monday, 23. March 2009
Performance Boost with Eclise 3.4 / AJDT 1.6.3
In one of our projects we are still working with Eclipse 3.3 because we use the WTP 2.0 plugin and have failed in the past with the upgrade to Eclipse 3.4 / WTP 3.0 (we had strange classpath problems with JSF). We used one AspectJ lib (patterntesting-rt) and wanted to add also patterntesting-check as AspectJ lib. But the compile time was a desaster - it slows down to 30 seconds for an incremental build.

From the aspectj-users mailing list I got the tip to use Eclipse 3.4 with the actual AJDT plugin. And really, with this version we get a dramatic speedup for the incremental build:

full build incremental build
Eclipse 3.3 75 s 34 s
Eclipse 3.4 30 s 1 s

These are the time for the AJBuilder.build() we found out with the AJDT Event Trace (you can open it as view in Eclipse). As you can see the incremental compile is more than 30 times faster as before.

... link (0 Kommentare)   ... comment


Sunday, 8. March 2009
JugsBase mit Pattern-Testing
Nachdem ich das letztes Mal beschrieben habe, wie man die Beispiel-Anwendung zu den Test-Tagen 2009 zum Laufen bringt, möchte ich in das dort erstellte Projekt die PatternTesting-Bibliothek einbinden (Sie können es aber auch mit jedem anderen Projekt ausprobieren). Dazu brauchen wir patterntesting-rt-0.9.0.jar und patterntesting-check-0.9.0.jar, das über die PatternTesting-Homepage oder von ibiblio.org/maven2 heruntergeladen werden kann.

Kontext-Menü mit den AspectJ-ToolsDa PatternTesting eine AspectJ-Bibliothek ist, müssen wir erst einmal das AJDT-Plugin installieren (s. Download-Seite des AJDT-Plugins). Danach sollte im Kontext-Menü "AspectJ-Tools > Convert to AspectJ Project" auftauchen. Dadurch ändert sich das Projekt-Icon und bekommt "AJ" als Beschriftung verpasst, wo vorher nur ein "J" stand. Ansonsten passiert nicht viel. Über den gleichen Menüpunkt "AspectJ Tools" können Sie das Projekt auch wieder zu einem normalen Java-Projekt degradieren ("Remove AspectJ Capability").

Patterntesting-Bibliothek einbindenDer nächste Schritt besteht in der Einbindung der beiten Pattern-Testing-Bibliotheken. Dazu rufen wir die Projekt-Eigenschaften auf und tragen unter "AspectJ Build > Aspect Path" die beiden Pattern-Testing-Bibliotheken ein. Jetzt noch "Ok" gedrückt - das war's auch schon. Die "advice defined"-Warnungen können Sie ignorieren oder über "Project Properties > AspectJ Compiler" unter der Überschrift "Potential matching problems" abschalten, indem Sie dort "Advice did not match (Java 5 only)" auf "Ignore" stellen.

Den Warnungen "No logging should be done using the default output and error streams." sollten Sie allerdings nachgehen. Sie werden feststellen, dass hier System.out.println für die Ausgabe verwendet wurde. So etwas macht man besser mit Log4J oder anderen Logging-Frameworks.

Was man sonst noch alles mit der PatternTesting-Bibliothek anstellen, wird noch folgen...

... link (0 Kommentare)   ... comment