【问题标题】:How to share object between java applications?如何在 java 应用程序之间共享对象?
【发布时间】:2011-03-15 18:10:58
【问题描述】:

我有 2 个独立的 Java 应用程序同时运行。 (两个单独的 javaw.exe) 我需要在它们运行时在它们之间共享一个对象。

在没有任何永久存储的情况下实现此目的的最简单方法是什么?

【问题讨论】:

标签: java object-sharing


【解决方案1】:

对象及其实例变量可以在 Java 程序中的线程之间共享,这是非常简单的任务。
如果您需要在两个程序之间共享对象(它的实例),没有数据存储,下一个选择是使用RMI Socket Communication 或 Java 消息服务。

【讨论】:

    【解决方案2】:

    你可以使用 TCP

    1. 使用本地软件端口,比如说 本地主机:999。
    2. 让一个应用程序作为服务器(侦听此端口)和另一个作为客户端(将连接到 localhost:999 的服务器,但将使用不同的端口供自己使用)。
    3. 客户端会将您的对象序列化为流式传输。
    4. 服务器会反序列化!

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

    【讨论】:

    【解决方案3】:

    我认为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 支持各种共享数据结构,包括 MapQueueListAtomicLongIdGenerator 等。The documentation is good 并且根据我的经验,实现是可靠的。

    【讨论】:

    • hazelcast 很容易设置。但是请注意潜在的限制(例如超过 150 个成员的集群,或数据一致性)
    【解决方案4】:

    您必须决定是喜欢共享和更新状态,还是只发送一次性消息对象。

    在第一种情况下,您必须共享对某个对象的“远程引用”。 RMI 是个好方法。

    在第二种情况下,您只需要序列化您要共享的对象并发送即可。您可以将其序列化(转换为字节)通过套接字作为Ankit said 发送,甚至可以使用:

    • RMI :) 发送方连接到注册了 RMI 的接收方,调用一个以消息对象为参数的方法,然后忘记了 RMI 对象

    • Java 消息服务 (JMS),可能有点矫枉过正......

    • 其他一些有创意但简单的东西......

    【讨论】:

      【解决方案5】:

      如果您不能永久存储该对象,则需要以某种方式转移它。这可以通过网络或某种共享内存来完成。

      对于第一种(网络)方法,使用序列化(java.io.Serializable)并通过套接字传输对象。这将需要编写套接字侦听器。

      第二种方法需要使用和配置第三方库(例如EHCache)。

      【讨论】:

        【解决方案6】:

        也许是Oracle Coherence?这就像跨应用程序共享的内存映射。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-04-04
          • 2013-05-02
          • 2010-11-06
          • 1970-01-01
          • 1970-01-01
          • 2010-12-10
          • 2012-12-04
          相关资源
          最近更新 更多