- /*
- * @(#)StubConnectImpl.java 1.3 04/07/27
- *
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- */
-
- package com.sun.corba.se.impl.presentation.rmi ;
-
- import java.rmi.RemoteException;
-
- import javax.rmi.CORBA.Tie;
-
- import org.omg.CORBA.ORB;
- import org.omg.CORBA.SystemException;
- import org.omg.CORBA.BAD_OPERATION;
- import org.omg.CORBA.BAD_INV_ORDER;
-
- import org.omg.CORBA.portable.ObjectImpl;
- import org.omg.CORBA.portable.Delegate;
-
- import com.sun.corba.se.spi.presentation.rmi.StubAdapter;
-
- import com.sun.corba.se.spi.logging.CORBALogDomains ;
-
- import com.sun.corba.se.impl.util.Utility;
-
- import com.sun.corba.se.impl.ior.StubIORImpl ;
-
- import com.sun.corba.se.impl.logging.UtilSystemException ;
-
- import com.sun.corba.se.impl.corba.CORBAObjectImpl ;
-
- public abstract class StubConnectImpl
- {
- static UtilSystemException wrapper = UtilSystemException.get(
- CORBALogDomains.RMIIIOP ) ;
-
- /** Connect the stub to the orb if necessary.
- * @param ior The StubIORImpl for this stub (may be null)
- * @param proxy The externally visible stub seen by the user (may be the same as stub)
- * @param stub The stub implementation that extends ObjectImpl
- * @param orb The ORB to which we connect the stub.
- */
- public static StubIORImpl connect( StubIORImpl ior, org.omg.CORBA.Object proxy,
- org.omg.CORBA.portable.ObjectImpl stub, ORB orb ) throws RemoteException
- {
- Delegate del = null ;
-
- try {
- try {
- del = StubAdapter.getDelegate( stub );
-
- if (del.orb(stub) != orb)
- throw wrapper.connectWrongOrb() ;
- } catch (org.omg.CORBA.BAD_OPERATION err) {
- if (ior == null) {
- // No IOR, can we get a Tie for this stub?
- Tie tie = (javax.rmi.CORBA.Tie) Utility.getAndForgetTie(proxy);
- if (tie == null)
- throw wrapper.connectNoTie() ;
-
- // Is the tie already connected? If it is, check that it's
- // connected to the same ORB, otherwise connect it.
- ORB existingOrb = orb ;
- try {
- existingOrb = tie.orb();
- } catch (BAD_OPERATION exc) {
- // Thrown when tie is an ObjectImpl and its delegate is not set.
- tie.orb(orb);
- } catch (BAD_INV_ORDER exc) {
- // Thrown when tie is a Servant and its delegate is not set.
- tie.orb(orb);
- }
-
- if (existingOrb != orb)
- throw wrapper.connectTieWrongOrb() ;
-
- // Get the delegate for the stub from the tie.
- del = StubAdapter.getDelegate( tie ) ;
- ObjectImpl objref = new CORBAObjectImpl() ;
- objref._set_delegate( del ) ;
- ior = new StubIORImpl( objref ) ;
- } else {
- // ior is initialized, so convert ior to an object, extract
- // the delegate, and set it on ourself
- del = ior.getDelegate( orb ) ;
- }
-
- StubAdapter.setDelegate( stub, del ) ;
- }
- } catch (SystemException exc) {
- throw new RemoteException("CORBA SystemException", exc );
- }
-
- return ior ;
- }
- }