OSGi Declarative Service Cardinality

splinter

Mitglied
Hi

Ich habe auf folgende Frage bezüglich Kardinalität von DS noch keine Antwort gefunden:

Ein exportiert ein Interface und hat eine Component welche immer nur eine Implementation dieses Interfaces referenziert, also die Kardinalität steht auf 0..1 oder 1..1

Nun sind aber mehrere andere Components unter diesem Interface registriert. Welche Implementation wird dann referenziert? Wie wird ausgewählt und kann ich darauf irgendwie Einfluss nehmen?

Danke für eure Hilfe!
 
G

Gast2

Gast
Ich versteh deine Frage nicht du gibst die implementation doch immer an.
Du kannst mehrere Interface angegeben aber nur eine implementation.
 

splinter

Mitglied
Oke, nochmals anderst:

Ich habe ein Interface (nennen es wir mal "Service"), welches von Bundle A exportiert wird.
Bundle B und C haben je eine Component die Service implementiert.

Nun möchte ich eine weitere Component schreiben (in Bundle D), die "Service" referenziert mit der Kardinalität 1..1
Es sind nun zwei Components die "Service" anbieten vorhanden, welche wird meiner Component zugewiesen?
 
G

Gast2

Gast
Ich glaube das Bundle, welches zu erst gestartet wurde.

Aber sowas kann man doch einfach ausprobieren. Setz einen Listener in Bundle D und schau wie oft er augerufen wird.
 

splinter

Mitglied
Ich glaube das Bundle, welches zu erst gestartet wurde.

Danke für den Hinweis. Dies ist beim Startup-Prozess aus technischen Gründen tatsächlich so. Wenn nämlich eine Component gestartet wurde, ist die andere resolved und wird auch gestartet, je nach Fall auch bevor eine zweite, als Referenz mögliche, Component gestartet ist. Leider kann dies nicht eine abschliessende Antwort sein, da pro Bundle mehrere Components definiert werden können, die denselben Service implementieren.

Schlussendlich scheint mir die Zuteilung der Components in einem solchen Fall zufällig zu sein. :bahnhof:

Wie auch immer, wie löst ihr ein solches Problem? Ihr habt mehrere Components, die einen bestimmten Service anbieten, benötigt aber nur eine. Wie wählt ihr aus? Gibt's dazu bereits Frameworks?
 
M

maki

Gast
Bin nicht so tief in DS drinnen, aber sollte man dazu nicht das name Attribut nutzen, um zwischen verschiedenen Service Providern zu wählen/unterscheiden ?
 

splinter

Mitglied
Bin nicht so tief in DS drinnen, aber sollte man dazu nicht das name Attribut nutzen, um zwischen verschiedenen Service Providern zu wählen/unterscheiden ?

Das ist absolut richtig, wenn du denn weist wie der gewünschte Provider überhaupt heisst. ;-)
Ich habe bereits daran gedacht ein Tool zu schreiben, das alle vorhandenen Components nach Interface auflistet und den User per Config-GUI nach der präferierten fragt. Allerdings stellen sich dabei einige Probleme:
- Konfiguration muss vor Programmstart erfolgen, also nach OSGi-Resolve aber bevor "eigentlichem" Programmstart.
- Referenzierende Components müssen über zusätzliche API die präferierte Component aussuchen.
- Ein zusätzliches Framework ist nötig wenn für unterschiedliche referenzierende Components unterschiedliche Präferenzen angegeben werden sollen.
- usw...

