/* * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ 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 ) ; } }