8
votes

Comment partager des objets entre les applications Java?

J'ai 2 applications Java distinctes fonctionnant à la fois. (Deux javaw.exe distincts) Je dois partager un objet entre eux pendant qu'ils courent.

Quel est le moyen le plus simple d'y parvenir sans avoir de stockage permanent?


2 commentaires

6 Réponses :


0
votes

Peut-être oracle cohérence ? Cela fonctionne comme une carte mémoire partagée entre les applications.


0 commentaires

4
votes

Vous pouvez utiliser TCP

  1. Utilisez un port logiciel local, disons Localhost: 999.
  2. Faites une application en tant que serveur (écouter sur ce port) et autre en tant que client (se connectera au serveur à localhost: 999, mais utilisera un port différent pour son propre usage).
  3. Le client sera sérialisé votre objet à flux.
  4. Sersialize Serialize!

    Exemple: http://www.java-samples.com/showdutoriel .php? TutorialID = 1167


1 commentaires

Bien sûr que ce ne sera pas. Ensuite, il devrait y avoir quelque chose comme la mémoire partagée. Un exemple de mémoire partagée: Ça UnderializableOne.blogspot.com/2006 / 10 / ...



2
votes

Si vous ne pouvez pas stocker l'objet de manière permanente, vous devez le transférer d'une manière ou d'une autre. Cela peut être fait via un réseau ou une sorte de mémoire partagée.

Pour la première approche (réseau), utilisez la sérialisation (java.io.sérialisable) et transférez l'objet sur la prise. Cela nécessitera la rédaction d'auditeurs de socket.

Deuxième approche nécessitera l'utilisation et la configuration d'une bibliothèque tierce partie (E.G. EHCache ).


0 commentaires

8
votes

Les objets et leurs variables d'instance peuvent être partagés entre des threads dans un programme Java, qui est une tâche assez simple.
Si vous avez besoin de partager des objets (instance de celle-ci) entre deux programmes, avec le stockage de données, le choix suivant utiliserait Communication de socket RMI ou service de messagerie Java.


0 commentaires

3
votes

Vous devez décider si vous préférez l'état partagé et mis à jour, ou simplement envoyer un objet de messagerie unique.

Dans le premier cas, vous devez partager une "référence à distance" à un objet. RMI est un bon approche.

Dans le second cas, il vous suffit de sérialiser l'objet que vous souhaitez partager et de l'envoyer. Vous pouvez l'envoyer sérialisé (converti en byes) sur une prise comme Ankit dit ou même vous pouvez utiliser:

  • rmi :) L'expéditeur se connecte à un récepteur enregistré RMI, invoque une méthode avec l'objet Mesasge sous forme de param et oublie l'objet RMI

  • Service de messagerie Java (JMS), peut-être une overkill ...

  • Une autre chose créative mais simple ...


0 commentaires

4
votes

Je pense que Hazelcast fonctionne bien pour ce type de situation. Il ne nécessite pratiquement aucune configuration (plus que cela, vous devez ajouter les dépendances aux bocaux hazelcast). L'exemple de code suivant montre comment configurer une carte partagée code>.

// 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);


1 commentaires

Hazelcast est assez facile à configurer. Cependant, faites attention aux limitations sous-jacentes (comme des clusters plus de 150 membres, ou une cohérence des données)