Mit der java.time-API die UTC ermitteln

Seit Java 8 gibt es durch den JSR-310 eine neue API für Daten- und Zeitoperationen. Möchte man in dieser API die aktuelle Zeit ermitteln so würde dies so aussehen:

LocalDateTime now = LocalDateTime.now();

Dadurch erhält man die lokale Zeit des Rechners auf dem dieser Codeschnipsel ausgeführt wird. Damit ist das Problem auch schon beschrieben; man erhält nur die lokale Zeit. Wenn mehrere Systeme zusammen arbeiten soll, kann dies zu einem Problem führen. Natürlich könnte man ZonedDateTime nutzen:

ZonedDateTime now = ZonedDateTime.now();

Damit bleibt die Information über die verwendete Zeitzone erhalten. Benötigt man nun z.B. die UTC, also die koordinierte Weltzeit, so könnte man die Zeitdifferenz mittels:

now.getOffset()

ermitteln und diesen Wert für die Berechnung der UTC nutzen. Einfacher funktioniert es allerdings über den kleinen Umweg mit der Clock-Klasse:

LocalDateTime now = LocalDateTime.now(Clock.systemUTC());

Damit befindet sich in der Variable now, das aktuelle Datum und die aktuelle Uhrzeit als UTC.

Globales @Before in JUnit

Wenn man unter JUnit für mehrere Tests einige vorbereitende Schritte benötigt, so kann man dafür die @Before Annotation nutzen:

@Before
public void setup() {
    // Prepare something
}

Das Problem an dieser Methode ist, das dass ganze auf eine Klasse beschränkt ist. Benötigt man die vorbereitenden Schritte in mehreren Klassen, so muss man sich unter JUnit 4 anders behelfen. Dort führt die Lösung über eine abstrakte Klasse:

public abstract class TestBase {
    @Before
    public void setup() {
        // Prepare something
    }
}

Von dieser Klasse können die Klassen mit den Testfällen abgeleitet werden. Allerdings muss man beachten, das es hierbei zu doppelter Initialisierung kommen kann. Unter JUnit 5 kann man dies nun wesentlich einfacher lösen. Dort gibt es die neue Annotation @BeforeAll:

@BeforeAll
public void setup() {
    // Prepare something
}

Mit diese Annotation wird die Initialisierung vor der Ausführung der Tests durchgeführt.

Tests bei Maven überspringen

Wenn man unter Maven mittels:

mvn package

mal schnell ein Paket bauen möchte ohne das dabei die komplette Testsuite eines Paketes ausgeführt wird, kann dies durch den Parameter:

-Dmaven.test.skip=true

erreichen. Alternativ kann der Parameter gekürzt werden:

-Dmaven.test.skip

Komplett würde das ganze dann so aussehen:

mvn package -Dmaven.test.skip

KeyStore Explorer

Wenn man Java-Keystore-Dateien bearbeiten möchte, so kann man dies natürlich mit dem im Java SDK mitgelieferten Kommandozeilentool keytool tun. Einfacher ist es mit der grafischen Anwendung KeyStore Explorer zu arbeiten.

KeyStore Explorer

Mit dem KeyStore Explorer können unter anderem Keystore-Dateien bearbeitet, Zertifikate unterschiedlicher Formate geöffnet und analysiert werden. Zu finden ist das Tool unter keystore-explorer.org. Der KeyStore Explorer ist freie Software und unter der GPL in Version 3 lizenziert. Der Quelltext kann über GitHub bezogen werden.

Zertifikat mittels keytool in einen Keystore importieren

Unter Java ist es möglich mit sogenannten Keystores zu arbeiten. Dabei handelt es sich um Containerdateien in welchen Zertifikate gespeichert werden können. Diese können dann z.B. beim Start eines Tomcat mit übergeben werden. Damit sind die Zertifikate der Java-Applikation bekannt. Möchte man ein solches Zertifikat in einen Keystore importieren, so nutzt man das Tool keytool:

keytool -importcert -file server-ca-web.pem -keystore store.jks -alias "server-ca-web"

Das Tool ist im Java SDK enthalten und wird für die Verwaltung der Keystores genutzt. In diesem Fall wird das Zertifikat server-ca-web.pem in den Keystore store.jks geschrieben.