Die jadice® document platform enthält verschiedene Klassen, die den Umgang mit der Java
                    Collections API vereinfachen und deren Möglichkeiten
                    erweitern. Zentrales Interface ist die EventList, mit der gewöhnliche Java
                    Listen um die Möglichkeit zur Eventverarbeitung und Listener-Registrierung
                    ergänzt werden.[15]
Als konkrete Implementationen der EventList stehen viele unterschiedliche
                    Klassen zur Verfügung, die dementsprechend verschiedene Funktionsausprägungen
                    bereitstellen. Wichtige Beispiele sind:
BasicEventListGrundlegende Implementation des Interface
EventList. Funktion entspricht der gewöhnlichen Listen-Funktionalität.InterceptableEventListVariante, bei der jede Schreibe-Operation vor der tatsächlichen Durchführung von allen registrierten Interzeptoren akzeptiert werden muss.
FilterListErlaubt eine gefilterte und unabhängige zweite Sicht auf eine existierende Liste. Es werden nur jene Listenelemente angezeigt, die dem Filterkriterium entsprechen.
SortedListBietet eine geordnete Darstellung der Elemente einer existierenden Liste.
Zusätzlich zu den genannten Klassen existieren noch andere Ausprägungen, die weitere Zusatzfunktionalitäten bieten.
Sämtlichen Varianten ist gemein, dass sie Methoden zur Registrierung eines
                    Listeners bereithalten. Über addListEventListener(...) ist
                    es möglich, Implementationen von ListEventListener anzumelden, sodass diese
                    über Änderungen an der Liste informiert werden.
Bei Verwendung einer EventList durch mehrere Threads ist es notwendig, die
                    Zugriffe auf die Liste zu synchronisieren. Zu diesem Zweck existiert ein
                    eingebautes Locking-System, das gleichzeitige Zugriffe serialisiert. Von jeder
                    EventList kann eine Instanz von ReadWriteLock angefordert werden, die zwei
                    unterschiedliche Lock-Objekte für rein lesenden oder lesenden und schreibenden
                    Zugriff bereithält.[16] Zugriffe auf eine Liste dürfen stets nur nach Erwerb des jeweiligen
                    Lock-Objektes erfolgen.[17]
Der folgende Code-Ausschnitt zeigt die generelle Verwendung von Lock-Objekten am Beispiel der Seitenliste eines Dokuments der jadice® document platform:
Beispiel 5.1. Locking von EventLists
EventList<Page> pageList = ... // get some Document's Pages Lock writeLock = pageList.getReadWriteLock().writeLock();writeLock.lock();
try { // manipulate pageList } finally { writeLock.unlock();
}
Jede   | |
Mit Rückkehr aus dieser Methode besitzt der aktuelle Thread das alleinige Zugriffsrecht.  | |
Das Zugriffsrecht auf die Liste wird wieder abgegeben. Um die
                                    Zuverlässige Ausführung zu gewährleisten, muss dies unbedingt in
                                    einem   | 
[15] Die in diesem Kapitel beschriebenen Funktionailtäten rund um die
                            Klasse EventList entstammen dem
                                GlazedLists Framework. Um keine
                            Abhängigkeit zu einer externen Bibliothek zu schaffen, wurden
                            wesentliche Teile des Frameworks in jadice® integriert. Weitere
                            Informationen zu GlazedLists im Allgemeinen
                            finden sich unter http://www.glazedlists.com/.
[16] Der Grund für diese Trennung ist die Tatsache, dass beliebig viele lesende Zugriffe gleichzeit erfolgen können. Schreibender Zugriff kann hingegen stets nur einem Thread gewährt werden und auch nicht gleichzeitig mit einem lesenden Zugriff.
[17] Einzige Ausnahme bildet die garantiert ausschließliche Verwendung
                            einer EventList auf einem einzigen Thread. In diesem Fall könnte auf
                            das Locking verzichtet werden. Dokumente und andere Entitäten der
                            jadice® document platform, die EventLists verwenden, werden intern von unterschiedlichen
                            Threads genutzt, sodass korrektes Locking zwingend erforderlich
                            ist.





