2009-11-10 4 views
1

J'essaie de travailler sur un projet qui implique l'exécution/l'exécution du fichier java dans trois JVM sur un réseau différent. Si je lance localement le fichier Java, il devrait fonctionner simultanément dans les trois ou deux JVM.Comment exécuter un fichier/projet java dans une machine JVM distante présente dans un autre réseau?

Par exemple: /usr/local/helloWorld.java

class HelloWorld { 

    public static void main(String args[]){ 
     System.out.println("Hello World"); 
    } 

    } 

Quand je lance ce /usr/local/$java helloWorld Cela devrait imprimer Bonjour tout le monde dans JVM1 (localement), JVM2 (qui est à distance).

Est-il possible de dire que la machine distante JVM2 que le chemin pour le fichier de classe est situé à /usr/local/ exécuter le fichier à partir de là?

ou

Dois-je exécuter $java helloWorld dans la machine à distance aussi?

Merci

+0

Si je vous comprends bien, vous voulez exécuter la même application sur plusieurs machines sans communication entre les instances de l'application. Donc ce n'est pas une question java mais plutôt une question sur la façon de démarrer la même application sur plusieurs machines ... – pgras

+0

@pgras Non, j'ai besoin de lancer la même instance dans toutes les JVM synchronisées avec les autres JVM. Comment puis-je communiquer avec la JVM distante à synchroniser avec mon application/fichier actuel? Pour qu'il exécute la même chose sur JVM1 et JVM2 –

Répondre

1

Plain Java ne dispose pas du mécanisme permettant d'appeler et de synchroniser plusieurs JVM sur plusieurs machines.

Je suggère de regarder dans une plate-forme de la grille supportant Java ou la version Open Source de Terracotta en fonction de ce que vous devez faire.

http://www.terracotta.org/web/display/orgsite/Home

0

Pour exécuter des commandes sur plusieurs JVM, je suppose que vous aurez besoin de mettre en œuvre une sorte de client/serveur ou P2P ou la logique de multidiffusion pour envoyer des commandes aux clients. Pour trouver des "définitions de classes distantes", les clients peuvent utiliser une URLClassLoader à charger des classes et des ressources à partir d'un chemin de recherche d'URL se référant aux fichiers JAR et aux répertoires.

:

1

D'un point de vue purement Java (par rapport à ssh'ing à la machine (EDIT je n'ai pas l'expérience avec elle, mais peut-être avoir un coup d'oeil à Jini Je ne sais pas ce répondra à vos besoins bien..) instanciation de shell distant), vous pouvez envisager RMI et un modèle Aglet où un objet peut être transparent réseau/jvm et s'exécuter sur n'importe quelle cible configurée.

+0

@Xepoch RMI est un objet s'exécutant dans une machine virtuelle Java pour appeler des méthodes sur un objet exécuté dans une autre machine virtuelle Java. Je cherche quelque chose comme si j'instancie un objet dans une JVM devrait créer une autre instance dans la JVM distante. et Aglet est plus liée à l'agent mobile, je suis à la recherche d'une application de bureau au moins pour l'instant. –

+0

@Srinivas, RMI peut être utilisé pour transporter également l'objet sérialisable si vous êtes cible Les JVM ne sont pas conscients de la classe. Comme mentionné précédemment, vous pouvez également utiliser un URLClassLoader pour accomplir à peu près la même chose.Aglet ne doit pas être pour une utilisation mobile, "motif" utilisé généralement ailleurs. L'instanciation d'objet parallèle est une bête très distincte. par exemple. Voulez-vous que tous les objets soient nouveaux sur chaque JVM en miroir ou seulement sur certains objets? Si le premier vous devez implémenter votre propre tas mmap/file, si ce dernier implémente un proxy qui utilise RMI pour créer l'objet sur les JVM cible. – Xailor

0

Vous pouvez jeter un oeil à JGroups. Ensuite, vous pouvez implémenter votre application d'une manière qui ne commencera pas le traitement jusqu'à ce que suffisamment de membres du groupe aient rejoint et une fois que tous les membres du groupe se seront joints vous pourrez utiliser JGroups pour les laisser communiquer ... Mais vous devrez toujours démarrer les JVM manuellement ou par un script ...

Questions connexes