Obtención del objeto remoto

Existen varios métodos mediante los cuales el cliente puede obtener una referencia para el objeto remoto.

Normalmente, esta referencia es una serie denominada IOR (Interoperable Object Reference). Por ejemplo:
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.

No hace falta que el intermediario de solicitudes de objetos (ORB) del cliente comprenda los detalles del IOR. IOR se utiliza como referencia al objeto remoto, como una clave. Sin embargo, cuando el cliente y el servidor utilizan un ORB de IBM® , se codifican características adicionales en la IOR. Por ejemplo, el ORB de IBM añade un campo propietario a la IOR, denominado IBM_PARTNER_VERSION. Este campo conserva un valor como el del ejemplo siguiente:
49424d0a 00000008 00000000 1400 0005
En el ejemplo:
  • 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 0x0005 y 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.
El paso final se denomina proceso de arranque. Este paso es donde la aplicación cliente indica al ORB dónde se encuentra la referencia de objeto remoto. Este paso es necesario por dos motivos:
  • 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.

El ORB de IBM implementa un servicio de denominación interoperable tal como se describe en la especificación 2.3 de CORBA. Este servicio incluye un nuevo formato de serie que se puede transferir como un parámetro a los métodos del ORB string_to_object() y resolve_initial_references(). Los métodos se llaman con un parámetro de serie que tiene el formato corbaloc (o corbaname). Por ejemplo:
corbaloc:iiop:1.0@aserver.aworld.aorg:1050/AService

En 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.