/* * @(#)DynamicStubImpl.java 1.5 04/06/21 * * 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.io.ObjectInputStream ; import java.io.ObjectOutputStream ; import java.io.IOException ; import java.io.Serializable ; import java.rmi.RemoteException ; import javax.rmi.CORBA.Tie ; import org.omg.CORBA_2_3.portable.ObjectImpl ; import org.omg.CORBA.portable.Delegate ; import org.omg.CORBA.portable.OutputStream ; import org.omg.CORBA.SystemException ; import org.omg.CORBA.ORB ; import com.sun.corba.se.spi.orbutil.proxy.InvocationHandlerFactory ; import com.sun.corba.se.spi.presentation.rmi.PresentationManager ; import com.sun.corba.se.spi.presentation.rmi.StubAdapter ; import com.sun.corba.se.spi.presentation.rmi.DynamicStub ; import com.sun.corba.se.impl.presentation.rmi.StubConnectImpl ; import com.sun.corba.se.spi.logging.CORBALogDomains ; import com.sun.corba.se.impl.logging.UtilSystemException ; import com.sun.corba.se.impl.ior.StubIORImpl ; import com.sun.corba.se.impl.util.RepositoryId ; import com.sun.corba.se.impl.util.JDKBridge ; import com.sun.corba.se.impl.util.Utility ; // XXX Do we need _get_codebase? public class DynamicStubImpl extends ObjectImpl implements DynamicStub, Serializable { private static final long serialVersionUID = 4852612040012087675L; private String[] typeIds ; private StubIORImpl ior ; private DynamicStub self = null ; // The actual DynamicProxy for this stub. public void setSelf( DynamicStub self ) { // XXX Should probably only allow this once. this.self = self ; } public DynamicStub getSelf() { return self ; } public DynamicStubImpl( String[] typeIds ) { this.typeIds = typeIds ; ior = null ; } public void setDelegate( Delegate delegate ) { _set_delegate( delegate ) ; } public Delegate getDelegate() { return _get_delegate() ; } public ORB getORB() { return (ORB)_orb() ; } public String[] _ids() { return typeIds ; } public String[] getTypeIds() { return _ids() ; } public void connect( ORB orb ) throws RemoteException { ior = StubConnectImpl.connect( ior, self, this, orb ) ; } public boolean isLocal() { return _is_local() ; } public OutputStream request( String operation, boolean responseExpected ) { return _request( operation, responseExpected ) ; } private void readObject( ObjectInputStream stream ) throws IOException, ClassNotFoundException { ior = new StubIORImpl() ; ior.doRead( stream ) ; } private void writeObject( ObjectOutputStream stream ) throws IOException { if (ior == null) ior = new StubIORImpl( this ) ; ior.doWrite( stream ) ; } public Object readResolve() { String repositoryId = ior.getRepositoryId() ; String cname = RepositoryId.cache.getId( repositoryId ).getClassName() ; Class cls = null ; try { cls = JDKBridge.loadClass( cname, null, null ) ; } catch (ClassNotFoundException exc) { // XXX log this } PresentationManager pm = com.sun.corba.se.spi.orb.ORB.getPresentationManager() ; PresentationManager.ClassData classData = pm.getClassData( cls ) ; InvocationHandlerFactoryImpl ihfactory = (InvocationHandlerFactoryImpl)classData.getInvocationHandlerFactory() ; return ihfactory.getInvocationHandler( this ) ; } }