Je veux une seule instance d'un singleton pour toutes les jvms - Java - Programmation
Marsh Posté le 04-06-2009 à 10:57:16
Impossible d'avoir la même instance sur 2 JVMs différentes.
Marsh Posté le 04-06-2009 à 10:59:46
Il faudrait créer une jvm 'serveur' et tes autres jvm viennent s'y connecter pour récupérer le singleton commun.
Marsh Posté le 04-06-2009 à 12:19:40
Et en passant par RMI?
J'ai trouvé ça: http://www.javaspecialists.eu/archive/Issue052.html
mais je ne suis pas sûr d'avoir bien compris (je suis mauvais en anglais).
Les solutions des paragraphes "Clustering and RMI Singletons" et "Service Locators" s'appliquent bien à mon cas?
Marsh Posté le 05-06-2009 à 11:08:57
J'ai essayé d'obtenir le singleton par rmi: je crée le singleton sur la jvm où il y a mes ejbs, et la jvm de mon client demande et obtient le singleton, par rmi. Mais ça ne règle pas le problème: ça à l'air d'être une copie du singleton que je reçoit. Le singleton que je reçoit dans ma jvm client via rmi n'a pas la même référence que le singleton de la jvm de jboss (où il y a les ejbs), et lorsque je change des valeurs du singleton de la jvm de jboss, ces changements ne se répercutent pas sur le singleton de ma jvm client.
Est-ce qu'il y a un moyen (mémoire partagée?) pour avoir un singleton commun à plusieures jvms, de façon que les changements dans le singleton soient visibles dans toutes ces jvms?
Marsh Posté le 05-06-2009 à 11:58:04
Citation : Impossible d'avoir la même instance sur 2 JVMs différentes. |
Au mieux tu peut avoir une copie synchronisée
Marsh Posté le 29-10-2009 à 09:57:33
FrenchFrogger a écrit : Est-ce qu'il y a un moyen (mémoire partagée?) pour avoir un singleton commun à plusieures jvms, de façon que les changements dans le singleton soient visibles dans toutes ces jvms? |
Et pourquoi obtenir a référence du singleton? Si l'un des singletons est le singleton "master", c'est-à-dire, l'une des JVM est la JVM "master", pourquoi pas lui demander ce dont tu as besoin, comme un service, soit une commande "get", soit un commande "update", et puis, utiliser la méthode synchronized dedans du singleton "master" ?
Marsh Posté le 08-11-2009 à 10:08:20
FrenchFrogger a écrit : Et en passant par RMI? |
Je dirais oui pour Service locator. Tu fais un service et non un singleton. Si tu te poses cette question, c'est probablement que tu n'as pas compris l'architecture du système que tu es censé développer, va demander des explications à l'architecte.
Marsh Posté le 04-06-2009 à 09:55:23
Voilà, mon programme tourne sous Jboss 5.
J'ai un singleton qui est utilisé par mes classes ejb et par mes classes "normales" (aucune classe n'hérite du singleton, elles l'utilisent seulement).
Le problème, c'est que j'ai deux jvm: une qui fait tourner les conteneurs ejb et une qui fait tourner mon programme. J'ai donc deux instances du singleton, une pour chaque jvm.
Comment faire pour qu'il n'y ait qu'une seule instance du singleton, commune aux deux jvm?