Obtención del objeto remoto
Existen varios métodos mediante los cuales el cliente puede obtener una referencia para el objeto remoto.
IOR:000000000000001d524d493a5......Esta referencia contiene toda la información necesaria para encontrar el objeto remoto. También contiene algunos detalles de los valores del servidor al que pertenece el objeto.
49424d0a 00000008 00000000 1400 0005- Los tres primeros bytes son el código ASCII para IBM
- El siguiente byte es
0x0A, que especifica que los bytes siguientes proporcionan información sobre la versión del socio. - Los 4 bytes siguientes codifican la longitud de los datos restantes. En este ejemplo, los datos restantes tienen una longitud de 8 bytes.
- Los 4 bytes nulos siguientes se reservan para futuro uso.
- Los 2 bytes siguientes son para el campo Partner Version Major. En este ejemplo, el valor es
0x1400, lo que significa que se está utilizando el release 1.4.0 del ORB. - Los 2 bytes finales de este ejemplo tienen el valor
0x0005y representan el campo Menor. El campo se utiliza para distinguir las actualizaciones de mantenimiento dentro del mismo release. Las actualizaciones contienen cambios que afectan a la compatibilidad con las versiones anteriores.
- La IOR no es visible para los programadores de ORB de nivel de aplicación.
- El ORB del cliente no sabe en que lugar hay que buscar la IOR.
Un ejemplo típico del proceso de arranque tiene lugar cuando se utiliza un servicio de denominación. En primer lugar, el cliente llama al método de ORB resolve_initial_references("NameService"). El método que devuelve una referencia al servidor de nombres. La referencia está en forma de un objeto NamingContext. A continuación, el ORB busca un servidor de nombres correspondiente en el sistema local en el puerto predeterminado 2809. Si no existe ningún servidor de nombres, o el servidor de nombres no se puede encontrar porque está escuchando en otro puerto, el ORB devuelve una excepción. La aplicación cliente puede especificar un host distinto, un puerto distinto o ambos, utilizando las opciones -ORBInitRef y -ORBInitPort.
Utilizando NamingContext y el nombre con el que se ha enlazado el Objeto remoto en el servicio de nombres, el cliente puede recuperar una referencia al objeto remoto. La referencia al objeto remoto que el cliente conserva es una instancia de un objeto Stub; por ejemplo, _Sample_Stub.
La utilización de ORB.resolve_initial_references() causa mucha actividad del sistema. El ORB empieza creando una comunicación remota con el servidor de nombres. Esta comunicación puede incluir varias solicitudes y respuestas. Normalmente, el ORB del cliente primero comprueba si un servidor de nombres está escuchando. A continuación, el ORB del cliente solicita la referencia remota especificada. En una aplicación en la que el rendimiento es importante, almacenar en memoria caché la referencia remota es una alternativa mejor que utilizar de forma reiterada el servicio de nombres. Sin embargo, como la implementación del servicio de nombres es de tipo transitorio, la validez de la referencia almacenada en memoria caché está limitada a la hora a la que se ejecuta el servicio de nombres.
corbaloc:iiop:1.0@aserver.aworld.aorg:1050/AServiceEn este ejemplo, el ORB de cliente utiliza GIOP 1.0 para enviar una solicitud con una clave de objeto simple de AService al puerto 1050 en el host aserver.aworld.aorg. Allí, el ORB del cliente espera encontrar un servidor para el Aservice solicitado. El servidor responde devolviendo una referencia a sí mismo. A continuación, puede utilizar esta referencia para buscar el objeto remoto.
Este servicio de nombres es transitorio. Significa que la validez de la referencia contenida caduca cuando el servicio de nombres o el servidor del objeto remoto se detienen.