Question

Je veux comprendre comment la dynamique mise en œuvre du stub proxy est effectivement fait derrière la scène. D'après ce que je lis, au moment où un objet distant est exportée si aucune classe de la souche prégénérée se trouve, le moteur d'exécution RMI générerait un proxy dynamique pour agir comme le talon. Ce talon est alors lié au Registre RMI, puis accessible par un client RMI.

La question est: puisque le talon est en fait un proxy généré dynamiquement, sa définition de classe ne serait pas disponible sur le côté client, alors comment se fait le client est toujours en mesure de récupérer le talon du registre RMI? Y at-il une sorte de classe de chargement dynamique qui se passe derrière la scène ou ne RMI utilise une autre technique pour travailler autour de cela?

Était-ce utile?

La solution

Java.lang.reflect.Proxy est sérialisable et il a un soutien particulier dans ObjectOutputStream et ObjectInputStream. Fondamentalement juste les interfaces mises en œuvre et le gestionnaire d'invocation sont sérialisés, et un nouveau proxy dynamique est construit à partir qu'au cours de désérialisation.

Autres conseils

RMI utilise-t-classloading dynamique - le classpath est envoyé alongwith l'appel comme une « annotation classpath » à partir de laquelle le client charge la classe. Vous pouvez regarder la mise en œuvre RMI pour plus d'informations - il est disponible dans le cadre de la source JDK. Plus précisément, les classes ObjectOutputStream et RMIClassloader.

Mise à jour: RMI ne démarre pas un serveur HTTP - en fait, vous auriez besoin de votre solution personnalisée pour cela. L'un d'eux comme vous le mentionnez peut être un serveur HTTP que vous exécutez, effectuez les classes disponibles via le serveur, et de transmettre le code de base avec l'adresse du serveur HTTP / port dans vos talons, afin que vos clients peuvent les télécharger.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top