Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Erweiterbare Plugins für Modelklassen #297

Open
j3nsch opened this issue Aug 19, 2022 · 3 comments
Open

Erweiterbare Plugins für Modelklassen #297

j3nsch opened this issue Aug 19, 2022 · 3 comments

Comments

@j3nsch
Copy link
Member

j3nsch commented Aug 19, 2022

In den Modelklassen sind Plugins definiert, die wichtige Funktionalitäten, wie z.B. Cache-Updates oder die Indizierung, implementieren. Diese Plugins sind momentan im Code fest verdrahtet und können nicht einfach erweitert werden.

Es soll möglich sein, dass während der Laufzeit weitere Defaultplugins hinzugefügt werden können, die dann für alle Objekte des Models verwendet werden.

Intern: https://tickets.zib.de/jira/browse/OPUSVIER-4035

@j3nsch
Copy link
Member Author

j3nsch commented Aug 19, 2022

Momentan werden für jedes Opus_Document neue Plugin-Objekte erzeugt. Alle bisherigen Plugins sind Thread-safe. Das heißt sie haben keine Klassenvariablen. Außerdem ist PHP in der Regel Single-threaded. Das heißt, das selbe Plugin-Objekt könnte für alle Document-Objekte verwendet werden. Objekte anlegen ist häufig eine teure Operation, so dass die Wiederverwendung sogar zu einem Performanzgewinn führen könnte.

Manche der existierenden Plugins, z.B. für den Index und den Cache, sind "Storage"-Plugins. Beim Speichern eines Dokuments sollen der Index bzw. der Cache aktualisiert werden. Diese Plugins könnten auch "Update"-Plugins sein.

Die anderen Plugins, DOI, URN und Sequence, sind eigentlich "Workflow"-Plugins. Sie sollten Identifiere automatisch generieren, wenn ein Dokument den Status published erhält. Momentan sind sie so implementiert, dass sie immer aktiv werden, wenn ein Dokument im published-Status gespeichert wird. Wird also ein entsprechender Identifier manuell gelöscht, wird beim Speichern automatisch ein neuer angelegt.

Die Opus_Document Klasse soltle möglichst einfach sein und nicht von der Storage-Implementation abhängig sein. Vielleicht sollte Opus_Document auch nur ein Interface sein. In diesem Fall müssen die Objekte durch eine Factory erzeugt werden und die Factory kann bestimmen welche Plugins automatisch hinzugefügt werden. Damit könnten die Defaultplugins außerhalb von Opus_Document definiert werden und wären leichter erweiterbar. Die Factory könnte konfiguriert oder komplett ausgetauscht werden.

@j3nsch
Copy link
Member Author

j3nsch commented Aug 19, 2022

Die Verwendung eines Plugin-Objektes für alle Dokumente macht immer noch Sinn, aber kann noch nicht so ohne weiteres umgesetzt werden. Das InvalidateDocumentCache-Plugin ist nicht Thread-safe. Außerdem muss geklärt werden, ob es notwendig ist, dass für ein einzelnes Objekt die Plugins manipuliert werden können. Die verschiedenen Szenarios müssen dokumentiert werden.

@j3nsch
Copy link
Member Author

j3nsch commented Aug 19, 2022

Mittlerweile hat sich bei den Plugins einiges geändert. Die Plugins sind inzwischen konfigurierbar. Das Thema ist noch nicht abgeschlossen, aber das Ticket kann vermutlich mit 4.8 geschlossen werden.

@j3nsch j3nsch added this to the Framework 4.8 (opus4-db) milestone Aug 19, 2022
@j3nsch j3nsch removed this from the Framework 4.9 (opus4-db) milestone Apr 28, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant