/*
* 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 org.jboss.com.sun.corba.se.spi.presentation.rmi;
import java.lang.reflect.Method;
import java.util.Map;
import javax.rmi.CORBA.Tie;
import org.jboss.com.sun.corba.se.spi.orbutil.proxy.InvocationHandlerFactory;
import org.jboss.com.sun.corba.se.spi.presentation.rmi.DynamicMethodMarshaller;
import org.jboss.com.sun.corba.se.spi.presentation.rmi.IDLNameTranslator;
/**
* 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
* org.jboss.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<Object,Object> 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 org.jboss.com.sun.CORBA.ORBUseDynamicStub property.
*/
boolean useDynamicStubs();
}