Comment dois-je configurer le classpath que rmiregistry utilise?
Je suis en train de faire une Java RMI application client/serveur. Je suis en cours d'exécution dans les problèmes de démarrage du serveur côté de mon application, comme elle continue de s'exécuter dans un ClassNotFoundException lors de l'appel à la base de Registre.méthode bind() lorsque je tente de démarrer le serveur de l'application.
J'ai commencé avec le tutoriel ici: http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html. Après avoir suivi ces instructions, il était d'abord lancer une ClassNotFoundException se plaindre qu'il ne trouve pas "par exemple.bonjour.Bonjour". J'ai été en mesure de résoudre que par le démarrage de l'rmiregistry DE la destDir répertoire dans le tutoriel, depuis rmiregistry, apparemment, utilise son premier répertoire de départ dans le cadre de son classpath.
J'ai commencé sur mon autre application de test suite, et j'ai été très bien jusqu'à ce que je commencé à utiliser de la troisième partie des fichiers jar dans ma classe de serveur. Maintenant Registre.bind() renvoie une ClassNotFoundException si mon serveur références de classe n'importe quoi dans n'importe quel fichier jar depuis le rmiregistry application ne sais pas à propos de ces fichiers jar.
Aussi loin que je peux dire, rmiregistry n'accepte pas n'importe quelle sorte de chemin de classe de démarrage arg, alors je me demandais comment je peux lui dire ce qu'il classpath je tiens à reconnaître. Selon le tutoriel ici: http://docs.oracle.com/javase/tutorial/rmi/running.html, "vous devez assurez-vous que le shell ou une fenêtre dans laquelle vous allez exécuter rmiregistry a pas la variable d'environnement CLASSPATH ensemble ou a une variable d'environnement CLASSPATH qui ne comprennent pas le chemin d'accès à toutes les classes que vous voulez téléchargé pour les clients de vos objets à distance." Cela sonne comme le contraire de ce dont j'ai besoin... ou suis-je le lire de façon incorrecte? Quelqu'un avait une réussite de départ d'un RMI client/serveur qui utilise tiers des pots (commons-io, commons-logging, et rmiio, dans mon cas)?
C'est sur Windows, par la manière.
Mise à jour
J'ai trouvé un moyen de contourner cela. Voir ma réponse ci-dessous.
Les Questions ne sont pas fermés ici parce qu'ils ont accepté de répondre.Ils sont fermés parce qu'ils sont des doublons ou non reproductible, ou hors-sujet, ou pour d'autres raisons de qualité.
OriginalL'auteur Adrian | 2012-02-25
Vous devez vous connecter pour publier un commentaire.
Les remarques à propos de la suppression du chemin de classe ne s'applique que si vous utilisez le RMI base de code, comme l'énigmatique remarque sur le téléchargement de classes est destiné à impliquer.
Si vous n'êtes pas à l'aide de la base de code de fonctionnalité, il suffit soit:
rmiregistry,
comme le montre d'ailleurs ici, ourmiregistry
avec-J-Djava.class.path=...
LocateRegistry.createRegistry().
C'est à bien des égards la meilleure solution, comme il vit et meurt avec la JVM, partage son classpath, et, incidemment, est conforme avec les exigences de la base de code de fonction en tant que bien.Si vous n' (3), vous devez stocker la valeur de retour dans une variable statique pour l'empêcher d'être récupérées, ce qui provoque le registre pour être désexporter, ce qui peut conduire à la GCR de l'objet distant, ce qui peut entraîner de la GC avait, qui va conduire à la thread d'écoute à la sortie, ce qui peut conduire à l'ensemble de la JVM de quitter.
OriginalL'auteur user207421
Il n'existe pas de Registre RMI java spécifique de chemin de classe. Il doit utiliser la même classpath comme le reste du système Java. Vous pouvez configurer votre classpath, en le précisant sur la ligne de commande, ou dans votre environnement de système d'exploitation. Bien qu'un peu daté, ce doc devrait vous diriger dans la bonne direction.
OriginalL'auteur Noah Ternullo
(J'avais posté cette réponse comme une mise à jour à ma question. Par Zecas de la suggestion dans l'un des commentaires, je me déplace à la section réponse.)
J'ai été en mesure d'obtenir la partie serveur pour démarrer en désobéissant à la suggestion de la deuxième tutoriel référencé dans ma question ci-dessus:
J'ai créé une variable d'environnement CLASSPATH et ajouté mes .classe répertoire de sortie et chaque de la troisième partie des fichiers jar. Je pensais que je l'avais essayé avant, mais je ne crois pas... je voulais Juste te laisser ma solution au cas où quelqu'un d'autre a le même problème.
OriginalL'auteur Adrian
Un exemple de la façon de définir le classpath pour rmiregistry
Win32:
UNIX:
vous pouvez voir comment définir le classpath dans ma réponse , mais je pense que votre but n'est que de downvote mes réponses , de ne pas les lire attentivement !!!
Mon objectif est de s'assurer que les questions sont posées de manière claire et correcte. La partie que vous avez maintenant se référer à n'était pas présent lorsque j'ai commenté, et les autres 95% de votre réponse, reste hors de propos.
Et maintenant , quelle est ma réponse , 90% de réponses correctes ?
100%, à l'exception d'assumer un csh, mais aussi six mois de retard ...
OriginalL'auteur MCHAppy