© Excellent backgrounds/Shutterstock.com
Teil 2: SPI: Basics, Rundungen und Währungen

Go for the Money


JSR 354 definiert nicht nur ein API, sondern auch ein mächtiges Service Provider Interface (SPI), das es erlaubt, praktisch alle Funktionen den jeweiligen Bedürfnissen in einer Unternehmung anzupassen. Die Expertengruppe diskutierte über Monate hinweg teilweise sehr kontrovers diese Unabhängigkeit des API. Das heute vorliegende Design hat sich zwar erst in der Schlussphase des JSR durchgesetzt, es hat sich aber in der Praxis bewährt.

Artikelserie

Teil 1: Grundlagen: API und Usage

Teil 2: SPI: Basics, Rundungen und Währungen

Teil 3: SPI: Konversion, Formatierung und Java EE

Die Struktur des JSR 354 lässt sich in eine Matrix, bestehend aus vier Schichten und den drei funktionalen Bereichen, zerlegen (Tabelle 1). Die Schichten sind:

  • Die API-Schicht, die von den Benutzern aufgerufen wird.

  • Die API Singletons, eines je funktionalem Bereich: Monetary, MonetaryConversions, MonetaryFormats. Diese delegieren Aufrufe an die Singleton-SPI-Schicht (die entsprechenden Schnittstellen enden auf SingletonSpi).

  • Die Singleton-SPI-Schicht wiederum verwaltet und orchestriert das Provider-SPI, das kleinere, abgegrenzte Funktionen implementiert, z. B. bestimmte Formate, Konversionen oder die Zurverfügungstellung von Währungen.

  • Schlussendlich ist auch das Komponenten-Lifecycle-Management nicht fest codiert, um so unterschiedliche Umgebungen wie Java SE und OSGI oder auch CDI/Java EE unterstützen zu können. Diese Funktionalität wird von allen anderen Komponenten genutzt.

Schicht\Funktionalität

Core

Konversion

Formatierung

API-Singletons

javax.money.Monetary

javax.money.conversion.MonetaryConversions

javax.money.format.MonetaryFormats

API-Singleton-SPI (javax.money.spi)

MonetaryAmountsSingletonSpi

MonetaryAmountsSingletonQuerySpi

MonetaryCurrenciesSingletonSpi

MonetaryRounsingsSingletonSpi

MonetaryConversionsSingletonSpi

MonetaryFormatsSingletonSpi

Provider-SPI

MonetaryAmountFactoryProviderSpi

CurrencyProviderSpi

RoundingProviderSpi

javax.money.conversion.ExchangeRateProvider

MonetaryAmountFormatProviderSpi

Lifecycle-Management

javax.money.spi.Bootstrap, javax.money.spi.ServiceProvider

Tabelle 1: Die Struktur des JSR

Betrachten wir zunächst die Klasse javax.money.Monetary, die den Einstiegspunkt für Geldbeträge, Währungen und Rundungen modelliert. In Listing 1 ist gut zu erkennen, wie Methodenaufrufe an das entsprechende Singleton-SPI delegiert werden. Die SPI-Implementierungen werden dabei über die Bootstrap-Komponente beim Laden der Singleton-Klasse einmalig geladen u...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang