JREライブラリーのクラスは、外部/非JREアセンブリーからの監視可能および/または非同期読み取りをサポートしていますか?


12

他のプラットフォームのネイティブフロントエンドがオブジェクトを観察し、Observableパターンを利用できるように、クロスプラットフォームライブラリ(JREなど)を実装してオブジェクト参照でスレッドセーフな方法で操作するにはどうすればよいですか?

少しの背景-ほとんどのフロントエンドフレームワークで使用されるデータバインディングの概念があります。C#およびJavaでは、これは、複数のコントロールまたは「オブザーバー」がサブスクライブする可能性がある変更が発生したときにイベントを発生させる機能をクラスに与えるObservableトレイトに関連しています。このように、オブザーバーはリソースをポーリング/読み取りし続ける必要がなく、更新を比較します。

時間の経過とともにデータのリストを変更する分析エンジンで作業したいと思います。分析の実行中に、フロントエンドがこれらのリストを監視できるようになると便利です。これには、フロントエンドが、クロスプラットフォームのライブラリで書かれたオブジェクトを分析エンジンに渡し、そのオブジェクトに対してスレッドセーフな読み取りを行えることが必要だと思われます。または、ライブラリが可観測性の契約を満たします。

古いUnixスタイルのCLIエンジンでこれを処理する方法は、stdin / stdout / stderrを使用し、定期的にエンジンに更新を送信させることです。これには、標準のオーバーヘッドと、可能な場合は避けたいテキスト解析が必要です。


2
通常、コアの質問は「Xは可能ですか」よりも少し狭くするのが最善です。なぜなら、それに対する正しい答えは、ほとんどの場合「はい、十分に努力すれば」です。「どうすればstdin / stdoutのオーバーヘッドなしでXを実行できますか?」どの場合、静的または動的にリンクされたライブラリを単純に使用しないのですか?何らかの理由でこのライブラリをUIとは別のプログラムにする必要がありますか?
Ixrec

ありがとう、Ixrec。あなたは私のタイトルであなたが提案する方法でそれを言い表したと思いますか?ライブラリを移植可能にし、フロントエンドをネイティブにしたいのは、ネイティブUIフレームワークの方が一般に優れていると思うからです(意見アラート!) 。
ブランドンアーノルド

静的または動的にリンクされたライブラリを移植できないのはなぜですか?再:タイトル、それは「広すぎる」質問の教科書の例です。あなたの質問の残りの部分には、より具体的な質問があるように見えたので、私はそれに集中しませんでした。
Ixrec

@Ixrecそれはできます。質問は、それがライブラリであり、それらの可能性を含んでいると仮定しています。このライブラリを使用するすべてのアプリケーションが、操作中に非同期的に渡されるオブジェクトへの参照を監視できるようにするだけです。
ブランドンアーノルド

1
@Ixrecタイトルをより広くないように更新しました
ブランドンアーノルド

回答:


1

(たとえば)apache camel integration frameworkを使用して、ライブラリのモデル上に統合層を作成できます。Nettyコンポーネントはおそらくあなたのニーズに合うでしょう。観察可能なパターンを使用して、統合層はモデルの受信した変更を変換し、フロントエンドサブスクライバーに通知する必要があります。要件を解釈する別の同様の方法は、モデルが変更されると、統合層のオブザーバーリスナーがJMSトピックでメッセージをパブリッシュし、フロントエンドの接続されたサブスクリプトが受信するイベント駆動型アーキテクチャについて考えることです。


0

私はあなたの出版社が更新をキューまたはパイプに書き込むことを示唆する、まったく異なる答えを書きましたが、私は質問を読み直しました。

私の理解が正しければ、一般的な質問は、ネイティブフロントエンドがスレッドセーフな方法でJavaオブジェクトの状態を照会できるJREで実行するライブラリを作成することです。

フロントエンドがJREで実行されるライブラリコード(JNI、EJB RPC、RPCスタイルのHTTPインターフェイス、メッセージキューを介した要求/応答など)とやり取りできる方法は数百あるため、これは非常に広範です。

ただし、どちらを選択する場合でも、チェーンのある時点でJavaメソッド呼び出しを行う必要があります。そこで、スレッドセーフを制御することができます。そこには、スレッドセーフツールの備品がすべて揃っています。同期、防御的なコピーの返却、キャッシュされたデータの操作などができます。

ただし、これが従うモデルであるかどうかを検討してください。ライブラリは、オブジェクトを照会する必要のない十分な情報を含む更新をフロントエンドにプッシュする「聞かないで、教えてあげる」モデルに移行する方が簡単かもしれません。


余分なコメント-Redis(または同様の)をフロントエンドとバックエンドの仲介として使用することを検討しましたか?
スリム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.