Reflection per Hand oder einfach mit Apache Commons

Gerade für das Schreiben von Unit-Tests benötigt man häufig die Möglichkeit per Reflection auf private Methoden oder Fields zuzugreifen. Bisher habe ich das immer selbst programmiert und sehr viel Boilerplate-Code erzeugt. Um auf ein private Field zuzugreifen kommt Ihnen der folgende Mechanismus wahrscheinlich sehr bekannt vor:

Field myField = myObject.getClass().getDeclaredField("myPrivateField");
accessible = myField.isAccessible();
myField.setAccessible(true);
Object theObjectIWanted = myField.get(myObject);
myField.setAccessible(accessible);

Das funktioniert zwar super, aber ist immer sehr umständlich. Daher habe ich mir in jedem Projekt erstmal eine ReflectionUtils-Klasse angelegt um solche Dinge zu kapseln. Wesentlich einfacher als das Rad jedesmal neu zu erfinden, ist die Verwendung der Klasse FieldUtils auf Apache Commons Lang, wie folgendes Beispiel zeigt:

Object theObjectIWanted = FieldUtils.readField(myObject, "myPrivateField", true);

Drei Parameter werden hier übergeben. Zuerst das Objekt, von dem das im zweiten Parameter als String angegebene Field ausgelesen werden soll. Der dritte Parameter ist optional und wird für setAccessible(accessible) verwendet.

Für den Methodenaufruf musste man per Hand solche Dinge tun:

Method myMethod = myObject.getClass().getMethod("myMethod");
Object myReturnValue = myMethod.invoke(myObject);

Das ist schon mal wesentlich weniger Code als beim Zugriff auf Fields, aber noch einfacher geht auch hier mit Apache Commons Lang:

Object myReturnValue = MethodUtils.invokeMethod(myObject, "myMethod", null);

Auch hier gibt es drei Parameter. Zuerst wieder das Objekt, dann der Name der Methode als String. Der dritte Parameter ist mit Varargs realisiert und ist für die Parameter einer Methode gedacht.

Fazit:

Wie immer im Leben muss man das Rad nicht jedesmal neu erfinden, man muss nur wissen, dass es das Rad schon gibt.😉

Kommentare in Facelets – Vorsicht ist geboten

Wenn Sie auch zu den verzweifelten JSF Entwicklern gehören, die bereits Stunden damit verbracht haben, einen Fehler in einer XHTML Seite  zu suchen, der nicht erklärbar ist und dann auch noch damit begründet ist, dass Quellcode innerhalb eines Kommentares ausgeführt wird, dann nehmen Sie sich 2 Minuten Zeit, lehnen sich entspannt zurück und setzen Sie mal wieder ein Lächeln auf… Ihr Problem scheint gelöst…

Den Rest des Beitrags lesen »

Veröffentlicht in Entwicklung, Konfiguration. Schlagwörter: , , . Leave a Comment »

JVM: Speicher, Heap, GC und Co.

Prinzipiell muss sich ein Java-Entwickler nicht um die Speicherbereinigung kümmern, wie es in anderen Programmiersprachen der Fall ist. Die Speicherbereinigung stellt in Java die Garbage Collection (GC) zur Verfügung. Dabei sorgen unterschiedliche Algorithmen zu unterschiedlichen Zeitpunkten dafür, dass der Speicherplatz von nicht mehr referenzierten Objekten freigegeben wird. Da in einer JVM relativ viele Objekte erfahrungsgemäß eine ziemlich kurze Lebensdauer haben, teilt sich der Speicher einer JVM in mehrere Bereiche, wie folgende Grafik zeigt:

Den Rest des Beitrags lesen »

Spring-Aspekte mit Annotations erstellen

Neben der gewöhnlichen Verwendung der XML-Konfiguration für Aspekte innerhalb einer Spring-Anwendung, können seit Spring 2.5 auch Annotations zur Definition von Aspekten verwendet werden. Den Rest des Beitrags lesen »

Veröffentlicht in Entwicklung. Schlagwörter: , , , . Leave a Comment »

Formular löschen einfach gemacht | Zurücksetzen einer Conversation in Seam

Folgendes Anwendungsszenario:

1.) Ein Nutzer füllt ein Formular aus

2.) Der Nutzer möchte seine Formulareingaben zurücksetzen (reset)

Den Rest des Beitrags lesen »

Veröffentlicht in Entwicklung. Schlagwörter: , , , , . Leave a Comment »

Sourcen der Java-API in Eclipse einbinden

Bei der Softwareentwicklung unter Java ist es häufig sehr hilfreich, wenn man sich „mal eben“ den Quellcode der verwendeten Java-Klasse aus der Java-API ansehen kann. Dazu kann der Quellcode in die IDE (hier am Beispiel von Eclipse) eingebunden werden. Den Rest des Beitrags lesen »

Veröffentlicht in Entwicklung. Schlagwörter: , , . Leave a Comment »

Konfiguration des Timeouts für Methodenaufrufe einer Enterprise Java Bean (EJB)

Aufrufe von Methoden einer Stateful– bzw. Stateless Session Bean sind transaktional. Eine Transaktion ist allerdings zeitlich begrenzt. Der JBoss sieht dafür in der Default-Konfiguration 300 Sekunden (5 Minuten) vor. Unter vielen Umständen ist dieser Wert nicht optimal. Den Rest des Beitrags lesen »