Hallo Community,
im Rahmen einer JEE Applikation komme ich gerade konzeptionell nicht ganz weiter.
Auch wenn ich bereits jahrelange plain Java-Erfahrung habe, bin ich nur ab und zu und nicht intensiv mit JEE in Berührung gekommen.
Ich möchte im Grundsatz ein einfaches Observer Pattern realisieren. Leider finde ich mit den verfügbaren Mitteln von CDI und EJB nicht zu dem Ziel das ich mir vorstelle.
Evtl. ist mein Denkansatz auch falsch
Ich möchte einen externen Service-Provider anbinden, der einen Datendienst anbietet.
Dies tut er über eine Art API Gateway, welches die eigentlich Schnittstellenkommunikation komplett kapselt und transparent für mich macht. Ich habe lediglich ein paar Java Klassen die ich direkt aufrufen kann.
Ich definiere über eine relativ komplexe Konfiguration, wofür ich mich interessiere, danach empfange ich ich (theoretisch unendlich lange) Daten, bis ich die entsprechende Konfiguration wieder deregistriere.
Ich kann beliebig viele Konfigurationen registrieren und empfange dann für jede Konfiguration eigene Daten.
Mit jedem "Datenstream" möchte ich danach verschiedene Dinge tun, aber das ist außerhalb meiner Problemstellung.
Um mein Problem besser zu schildern, habe ich ein schematisches Bild angefügt.
Die folgenden Nummern, entsprechen den Nummerierungen im Bild.
1) In der JEE Applikation biete ich über eine Art Management Frontend die Möglichkeit an, eine Konfiguration zu erstellen und einen Datenservice dafür zu starten.
2) Diese Konfiguration inkl. Status wird dann in einer DB persistiert.
3) Wenn ein Service gestartet wird, wird die Konfiguration aus der DB gelesen
4) Um einen Service zu starten, erstelle ich zunächst einen internen Observer für diese Konfiguration, der die Daten empfangen und weiterverarbeiten soll.
5) Diesen Observer übergebe ich an den service api wrapper. Dieser erstellt einen api handler, der den observer erhält. Der API Handler ist das Interface zum Empfang von Daten, dass die API vorgibt. Dort implementiere ich quasi nach Vorgabe die "onMessage" Methoden.
6) Ab diesem Punkt empfängt der api handler Daten von der API und leitet sie ständig an den Observer weiter.
7) Der Observer soll die Daten nun auf verschiedenste Arten behandeln/ weiterleiten etc.
Mir ist nun nicht so recht klar, wie ich in Punkt 4 die Observer EJBs dynamisch im ServiceHandler erzeugen und halten kann. Mit den verfügbaren Annotationen bin ich nicht wirklich weiter gekommen, da ich für meinen Fall immer an Grenzen gestoßen bin, da die Annotationen im Code zu statisch sind und auch bei google habe ich für meinen Fall nichts entdecken können.
Folgende Laufzeitbedingungen sind wichtig:
-> der Service Handler soll die zentrale Anlaufstelle sein, die weiß, welche Observer aktiv sind, wie der Status ist, etc. pp.
-> ich möchte Dinge wie transaktionales Verhalten, Security, Messaging nicht neu erfinden, sondern gern von den JEE Fähigkeiten profitieren (ich denke hier aktuell an EJBs für die Observer, vll auch CDI Beans?)
-> die Observer müssen "unendlich" lange laufen, da die Objekte bei der service api registriert werden und dann "unendlich" lange Daten empfangen
-> Zur Laufzeit müssen dynamisch weitere Instanzen erstellt oder bestehende entfernt werden (Starten, Stoppen von Services)
Wie kann ich also zur Laufzeit dynamisch meine unendlich lange laufenden Beans (im service handler) erstellen? Ist das überhaupt möglich? Habe ich einen Denkfehler?
Danke im Voraus (insbesondere wer bis hier durchgehalten hat
) und Grüße
Christian
im Rahmen einer JEE Applikation komme ich gerade konzeptionell nicht ganz weiter.
Auch wenn ich bereits jahrelange plain Java-Erfahrung habe, bin ich nur ab und zu und nicht intensiv mit JEE in Berührung gekommen.
Ich möchte im Grundsatz ein einfaches Observer Pattern realisieren. Leider finde ich mit den verfügbaren Mitteln von CDI und EJB nicht zu dem Ziel das ich mir vorstelle.
Evtl. ist mein Denkansatz auch falsch
Ich möchte einen externen Service-Provider anbinden, der einen Datendienst anbietet.
Dies tut er über eine Art API Gateway, welches die eigentlich Schnittstellenkommunikation komplett kapselt und transparent für mich macht. Ich habe lediglich ein paar Java Klassen die ich direkt aufrufen kann.
Ich definiere über eine relativ komplexe Konfiguration, wofür ich mich interessiere, danach empfange ich ich (theoretisch unendlich lange) Daten, bis ich die entsprechende Konfiguration wieder deregistriere.
Ich kann beliebig viele Konfigurationen registrieren und empfange dann für jede Konfiguration eigene Daten.
Mit jedem "Datenstream" möchte ich danach verschiedene Dinge tun, aber das ist außerhalb meiner Problemstellung.
Um mein Problem besser zu schildern, habe ich ein schematisches Bild angefügt.

