Bind servant
Vengono descritti i passi richiesti per eseguire il bind del servant.
- Creare un'istanza ORB, ovvero
ORB.init(...) - Creare un'istanza servant; ovvero, nuovo
SampleImpl(...) - Creare un'istanza Tie dall'istanza servant; ossia,
Util.getTie(...) - Esporta il servant collegandolo a un servizio di denominazione
- Richiama proprietà
- Richiama il programma di caricamento classi del sistema
- Caricare e creare un'istanza della classe ORB come specificato nella proprietà ORBClass
- Inizializza l'ORB come determinato dalle proprietà
Successivamente, il server deve creare un'istanza della classe servant SampleImpl.class. Qualcosa di più della creazione di un'istanza di una classe accade sotto la copertura. Tenere presente che il servant SampleImpl estende la classe PortableRemoteObject , in modo da richiamare il costruttore di PortableRemoteObject . Questo costruttore richiama il metodo statico exportObject(...) con il parametro che è la stessa istanza servant che si tenta di istanziare. Se il servant non eredita da PortableRemoteObject, l'applicazione deve richiamare direttamente exportObject() .
Il metodo exportObject() tenta prima di caricare un tie RMI - IIOP. L'ORB implementa una cache di classi di correlazioni per migliorare le prestazioni. Se una classe di parità non è già memorizzata nella cache, l'ORB carica una classe di parità per il servant. Se non riesce a trovarne uno, sale la struttura ad albero di eredità, tentando di caricare le correlazioni della classe parent. L'ORB si arresta se trova una classe PortableRemoteObject o java.lang.Objecte restituisce un valore null . In caso contrario, restituisce un'istanza di tale legame da un hashtable che abbina un legame con il suo servant. Se l'ORB non riesce a trovare il tie, presuppone che sia presente una struttura RMI (JRMP) e richiama il metodo exportObject() della classe UnicastRemoteObject . Un tie null è registrato nella cache e viene generata un'eccezione. Il servant è ora pronto a ricevere i richiami dei metodi remoti. Tuttavia, non è ancora raggiungibile.
Nel passo successivo, il codice del server deve trovare il tie stesso (supponendo che l'ORB abbia già preso il tie) per poterlo esportare in un servizio di denominazione. Per fare ciò, il server passa l'istanza appena creata del servant nel metodo statico javax.rmi.CORBA.Util.getTie(). Questo metodo, a sua volta, ottiene il legame che si trova nella tabella hash creata dall'ORB. Il tie contiene la coppia di classi tie - servant.
Quando è in possesso del tie, il server deve ottenere un riferimento per il servizio di denominazione e collegare il tie ad esso. Come nel lato client, il server richiama il metodo ORB resolve_initial_references("NameService"). Il server crea quindi un NameComponent, che è un oggetto della struttura di directory che identifica il percorso e il nome del riferimento dell'oggetto remoto nel servizio di denominazione. Il server collega NameComponent con il tie. Il servizio di denominazione rende quindi lo IOR per il servant disponibile a chiunque ne faccia richiesta. Durante questo processo, il codice server invia un LocateRequest per ottenere l'indirizzo del server di denominazione. Invia inoltre una Richiesta che richiede un'operazione di ricollegamento al server di denominazione.