Domanda

Voglio capire come l'implementazione dinamica stub proxy è in realtà fatto dietro le quinte. Secondo quanto ho letto, dal momento in cui un oggetto remoto viene esportata se non viene trovata una classe stub pre-generata, il runtime RMI genererebbe un proxy dinamico di agire come stub. Questo stub viene poi legato al Registro RMI e poi accessibili da qualche cliente RMI.

La domanda è: dal momento che lo stub è in realtà un proxy generato dinamicamente, la sua definizione di classe non sarebbe disponibile sul lato client, quindi come mai il client è ancora in grado di recuperare lo stub dal Registro di sistema RMI? C'è una sorta di dinamica di classe di carico accadendo dietro le quinte o se RMI usa un'altra tecnica per aggirare questo?

È stato utile?

Soluzione

Java.lang.reflect.Proxy è serializzabile e ha il supporto speciale nel ObjectOutputStream e ObjectInputStream. In pratica solo le interfacce implementate e il gestore invocazione vengono serializzati, e un nuovo proxy dinamica è costruito da quella durante la deserializzazione.

Altri suggerimenti

RMI fa uso classloading dinamica - il classpath viene inviato alongwith la chiamata come un 'annotazione classpath' da cui il client carica la classe. Potete guardare l'attuazione RMI per ulteriori informazioni - è disponibile come parte della sorgente JDK. In particolare, le classi ObjectOutputStream e RMIClassloader.

Aggiornamento: RMI non viene avviato un server HTTP - infatti, si avrebbe bisogno la vostra soluzione personalizzata per questo. Uno di loro come si parla può essere un server HTTP che si esegue, rendere le classi disponibili tramite il server, e passare il codice di base con l'indirizzo / porta del server HTTP nel vostro stub, in modo che i vostri clienti li possono scaricare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top