8

一度に2つの別々のJavaアプリケーションを実行しています。(2つの別々のjavaw.exe)実行中にオブジェクトを共有する必要があります。

永続的なストレージがなくてもこれを実現する最も簡単な方法は何ですか?

4

6 に答える 6

8

オブジェクトとそのインスタンス変数は、Javaプログラムのスレッド間で共有できます。これは非常に簡単な作業です。
データストレージなしで2つのプログラム間でオブジェクト(そのインスタンス)を共有する必要がある場合、次の選択はRMIソケット通信またはJavaメッセージングサービスを使用することです。

于 2010-07-14T09:35:38.977 に答える
4

TCPを使用できます

  1. ローカルソフトウェアポート、たとえばlocalhost:999を使用します。
  2. 1つのアプリケーションをサーバー(このポートでリッスン)として作成し、もう1つのアプリケーションをクライアント(localhost:999でサーバーに接続しますが、それ自体が使用するために別のポートを使用します)にします。
  3. クライアントはオブジェクトをシリアル化してストリーミングします。
  4. サーバーは逆シリアル化します!

例:http ://www.java-samples.com/showtutorial.php?tutorialid = 1167

于 2010-07-14T09:22:43.060 に答える
4

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は優れており、私の経験では、実装はしっかりしています。ListAtomicLongIdGenerator

于 2015-01-01T23:23:04.300 に答える
3

共有状態と更新状態を優先するか、または単に1回限りのメッセージオブジェクトを送信するかを決定する必要があります。

最初のケースでは、オブジェクトへの「リモート参照」を共有する必要があります。RMIは良いアプローチです。

2番目のケースでは、共有するオブジェクトをシリアル化して送信するだけで済みます。Ankitが言ったように、ソケットを介してシリアル化(byesに変換)して送信することも、次を使用することもできます。

  • RMI :)送信者はRMIに登録された受信者に接続し、メッセージオブジェクトをパラメータとしてメソッドを呼び出し、RMIオブジェクトを忘れます

  • Javaメッセージングサービス(JMS)、多分やり過ぎ...

  • 他の創造的だが単純なこと...

于 2010-07-14T09:48:19.253 に答える
2

オブジェクトを永続的に保存できない場合は、何らかの方法でオブジェクトを転送する必要があります。これは、ネットワークまたはある種の共有メモリを介して実行できます。

最初の(ネットワーク)アプローチでは、シリアル化(java.io.Serializable)を使用して、オブジェクトをソケット経由で転送します。これには、ソケットリスナーを作成する必要があります。

2番目のアプローチでは、サードパーティのライブラリ(EHCacheなど)を使用して構成する必要があります。

于 2010-07-14T09:23:38.720 に答える
0

おそらくOracleCoherence?これは、アプリケーション間で共有されるメモリ内マップのように機能します。

于 2010-07-14T09:21:12.830 に答える