Die Jazz-Plattform basiert auf einer Client/Server-Architektur. Der Jazz-Server, der normalerweise auf einer sicheren Maschine der Serverklasse ausgeführt wird, dient als Host für eine Reihe von Services und bewahrt Daten in seinem Repository auf. Ferne Clients kommunizieren unter Verwendung von HTTP über ein Netz mit dem Jazz-Server. Ferne Clients werden in vielen Formen bereitgestellt. Am wichtigsten ist eine IDE (Integrated Development Environment - integrierte Entwicklungsumgebung) mit integrierter Unterstützung der Jazz-Plattform, deren Steuerung durch einen Benutzer erfolgt, der an der Softwareentwicklung durch Onlinezusammenarbeit beteiligt ist. Andere ferne Clients, z. B. Jazz-spezifische Befehlszeilentools oder Ant-Scripts, operieren im automatischen Modus. Wieder andere Clients greifen direkt mit einem Web-Browser auf den Server zu, ohne dass auf ihrem System spezielle Software für Jazz installiert sein muss.
Service und Clientbibliothek sind die Komponentenentsprechungen der Jazz-Plattform. Der Service ist auf der Serverseite angesiedelt. Die Serviceimplementierung ist in Java geschrieben. Der Kontakt zum Service wird über seine Serviceschnittstelle hergestellt. Die Serviceschnittstelle dient als Java-Servicedefinition einer Web-Service-Schnittstelle, die für die synchrone RPC-Datenübertragung vom Client an den Server verwendet wird.
Die korrespondierende clientseitige Komponente ist eine Java-basierte Clientbibliothek, die eine Clientschnittstelle zugänglich macht. Die Clientbibliothek gibt Aufrufe an die entsprechende Serviceschnittstelle aus, die über das Netz zur Verarbeitung an den korrespondierenden Service auf dem Server gesendet werden. Die Clientbibliothek stellt das Caching, die Ereignisbenachrichtigung und andere Features bereit, die im Vergleich zur unaufbereiteten Serviceschnittstelle einen größeren Bedienungskomfort für die API bieten.
Java-basierte Jazz-Clients wie die Eclipse-IDE und Ant verwenden Methoden in der Clientschnittstelle. (Analoge Clientbibliotheken können für die Verwendung durch nicht auf Java basierende Clients geschrieben werden.)
Web-Browser-Clients werden in ähnlicher Form durch den Einsatz einer zugehörigen Serviceschnittstelle verwendet, die stärker auf den Zugriff über JavaScript abgestimmt ist (dies ist später im Abschnitt über die Web-Benutzerschnittstellen genauer erläutert).
Die Architektur der Jazz-Plattform ist modular aufgebaut und erweiterbar. Ein Modul, das als "Jazz-Komponente" bezeichnet wird, stellt normalerweise eine Funktionalität bereit, die einen bestimmten Aspekt des Softwareentwicklungszyklus (z. B. die Fehlererfassung oder die Buildautomatisierung) unterstützt. Eine typische Komponente stellt einen oder mehrere Services und die entsprechenden Clientbibliotheken zusammen mit den domänenspezifischen Benutzerschnittstellenelementen zur Verfügung, die auf diesen unteren Schichten basieren. Wenn eine Komponente auf einem Jazz-Server installiert wird, sind ihre Services allgemein verfügbar. Die Installation der Komponente auf einem Jazz-Client bietet einen Benutzerzugriff auf den neuen Service. Eine Jazz-Komponente kann entweder eigenständig eingesetzt werden (in diesem Fall stützt sie sich auf die integrierte Hauptfunktionalität) oder aber die von anderen installierten Komponenten bereitgestellte Funktionalität nutzen.
Im Hinblick auf die Erläuterung des Verfahrens, mit dem die Jazz-Plattform erweitert ist, ist es sinnvoll, von Komponenten zu sprechen. Jazz bietet jedoch keinen neuen generell einsetzbaren Komponentenmechanismus. Stattdessen nutzt die Jazz-Plattform sowohl auf dem Server als auch auf Java-basierten Clients die Erweiterungsmechanismen der Eclipse-Plattform. (Leser, die nicht mit der Bedeutung der Begriffe "Plug-in" und "Erweiterungspunkt" bei der Eclipse-Plattform vertraut sind, sollten die Hintergrundinformationen im Abschnitt der technischen Übersicht über die Eclipse-Plattform lesen, der die Laufzeit- und Plug-in-Architektur der Plattform erläutert.) Komponenten werden als Paket bereitgestellt (was dem Konzept der Plug-ins in Eclipse entspricht) und steuern über Elemente, die dem Eclipse-Konzept der Erweiterungspunkte entsprechen, Erweiterungen für andere Komponenten bei. Eine einzelne Komponente besteht aus einer Reihe von Plug-ins, von denen einige auf dem Server und einige auf dem Client installiert werden.
Der Prototyp einer Jazz-Komponente besteht aus fünf Plug-ins:
Das Service-Plug-in, das allgemeine Plug-in und das Plug-in für die Webbenutzerschnittstelle werden auf dem Server installiert.
Die Plug-ins verwenden Erweiterungspunkte, um sich bei Jazz zu registrieren. Das allgemeine Plug-in der Komponente, das sowohl auf den Client als auch auf dem Server installiert wird, registriert die Serviceschnittstelle der Komponente über einen Erweiterungspunkt. Das Service-Plug-in registriert die entsprechende Serviceimplementierung über einen rein serverseitigen Erweiterungspunkt. Das Plug-in für die Clientbibliothek registriert die Clientschnittstelle über einen ausschließlich clientseitigen Erweiterungspunkt. Diese Ergänzungen tragen die ID-Zeichenfolge der Komponente. Die Ergänzungen werden zur Ausführungszeit miteinander verknüpft und bilden so die Komponenten.
die clientseitigen Plug-ins für die Clientbenutzerschnittstelle und die Clientbibliothek der Komponente werden in der Eclipse-IDE installiert. Plug-ins für Clientbenutzerschnittstellen steuern ihre Ansichten, Editoren usw. über Erweiterungspunkte der Eclipse-Plattform bei. Plug-ins für Clientbibliotheken registrieren ihre Clientschnittstellen über einen Jazz-spezifischen Erweiterungspunkt.
Die Clientbibliotheken sind für die Ausführung in Clients (z. B. Ant) konzipiert, die keine OSGi-Laufzeit besitzen. Clientbibliotheken können nur von den Clientbibliotheken anderer Komponenten, nicht jedoch von deren Services oder Benutzerschnittstellen abhängig sein.
Komponenten müssen alle Abhängigkeiten von anderen Komponenten deklarieren. Das Abhängigkeitsdiagramm darf keine Zyklen enthalten. Eine Komponente kann außerdem eigene Erweiterungspunkte deklarieren und somit ihre eigene Erweiterung durch andere Komponenten ermöglichen.
Der Jazz-Server ist eine Java-basierte Webanwendung, die auf jedem mit Java EE 1.4 konformen Anwendungsserver ausgeführt werden kann. Gegenwärtig werden Apache Tomcat und IBM WebSphere Application Server als Anwendungsserver unterstützt. Apache Tomcat ist ein Open-Source-Container für Servlets, der auf Desktopsystemen installiert werden kann. IBM WebSphere Application Server ist ein im Handel erhältliches Produkt, das unterschiedlich dimensionierte Lösungen bietet. Die Semantik der Services und serverseitigen Jazz-APIs ist von der Wahl des Anwendungsservers unabhängig, was eine Unterstützung weiterer Anwendungsserver in künftigen Releases möglich macht.
Bereits mit Eclipse vertrauten Lesern sei an dieser Stelle erläutert, dass die Jazz-Anwendung intern um eine OSGi-Laufzeit herum strukturiert ist. Die Jazz-Webanwendung verarbeitet die Services aller Jazz-Komponenten, die auf dem Server installiert sind. Bei der Installation einer neuen Komponente auf einem Jazz-Server müssen die serverseitigen Plug-ins der Komponente (also die OSGi-Pakete) der OSGi-Laufzeit für die primäre Webanwendung bekannt gegeben werden. Das Paketmanifest deklariert alle Abhängigkeiten von anderen installierten Komponenten. Das separate Erweiterungsmanifest enthält alle Ergänzungen für verschiedene Erweiterungspunkte. Die OSGi-Laufzeit verarbeitet Paketmanifeste beim Start und stellt auf diese Weise sicher, dass Abhängigkeiten zwischen Komponenten bei allen installierten Komponenten erfüllt werden. Die Jazz-Webanwendung verwaltet die Erweiterungsregistry, in der die Ergänzungen aller installierten Komponenten zusammengeführt sind, und leitet jede eingehende Anforderung für die Serviceschnittstelle einer Komponente zur Verarbeitung an den entsprechenden Service weiter.