[1.15] ServiceManager

Dieser Bereich dient dazu, neue Features zu diskutieren und für die Entwicklung zu dokumentieren. // This area is dedicated to new features including proposals and documentation.
Gesperrt
Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

[1.15] ServiceManager

Beitrag von dr.e. » 18.09.2011, 22:23:21

Hallo zusammen,

bei der Weiterentwicklung des UMGT und meines privaten CMS (ich wollte hier Versionierung für Inhalte implementieren), habe ich eine schon länger im APF enthaltene Einschränkung des DI-Containers gefunden und natürlich gleich gehoben. :)

Szenario:
  • Ich definiere einen UMGT-Service, der eine GORM-Instanz zur Verfügung gestellt bekommt. Beide Services werden als SINGLETON/SESSIONSINGLETON erzeugt.
  • Ich definiere einen ContentRepository-Service, der eine andere GORM-Instanz zur Verfügung gestellt bekommt. Beide Services werden als SINGLETON/SESSIONSINGLETON erzeugt.
Auswirkung:
Auf Grund der Tatsache, dass die Singleton- und SessionSingleton-Implementierung die Klassen-Namen als Identifier nutzen - was ja an sich auch im Sinne des Erfinders ist - erhält der ContentRepository-Service die selbe Instanz des GORM wie der UMGT-Service. Dies darf natürlich auf Grund der unterschiedlichen Konfiguration nicht sein.

Lösung:
Die Lösung der Problematik habe ich der Definition von Beans im SPRING-Framework nachempfunden. Hier wird eine Bean per ID und Class definiert (neben einigen anderen Attributen) und es ist dabei die Id und nicht die Klasse selbst entscheidend. Bei der Erzeugung einer Singleton-Instanz dieser Bean wird im Container also die Id genutzt und es kann damit zwei Singleton-Instanzen einer Klasse gekapselt in zwei Beans mit je einer eindeutigen Id geben.

Exakt dieses Konzept findet nun auch im APF Anwendung. Es zählt die eindeutige Id des Services - im APF der Namespace und der Name der Service-Definition als eindeutiger Kenner für die per Singleton- und SessionSingleton-Implementierung erzeugten Services. Damit ist obiger Anwendungsfall genauso möglich wie das "einfache" beziehen einer Instanz eines Services als SINGLETON- oder SESSIONSINGLETON-Service.

Die Änderungen am Code sind in 1.15 eingecheckt und können ab der Revision #1501 genutzt werden.
Viele Grüße,
Christian

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste