(Erschienen im Unix Open, Ausgabe 7/2001, Seite 52)
Die im Juli zum Download freigegebene Version 4.6 des ACS (ArsDigita Community System), des umfangreichsten Open-Source Web-Standard-Software-Paketes, basiert komplett auf Standards wie J2EE und XSLT und bietet eine umfangreiche Sammlung von Java-APIs zum raschen Erstellen von Web-Applikationen.
Die Ursprünge des ACS gehen auf photo.net zurück, ein System, das seit 1993 am renommierten MIT entwickelt wird. Philip Greenspun, Dozent am MIT und Betreiber von photo.net, und einige seiner Studenten entwickelten in den Jahren darauf zahlreiche Websites. Die Firma ArsDigita wurde 1997 gegründet und ist seitdem hauptverantwortlich für die Weiterentwicklung und Qualitätskontrolle des ArsDigita Community und die Pflege der Developer-Community und .
Inzwischen stecken mehrere 100 Mannjahre Entwicklungs- und Erfahrungszeit im ACS. Neben ArsDigita bieten zur Zeit circa fünfzehn weitere Firmen ACS-basierte Dienstleistungen an. Das Lizenzmodell, die Gnu Public License, stellt sicher, dass auch zukünftige Versionen frei und Open-Source sein müssen. In den nächsten Monaten werden Entwickler dieser Firmen zahlreiche Module und Anwendungen für die neue Plattform entwickeln, die gegebenenfalls ins System zurückfließen.
Das ACS ist eine Plattform, die ein schnelles Time-To-Market ermöglicht. 80% der Funktionalität einer typischen Website werden vom Kernsystem abgedeckt. Bei den verbleibenden 20% kann sich die Entwicklung darauf konzentrieren, den Webservice mit einer Funktionalität auszustatten, die diesen vom Wettbewerb unterscheidet. Häufig sind die Adaptionen so spezifisch, dass komplett neue Module entwickelt werden müssen. Anstelle eines aufwändigen Parametrisierungsprozesses muß beim ACS programmiert werden. Da das System aber Open-Source ist, sind selbst massive Änderungen am Kern möglich.
Die Erfahrung aus acht Jahren Web-Entwicklung und -Consulting haben gezeigt, dass Maintenance einer Website häufig viel aufwändiger ist als der initiale Launch. Die ACS-Plattform ist flexibel und trotzdem upgradebar: ein Persistenzlayer macht eine Anwendung datenmodell-unabhängig, die J2EE-konforme Architektur ermöglicht die Integration von Legacy-Systemen und anwendungsspezifischer Funktionalität.
Jede Webapplikation benötigt folgende Kern-Funktionalität:
Diese Funktionalität wird von der ACS-Plattform abgedeckt. Aufbauend darauf werden Anwendungen entwickelt, die als Packages modularisiert werden. Beispiele für Packages sind Diskussionsforen, Document Management System, Portal usw. Diese Packages können separat heruntergeladen und installiert werden und innerhalb einer Website beliebig häufig "gemountet" werden.
Internet- und Intranet-Anwendungen müssen oft komplexe Organisationsstrukturen abbilden. Das ACS modelliert Personen und Gruppen wie folgt:
Ein Zugriff auf ein Objekt ist berechtigt, wenn die Frage "Hat Party X Privileg Y auf dem Objekt Z?" mit Ja beantwortet werden kann. Diese Frage wird von der ACS-Plattform mit einem einzigen API-Call beantwortet.
Das ACS-Permissioning-System ist objektorientiert und erweiterbar, so dass es bei maximaler Flexibilität trotzdem noch administrierbar bleibt. Objekte erben den Kontext ihrer Eltern wie Zugriffsberechtigungen, Parameter, Style Sheets usw. Diese Vererbungshierarchie kann an jeder beliebigen Stelle unterbrochen werden. Neue Privilegien können hinzugefügt werden, so könnte man in einem Diskussionsforum ein Privileg "answer_only" einführen, dass einem Benutzer erlaubt, Fragen zu beantworten, aber nicht zu stellen.
Das ACS stellt dem Entwickler eine Content-API und dem Anwender eine Content-Management-Anwendung zur Verfügung. Das effiziente Verwalten von Inhalten ist also bereits mit der ACS-Plattform möglich, die API ermöglicht die Anpassung der Software an spezifische Wünsche.
Das Content-Repository vereinheitlicht das Speichern von Inhalten: Jeder Datensatz hat einen in der Datenbank definierten Typ, beliebige Typen können hinzugefügt werden. Jeder Content-Typ erbt Kernfunktionalität wie
Eine generische Workflow-API vereinfacht die Entwicklung von komplexen, prozeßorientierten Anwendungen erheblich. Sie hilft bei der:
Business-Logik und Präsentation werden im ACS strikt voneinander getrennt. Zur Darstellung werden XSL-Style-Sheets und XSLT-Transformationen verwendet. Eine konsistente, aber trotzdem subsite- und geräteabhängige Darstellung kann so erreicht werden,
Das Erstellen von Benutzer-Interfaces ist auch im Web sehr zeitaufwändig und wegen der zahlreichen Einschränkungen durch das HTML-Benutzerinterface und HTTP eine fehleranfällige Aufgabe. Die Interface-API des ACS, "Bebop", hilft Entwicklern bei dieser unbeliebten Tätigkeit.
Mit Bebop werden Forms aus gängigen Widgets "zusammengebaut". Ein Form kann, falls vorhanden, mit Daten vorinitialisiert werden. Nach dem Form-Submit werden die eingegebenen Daten durch Bebop überprüft. Bei Korrektheit werden sie bearbeitet, ansonsten erhält der Benutzer die Möglichkeit zur Korrektur.
Beispiele für Form-Widgets von Bebop sind mehrspaltige Elemente, die beliebig sortiert werden können, ein personalisierbares Portal und Multi-Step-Forms.
Ein Persistenzlayer macht das ACS datenmodell-unabhängig. Metadaten beschreiben, wie die Objektklassen der Applikation auf das Datenbankschema abgebildet werden. Das bringt mehrere Vorteile:
Innerhalb von Unternehmen müssen Web-Systeme in die bestehende IT-Landschaft eingepasst werden. Mit seiner J2EE-konformen Architektur bietet das ACS gut dokumentierte Integrationsschnittstellen, so zum Beispiel:
Das ACS ist gut dokumentiert, viele Design-Entscheidungen werden von den Entwicklern "öffentlich" diskutiert. Einsteiger in die ACS-Welt sollten folgende Websites besuchen:
Die Java-Class News hat einen Artikel-Titel und einen Artikel-Body. Diese beiden Attribute werden zuerst in einer Datenbanktabelle abgelegt. Der Persistenz-Layer beschreibt das Mapping auf das Datenmodell.
Später entscheidet ein DBA, dass diese Tabelle in zwei Tabellen aufgespalten werden muss: News und NewsClob. Nach dem Ändern des Datenmodell muß ausschließlich die Metadaten-Information geändert werden.
Das ACS kann wegen seiner offenen, J2EE-konformen Architektur problemlos mit anderen Systemen kommunizieren.