Bei der Initialisierung der Tests werden in der Klasse
java.net.InetAddress
automatisch alle Namen der lokal
verwendeten IP-Adressen aufgelöst. Dies ist in der Regel überflüssig und
kann zudem aufgrund hoher Timeouts sehr lange dauern. Aus diesem Grund
besteht die Möglichkeit, andere Strategien festzulegen.
Beispiel 3.3. Konfiguration der DNS-Strategie
public interface WebConfiguration { ... /** * Setzt den DNS Modus. In der Klasse {@link java.net.InetAddress} wird * statisch ein DNS Name Service aufgelöst, der sehr inperformant die * Hostnamen aller IP-Adressen auflöst. Das führt zu erheblichen * Verzögerungen beim Start. Aus diesem Grund können performantere Varianten * ausgewählt werden. * * @param dnsMode * zu verwendender DNS Modus. * @see DnsNameServiceProvider */ void setDnsMode(DnsMode dnsMode); ... }
Das obige Code-Beispiel enthält die Methode zur Änderung der
DNS-Strategie. Die folgenden Einstellungen können vorgenommen
werden.
DnsMode.JavaDefault
: Das ist die
Default-Einstellung von Java. Diese Einstellung kann gerade bei
lokalen Tests ohne lokalen DNS sehr langsam sein. Bei der Auswahl
dieses Modus wird im java.net.InetAddress
nicht
manipuliert. Es ist somit auch möglich, in diesem Modus einen ganz
anderen DNS Name Service über das allgemeine Service Provider
Interface (SPI) anzugeben. Leider wird der DNS Name Service im
java.net.InetAddress
statisch beim Laden der
Klasse ermittelt. Es ist somit nicht möglich programmatisch einen
anderen SPI zu verwenden. Das muss dann über VM-Argumente geschehen,
was gerade bei der Ausführung von Tests sehr hinderlich ist, da das
einfache Starten eines Tests über das Kontextmenü nicht mehr möglich
ist. Stattdessen muss der Start aufgrund der erforderlichn
VM-Argumente erst konfiguriert werden.
DnsMode.LocalDns
: Das ist der Default für
checkerberry web. Dieser Name Server löst die Namen immer zu
"localhost" und die IP-Adressen immer zur lokalen IP-Adresse auf.
Durch diese Einstellung starten die Tests sehr schnell. Sollte die
statische Namensauflösung zu Problemen führen, muss entsprechend der
Anforderungen eine andere Strategie verwendet werden.
DnsMode.DnsJava
: Diese Einstellung
verwendet einen in Java implementierten DNS Name Service von
www.dnsjava.org ([dnsjava, 2012]). Die Timeouts
und Retries sind sehr niedrig eingestellt, sodass diese Variante
auch schneller als DnsMode.JavaDefault
ist.
Allerdings ist die Variante langsamer als
DnsMode.LocalDns
und loggt auch sehr viel auf
System.out
und
System.err
.