Connexion des stubs IIOP à l'ORB

Lorsque l'application utilise des stubs IIOP et non pas JRMP, vous devez connecter correctement les stubs IIOP à l'ORB avant de démarrer les stubs IIOP (nécessaires avec les stubs JRMP). Cette section porte sur l'étape 'connect' nécessaire aux stubs IIOP.

PortableRemoteObject.exportObject() appelle uniquement un objet Tie et le place en cache pour une utilisation ultérieure. Le lien créé n'a pas de délégué ni un ORB associé. Cet appel est un appel explicite.

PortableRemoteObject.exportObject() est exécuté automatiquement lorsque l'instance de est créée. Elle est créée lorsqu'un constructeur PortableRemoteObject est appelé comme classe de base. Cet appel est un appel implicite.

Ensuite, l'application appelle PortableRemoteObject.toStub() et l'ORB crée l'objet Stub correspondant et l'associe à l'objet Tie en cache. Mais comme le Tie n'est pas connecté et qu'il n'a pas de délégué, le Stub nouvellement créé n'a pas non plus de délégué ni d'ORB.

Le délégué est défini pour le stub uniquement lorsque l'application appelle Stub.connect(orb). Ainsi, les opérations sur le stub effectuées avant la connexion ORB échouent.

La spécification Java™ Language to OMG IDL Mapping (https://www.omg.org/cgi-bin/doc?formal/01-06-07) parle de la méthode Stub.connect() :

"La méthode de connexion prépare le stub pour les communications distantes en utilisant l'orb de l'objet ORB. La connexion a lieu normalement implicitement lorsque le stub est reçu ou envoyé comme argument dans un appel de méthode distante, mais il est parfois utile de procéder ainsi en exécutant un appel explicite (par exemple, à la suite de la désérialisation). Si le stub est déjà connecté à l'objet orb (a un délégué défini pour orb), la méthode de connexion n'exécute aucune action. Si le stub est connecté à un autre ORB, une exception RemoteException est émise. Autrement, un délégué est créé pour le stub et l'orb de l'objet ORB."

Pour les servants qui ne sont pas activés par POA, Stub.connect(orb) est nécessaire.