FileDocCategorySizeDatePackage
StubConnectImpl.javaAPI DocJava SE 5 API2951Fri Aug 26 14:54:30 BST 2005com.sun.corba.se.impl.presentation.rmi

StubConnectImpl

public abstract class StubConnectImpl extends Object

Fields Summary
static UtilSystemException
wrapper
Constructors Summary
Methods Summary
public static com.sun.corba.se.impl.ior.StubIORImplconnect(com.sun.corba.se.impl.ior.StubIORImpl ior, org.omg.CORBA.Object proxy, org.omg.CORBA.portable.ObjectImpl stub, org.omg.CORBA.ORB orb)
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.


                                                              
            
	       
    
	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 ;