Die folgenden Nummern, entsprechen den Nummerierungen im Bild.
1) In der JEE Applikation biete ich über eine Art Management Frontend die Möglichkeit an, eine Konfiguration zu erstellen und einen Datenservice dafür zu starten.
2) Diese Konfiguration inkl. Status wird dann in einer DB persistiert.
3) Wenn ein Service gestartet wird, wird die Konfiguration aus der DB gelesen
4) Um einen Service zu starten, erstelle ich zunächst einen internen Observer für diese Konfiguration, der die Daten empfangen und weiterverarbeiten soll.
5) Diesen Observer übergebe ich an den service api wrapper. Dieser erstellt einen api handler, der den observer erhält. Der API Handler ist das Interface zum Empfang von Daten, dass die API vorgibt. Dort implementiere ich quasi nach Vorgabe die "onMessage" Methoden.
6) Ab diesem Punkt empfängt der api handler Daten von der API und leitet sie ständig an den Observer weiter.
7) Der Observer soll die Daten nun auf verschiedenste Arten behandeln/ weiterleiten etc.
Mir ist nun nicht so recht klar, wie ich in Punkt 4 die Observer EJBs dynamisch im ServiceHandler erzeugen und halten kann. Mit den verfügbaren Annotationen bin ich nicht wirklich weiter gekommen, da ich für meinen Fall immer an Grenzen gestoßen bin, da die Annotationen im Code zu statisch sind und auch bei google habe ich für meinen Fall nichts entdecken können.
Folgende Laufzeitbedingungen sind wichtig:
-> der Service Handler soll die zentrale Anlaufstelle sein, die weiß, welche Observer aktiv sind, wie der Status ist, etc. pp.
-> ich möchte Dinge wie transaktionales Verhalten, Security, Messaging nicht neu erfinden, sondern gern von den JEE Fähigkeiten profitieren (ich denke hier aktuell an EJBs für die Observer, vll auch CDI Beans?)
-> die Observer müssen "unendlich" lange laufen, da die Objekte bei der service api registriert werden und dann "unendlich" lange Daten empfangen
-> Zur Laufzeit müssen dynamisch weitere Instanzen erstellt oder bestehende entfernt werden (Starten, Stoppen von Services)
Wie kann ich also zur Laufzeit dynamisch meine unendlich lange laufenden Beans (im service handler) erstellen? Ist das überhaupt möglich? Habe ich einen Denkfehler?
Danke im Voraus (insbesondere wer bis hier durchgehalten hat
Christian