Angesichts des Umfangs eines solchen Tools und der eigentlich höchst simplen Aufgabe (ich vermute mal dass ich nicht der einzige mit diesem Problem bin), die es erledigen soll, muss ich zum Schluss gelangen, dass ich entweder einen Architekturfehler mache/irgend ein OSGi-Konzept nicht kenne oder dass bereits ein solches Framework besteht und ich einfach nicht die richtigen Fragen an Google stelle. ;-)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F OSGi und root rechte Plattformprogrammierung 2
Z MySQL-Treiber in RAP-Anwendung für Jetty im OSGI- Equinox- Maven-Dschungel Plattformprogrammierung 0
Shams Antbuild - Problem bei OSGi Anfängertutorial Plattformprogrammierung 0
T OSGi OSGI bundle bauen org.apache.xerces Plattformprogrammierung 3
G OSGi Bundle-ClassPath Plattformprogrammierung 3
P OSGi registerService Plattformprogrammierung 3
H OSGi OSGi + Logback + slf4j - Eclipse Run Configuration Plattformprogrammierung 7
G OSGI bundleChanged Plattformprogrammierung 2
E OSGi Equinox HttpService only supports servlet 2.1 specification. Plattformprogrammierung 2
X Probleme mit dem OSGi-Framework Plattformprogrammierung 3
Kr0e OSGI - Anfängerfragen Plattformprogrammierung 3
K OSGi Verteilte Anwendung? Plattformprogrammierung 9
B OSGi Einsteiger OSGi-Applikation Plattformprogrammierung 9
S (OSGI - EQUINOX) Welche Eclipse IDE? Plattformprogrammierung 3
N OSGi: Ressourcen gezielt aus bestimmten Modulen laden? Plattformprogrammierung 4
borobudur OSGi OSGi Blueprint Integrationstests Plattformprogrammierung 6
S OSGi Filter Syntax Plattformprogrammierung 2
N OSGi Dependency Loading Plattformprogrammierung 2
S OSGi Bibliothek für alle Plattformprogrammierung 5
H OSGI mit Eclipse und Maven Plattformprogrammierung 5
X OSGi Splash ohne product Plattformprogrammierung 2
G OSGi: Service registrieren Plattformprogrammierung 2
lumo OSGI Service - ServiceReference Plattformprogrammierung 3
G [osgi] bundle spezifische properties Plattformprogrammierung 5
DEvent [osgi] Services implementieren Plattformprogrammierung 2
C RCP Applikation starten als OSGi Bundle Plattformprogrammierung 2
B equinox OSGi EclipseStarter.startup NullPointerException Plattformprogrammierung 3
B OSGi, Euqinox, innherhalb vom Bundle Pfad des zugehörigen jar-files ermitteln Plattformprogrammierung 6
B OSGi, Equinox, Exceptions werden "ignoriert" Plattformprogrammierung 21
C OSGi, Hibernate und welche Datenbank? Plattformprogrammierung 4
astralarse Custom OSGi Launcher mit config.ini Plattformprogrammierung 6
C Eclipse - Externe OSGi bundles adden Plattformprogrammierung 7
F OSGi Anwendungsdesign Plattformprogrammierung 3
N OSGI in Netbeans? Plattformprogrammierung 5
X OSGi und RCP Plattformprogrammierung 15
C OSGi shutdown Plattformprogrammierung 4
D Problem mit Synth Painter und OSGi (Equinox) Plattformprogrammierung 8
D OSGi JSR296 (Swing Application Framework) - Konzeptionsfrage Plattformprogrammierung 2
G Osgi Plattformprogrammierung 5
A Plugin konzepte: OSGI oder JPF? Plattformprogrammierung 5
S OSGI Framework Knopflerfish Plattformprogrammierung 11
R Declarative Services - Nullpointer Exception Plattformprogrammierung 2
I Calling Contacts Api Service Account Authentication Plattformprogrammierung 7
A OSGi Plugin als Service exportieren und verwenden Plattformprogrammierung 12
S OSGi Warten bis Service vorhanden? Plattformprogrammierung 2
S Deklarativer Service im RCP Feature ? Plattformprogrammierung 8
G Service nicht abbrechen Plattformprogrammierung 6
G Service darstellen Plattformprogrammierung 18

Ähnliche Java Themen


Oben