Wie kann ich meine plattformübergreifende Bibliothek (z. B. auf JRE) implementieren, um auf Objektreferenzen threadsicher zu arbeiten, sodass native Front-Ends auf anderen Plattformen das Objekt beobachten und Observable-Muster nutzen können?
Ein kleiner Hintergrund - es gibt ein Konzept der Datenbindung, das in den meisten Front-End-Frameworks verwendet wird. In C # und Java bezieht sich dies auf das Merkmal Observable, mit dem eine Klasse Ereignisse auslösen kann, wenn Änderungen auftreten, die von mehreren Steuerelementen oder "Beobachtern" abonniert werden können. Auf diese Weise müssen die Beobachter die Ressource nicht ständig abfragen / lesen, um nach Updates zu suchen.
Ich möchte an einer Analyse-Engine arbeiten, die im Laufe der Zeit Änderungen an Datenlisten vornimmt. Es wäre schön, wenn das Front-End diese Listen beobachten könnte, während die Analyse ausgeführt wird. Es scheint mir, dies würde erfordern, dass das Front-End in der Lage ist, ein Objekt an die Analyse-Engine zu übergeben, die in einer Bibliothek geschrieben ist, die hoffentlich plattformübergreifend ist, und in der Lage ist, thread-sichere Lesevorgänge für dieses Objekt durchzuführen. Oder lassen Sie die Bibliothek Beobachtbarkeitsverträge erfüllen.
Bei älteren CLI-Engines im Unix-Stil wird stdin / stdout / stderr verwendet und die Engine wird in regelmäßigen Abständen aktualisiert. Dies erfordert standardmäßigen Overhead und Textanalyse, die ich nach Möglichkeit lieber vermeiden würde.
quelle
Antworten:
Sie können eine Integrationsstufe über dem Modell Ihrer Bibliothek erstellen, indem Sie beispielsweise das Apache Camel-Integrationsframework verwenden. Die Netty-Komponente könnte wahrscheinlich Ihren Anforderungen entsprechen. Mit einem beobachtbaren Muster sollte Ihre Integrationsstufe die empfangenen Änderungen Ihres Modells transformieren und sie den Front-End-Abonnenten mitteilen. Eine andere ähnliche Möglichkeit, Ihre Anforderung zu interpretieren, besteht darin, sich eine ereignisgesteuerte Architektur vorzustellen, bei der die Beobachterlistener in Ihrer Integrationsebene eine Nachricht in einem JMS-Thema veröffentlichen, damit verbundene Subskriptoren in den Front-Ends diese erhalten.
quelle
Ich habe eine ganz andere Antwort geschrieben und vorgeschlagen, dass Ihr Publisher Aktualisierungen in eine Warteschlange oder eine Pipe schreibt - aber dann habe ich die Frage erneut gelesen.
Wenn ich richtig verstanden habe, ist Ihre allgemeine Frage, dass Sie eine Bibliothek für die Ausführung in der JRE schreiben möchten, in der ein natives Front-End den Status von Java-Objekten threadsicher abfragen kann.
Dies ist unglaublich weitreichend, da es Hunderte von Möglichkeiten gibt, wie ein Front-End mit Bibliothekscode interagieren kann, der in einer JRE ausgeführt wird - JNI, EJB RPC, HTTP-Schnittstellen im RPC-Stil, Anforderungsantwort über Nachrichtenwarteschlangen usw.
Was auch immer Sie wählen, irgendwann in der Kette sollte es einen Java-Methodenaufruf geben, und hier können Sie die Kontrolle über die Threadsicherheit übernehmen. Dort steht Ihnen das gesamte Arsenal an Gewindesicherheitswerkzeugen zur Verfügung. Sie können synchronisieren, defensive Kopien zurückgeben, mit zwischengespeicherten Daten arbeiten usw.
Überlegen Sie jedoch, ob dies das Modell ist, dem Sie folgen möchten. Es ist möglicherweise übersichtlicher, zu einem Modell zu wechseln, bei dem Ihre Bibliothek Aktualisierungen an das Front-End überträgt, die ausreichende Informationen enthalten, damit die Objekte nicht abgefragt werden müssen.
quelle