/* * Copyright 2003-2004 Sun Microsystems, Inc. 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. Sun designates this * particular file as subject to the "Classpath" exception as provided * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ package com.sun.corba.se.spi.presentation.rmi ; import java.util.Map ; import java.lang.reflect.Method ; import java.lang.reflect.InvocationHandler ; import javax.rmi.CORBA.Tie ; import com.sun.corba.se.spi.orb.ORB ; import com.sun.corba.se.spi.orbutil.proxy.InvocationHandlerFactory ; /** Provides access to RMI-IIOP stubs and ties. * Any style of stub and tie generation may be used. * This includes compiler generated stubs and runtime generated stubs * as well as compiled and reflective ties. There is normally * only one instance of this interface per VM. The instance * is obtained from the static method * com.sun.corba.se.spi.orb.ORB.getPresentationManager. * <p> * Note that * the getClassData and getDynamicMethodMarshaller methods * maintain caches to avoid redundant computation. */ public interface PresentationManager { /** Creates StubFactory and Tie instances. */ public interface StubFactoryFactory { /** Return the standard name of a stub (according to the RMI-IIOP specification * and rmic). This is needed so that the name of a stub is known for * standalone clients of the app server. */ String getStubName( String className ) ; /** Create a stub factory for stubs for the interface whose type is given by * className. className may identify either an IDL interface or an RMI-IIOP * interface. * @param className The name of the remote interface as a Java class name. * @param isIDLStub True if className identifies an IDL stub, else false. * @param remoteCodeBase The CodeBase to use for loading Stub classes, if * necessary (may be null or unused). * @param expectedClass The expected stub type (may be null or unused). * @param classLoader The classLoader to use (may be null). */ PresentationManager.StubFactory createStubFactory( String className, boolean isIDLStub, String remoteCodeBase, Class expectedClass, ClassLoader classLoader); /** Return a Tie for the given class. */ Tie getTie( Class cls ) ; /** Return whether or not this StubFactoryFactory creates StubFactory * instances that create dynamic stubs and ties. At the top level, * true indicates that rmic -iiop is not needed for generating stubs * or ties. */ boolean createsDynamicStubs() ; } /** Creates the actual stub needed for RMI-IIOP remote * references. */ public interface StubFactory { /** Create a new dynamic stub. It has the type that was * used to create this factory. */ org.omg.CORBA.Object makeStub() ; /** Return the repository ID information for all Stubs * created by this stub factory. */ String[] getTypeIds() ; } public interface ClassData { /** Get the class used to create this ClassData instance */ Class getMyClass() ; /** Get the IDLNameTranslator for the class used to create * this ClassData instance. */ IDLNameTranslator getIDLNameTranslator() ; /** Return the array of repository IDs for all of the remote * interfaces implemented by this class. */ String[] getTypeIds() ; /** Get the InvocationHandlerFactory that is used to create * an InvocationHandler for dynamic stubs of the type of the * ClassData. */ InvocationHandlerFactory getInvocationHandlerFactory() ; /** Get the dictionary for this ClassData instance. * This is used to hold class-specific information for a Class * in the class data. This avoids the need to create other * caches for accessing the information. */ Map getDictionary() ; } /** Get the ClassData for a particular class. * This class may be an implementation class, in which * case the IDLNameTranslator handles all Remote interfaces implemented by * the class. If the class implements more than one remote interface, and not * all of the remote interfaces are related by inheritance, then the type * IDs have the implementation class as element 0. */ ClassData getClassData( Class cls ) ; /** Given a particular method, return a DynamicMethodMarshaller * for that method. This is used for dynamic stubs and ties. */ DynamicMethodMarshaller getDynamicMethodMarshaller( Method method ) ; /** Return the registered StubFactoryFactory. */ StubFactoryFactory getStubFactoryFactory( boolean isDynamic ) ; /** Register the StubFactoryFactory. Note that * a static StubFactoryFactory is always required for IDL. The * dynamic stubFactoryFactory is optional. */ void setStubFactoryFactory( boolean isDynamic, StubFactoryFactory sff ) ; /** Equivalent to getStubFactoryFactory( true ).getTie( null ). * Provided for compatibility with earlier versions of PresentationManager * as used in the app server. The class argument is ignored in * the dynamic case, so this is safe. */ Tie getTie() ; /** Returns the value of the com.sun.CORBA.ORBUseDynamicStub * property. */ boolean useDynamicStubs() ; }