如何在java应用程序之间共享对象?

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

没有永久存储的最简单方法是什么?

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

您可以使用TCP

  1. 使用本地软件端口,例如localhost:999。
  2. 将一个应用程序设置为服务器(侦听此端口),将其他应用程序设置为客户端(将连接到localhost:999上的服务器,但将使用不同的端口供自己使用)。
  3. 客户端会将您的对象序列化为流。
  4. 服务器确实反序列化!

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

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

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

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

  • RMI :)发件人连接到RMI注册的接收器,调用一个方法,将mesasge对象作为参数并忘记RMI对象

  • Java Messaging Service(JMS),也许是一种矫枉过正的行为……

  • 一些其他创意但简单的事情……

我认为Hazelcast适用于这种情况。 它实际上不需要设置(超过你需要将依赖项添加到Hazelcastjar子)。 以下代码示例演示如何设置共享Map

 // Code in process 1 Config cfg = new Config(); HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg); Map 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 sharedData = instance.getMap("shared"); String theSharedString = sharedData.get(1); 

Hazelcast支持各种共享数据结构,包括MapQueueListAtomicLongIdGenerator等。文档很好 ,根据我的经验,实现是可靠的。

如果您无法永久存储对象,则需要以某种方式进行传输。 这可以通过网络或某种共享内存来完成。

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

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

也许Oracle Coherence ? 这类似于跨应用程序共享的内存映射。