2010-05-06 6 views
1

Y at-il un moyen pratique de transmettre un objet , y compris son code (la classe) sur un réseau (pas seulement les données d'instance)? Ne me demandez pas pourquoi je veux faire ça. C'est dans une mission. J'ai demandé plusieurs fois si c'est vraiment ce qu'ils voulaient dire et ils n'ont pas reformulé leur réponse, donc je suppose qu'ils veulent vraiment que nous transmettions du code (pas seulement les données de terrain) sur un réseau. Pour être honnête, je n'ai aucune idée de la raison pour laquelle nous avons besoin d'un proxy dans cette tâche de toute façon, écrire simplement une classe simple ferait l'OMI. L'affectation indique que nous devrions instancier le proxy sur le serveur et le transmettre au client (et oui, ils parlent d'un java.lang.reflect.Proxy, ils appellent cette classe). Comme il n'y a pas de fichier de classe pour un proxy, je ne peux pas le déployer. Je suppose que je devrais lire en quelque sorte le bytecode du proxy généré, le transmettre au client, puis le charger. Ce qui n'a absolument aucun sens, mais cela semble être ce qu'ils veulent que nous fassions. Je ne comprends pas pourquoi.transmettre un java.lang.reflect.Proxy sur un réseau

+0

C'est un appel au proxy sur le client exécute effectivement le code sur le serveur et renvoie le résultat au client? – Yishai

+0

Yishai est probablement correct ici - les objets proxy sont souvent utilisés pour permettre la transmission des demandes à travers le fil. Je recommande de lire le java.lang.reflect.Proxy java docs, situé ici: http://java.sun.com/javase/6/docs/api/java/lang/reflect/Proxy.html – aperkins

+0

Je sais ce que le La classe de proxy est bonne pour. L'exercice d'une autre conférence était d'écrire un RMI comme middleware, que j'ai vraiment apprécié. J'ai écrit mon propre framework de sérialisation, le transport réseau, le nommage très basique, les annotations utilisées et beaucoup de réflexion afin de générer de bons proxies etc. Dans cet exercice, l'objectif principal est d'écrire un système répliqué de manière transparente et nous devons cacher le fait que les serveurs sont répliqués avec un proxy. Et l'assignation indique vraiment que nous devons instancier le proxy sur le serveur et ensuite le proxy doit être utilisé par le client. – panzi

Répondre

1

Ceci est la proposition de valeur de base du projet Apache River (anciennement connu sous le nom de Jini lorsqu'il était exécuté par Sun).

Vous mettez le code dont vous avez besoin pour exécuter à distance dans un pot sur un serveur http "codebase" et publiez votre proxy sur un serveur de recherche. River annote ce proxy (qui est une instance sérialisée) avec les URL de la base de code. Lorsqu'un client récupère ce proxy à partir du serveur de recherche et l'instancie, les fichiers jars de base de données sont utilisés dans un chargeur de classe en mode bac à sable. Il est courant de créer des «proxies intelligents» qui chargent un tas de code à exécuter sur le client pour gérer la communication vers le service source, ou vous pouvez utiliser un proxy plus simple pour effectuer des appels RMI.

La technologie encapsulée par River est compliquée, mais profonde. Êtes-vous sûr de ne pas vouloir que vous appeliez le code à distance?

+0

Cela ressemble en effet à ce que l'on veut faire ici. (Cependant, en parlant de notre mission, je ne vois pas pourquoi nous devrions faire une telle chose.C'est beaucoup trop compliqué pour la mise en place assez statique de la mission et l'objectif de l'exercice est totalement différent.) – panzi

Questions connexes