2009-05-05 7 views
1

J'ai une petite classe de test que je veux exécuter sur un jvm particulier déjà opérationnel (il s'agit en fait d'une application Web exécutée sur Tomcat). La raison pour laquelle je veux faire ceci est que je veux exécuter une petite classe de test (avec la méthode principale et tout) dans ce jvm afin que j'obtienne le même environnement (classes chargées et initialisées) pour ma classe de test. Est-il possible d'indiquer que, par exemple, via un paramètre jvm, il ne doit pas initialiser un nouveau vm pour exécuter ma classe mais plutôt aller exécuter sur le vm distant et me montrer le résultat ici, sur ma console. Donc le jvm local agit comme une sorte de proxy mince?Exécution d'une classe dans jvm distant

Je ne suis pas au courant dans le cas où il existe certains outils qui devraient rendre cela possible. D'ailleurs entendu quelque part que java 6 jvm est livré avec une option comme celle-ci, est-ce vrai? S'il vous plaît aidez-moi.

Merci,

+0

Comment utilisez-vous la petite classe de test atm? – Chii

Répondre

0

Vous pourriez trouver JMX utile. Enregistrez un MBean dans le processus serveur. Appelez-le avec visualvm (ou jconsole). (tutorial) Jamais essayé moi-même, l'esprit. RMI ferait aussi la magie.

0

http://java.sun.com/javase/6/docs/technotes/guides/rmi/index.html

Faites votre application Web démarre un registre RMI et d'enregistrer vos services haricots là-bas.

Ensuite, dans d'autres JVM, vous pouvez exécuter un programme qui interroge le registre RMI démarré par votre application Web pour les services que vous souhaitez vérifier et vous avez terminé.

1

Vous voudrez peut-être jeter un coup d'œil à btrace. Il vous permet d'exécuter du code dans une machine virtuelle Java déjà démarrée à condition de ne pas modifier l'état des variables à l'intérieur de cette machine virtuelle Java. Avec ce type de traçage, vous pourriez peut-être résoudre votre problème d'une manière différente. Pas en exécutant du code supplémentaire sous la forme d'une nouvelle classe mais en ajoutant du code de sécurité à et une classe existante s'exécutant dans une JVM. Par exemple, vous pouvez System.out.println le nom du fichier lorsqu'il y a un appel à File.exists.

0

Je suppose que "petite classe de test" est fondamentalement un code de débogage que vous souhaitez exécuter pour surveiller votre application réelle, qui est déployée à distance sur un Tomcat. Si tel est le cas, vous devez connecter votre débogueur Eclipse à distance à l'instance Tomcat. Vous pouvez donc définir un point d'arrêt à des emplacements intéressants, puis utiliser l'affichage Affichage d'Eclipse pour exécuter du code arbitraire nécessaire au code de débogage avancé. Comme Java prend en charge le remplacement de code à chaud en utilisant le mécanisme de débogage, vous pouvez également modifier le code existant sur le côté distant avec un nouveau code lors de l'exécution.

+0

Eh bien permettez-moi de reformuler le scénario, disons que j'ai une webapp fonctionnant sur tomcat et la nouvelle classe que je veux exécuter ne fait pas partie de cette base de code dire un code de diagnostic donc je veux charger cette classe sur le jvm exsistant du tomcat et courez là, est-ce possible? le débogueur n'aidera que si la classe d'origine est déjà chargée dans le jvm – redzedi

1

Après avoir lu cette question et les réponses, j'ai décidé de rouler mon propre petit utilitaire: remoteJunit

Il est léger et charge dynamiquement les classes du client vers la machine virtuelle Java du serveur. Il utilise HTTP pour la communication.