一度に2つの別々のJavaアプリケーションを実行しています。(2つの別々のjavaw.exe)実行中にオブジェクトを共有する必要があります。
永続的なストレージがなくてもこれを実現する最も簡単な方法は何ですか?
一度に2つの別々のJavaアプリケーションを実行しています。(2つの別々のjavaw.exe)実行中にオブジェクトを共有する必要があります。
永続的なストレージがなくてもこれを実現する最も簡単な方法は何ですか?
オブジェクトとそのインスタンス変数は、Javaプログラムのスレッド間で共有できます。これは非常に簡単な作業です。
データストレージなしで2つのプログラム間でオブジェクト(そのインスタンス)を共有する必要がある場合、次の選択はRMIソケット通信またはJavaメッセージングサービスを使用することです。
TCPを使用できます
例:http ://www.java-samples.com/showtutorial.php?tutorialid = 1167
Hazelcastは、このような状況ではうまく機能すると思います。実際にはセットアップは必要ありません(Hazelcast jarに依存関係を追加する必要があります)。次のコードサンプルは、共有を設定する方法を示していますMap
。
// Code in process 1
Config cfg = new Config();
HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);
Map<Integer, String> sharedData = instance.getMap("shared");
sharedData.put(1, "This is shared data");
// Code in process 2
Config cfg = new Config();
HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);
Map<Integer, String> sharedData = instance.getMap("shared");
String theSharedString = sharedData.get(1);
Hazelcastは、、、、などを含むさまざまな共有データ構造をサポートしていますMap
。ドキュメントQueue
は優れており、私の経験では、実装はしっかりしています。List
AtomicLong
IdGenerator
共有状態と更新状態を優先するか、または単に1回限りのメッセージオブジェクトを送信するかを決定する必要があります。
最初のケースでは、オブジェクトへの「リモート参照」を共有する必要があります。RMIは良いアプローチです。
2番目のケースでは、共有するオブジェクトをシリアル化して送信するだけで済みます。Ankitが言ったように、ソケットを介してシリアル化(byesに変換)して送信することも、次を使用することもできます。
RMI :)送信者はRMIに登録された受信者に接続し、メッセージオブジェクトをパラメータとしてメソッドを呼び出し、RMIオブジェクトを忘れます
Javaメッセージングサービス(JMS)、多分やり過ぎ...
他の創造的だが単純なこと...
オブジェクトを永続的に保存できない場合は、何らかの方法でオブジェクトを転送する必要があります。これは、ネットワークまたはある種の共有メモリを介して実行できます。
最初の(ネットワーク)アプローチでは、シリアル化(java.io.Serializable)を使用して、オブジェクトをソケット経由で転送します。これには、ソケットリスナーを作成する必要があります。
2番目のアプローチでは、サードパーティのライブラリ(EHCacheなど)を使用して構成する必要があります。
おそらくOracleCoherence?これは、アプリケーション間で共有されるメモリ内マップのように機能します。