⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iorinfoimpl.java

📁 java1.6众多例子参考
💻 JAVA
字号:
/* * @(#)IORInfoImpl.java	1.24 05/11/17 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.corba.se.impl.interceptors;import java.util.Iterator ;import org.omg.IOP.TaggedComponent;import org.omg.CORBA.BAD_INV_ORDER;import org.omg.CORBA.BAD_PARAM;import org.omg.CORBA.INTERNAL;import org.omg.CORBA.CompletionStatus;import org.omg.CORBA.INV_POLICY;import org.omg.CORBA.NO_IMPLEMENT;import org.omg.CORBA.Policy;import org.omg.CORBA.LocalObject;import org.omg.PortableInterceptor.IORInfo;import org.omg.PortableInterceptor.ObjectReferenceTemplate;import org.omg.PortableInterceptor.ObjectReferenceFactory;import com.sun.corba.se.spi.orb.ORB ;import com.sun.corba.se.spi.oa.ObjectAdapter;import com.sun.corba.se.spi.legacy.interceptor.IORInfoExt;import com.sun.corba.se.spi.legacy.interceptor.UnknownType;import com.sun.corba.se.spi.ior.IORTemplate;import com.sun.corba.se.spi.ior.TaggedProfileTemplate;import com.sun.corba.se.spi.ior.TaggedComponentFactoryFinder ;import com.sun.corba.se.spi.logging.CORBALogDomains ;import com.sun.corba.se.impl.logging.InterceptorsSystemException ;import com.sun.corba.se.impl.logging.OMGSystemException ;import com.sun.corba.se.impl.logging.ORBUtilSystemException ;/** * IORInfoImpl is the implementation of the IORInfo class, as described * in orbos/99-12-02, section 7.   */public final class IORInfoImpl     extends LocalObject     implements IORInfo, IORInfoExt{    // State values that determine which methods are allowed.    // get_effective_policy, manager_id, and adapter_state are valid unless STATE_DONE    // add_component, and add_component_to_profile are valid.    private static final int STATE_INITIAL = 0 ;     // adapter_template, and R/W to current_factory are valid    private static final int STATE_ESTABLISHED = 1 ;     // No methods are valid in this state    private static final int STATE_DONE = 2 ;     // The current state of this object    private int state = STATE_INITIAL ;    // The ObjectAdapter associated with this IORInfo object.    private ObjectAdapter adapter;    private ORB orb ;    private ORBUtilSystemException orbutilWrapper ;    private InterceptorsSystemException wrapper ;    private OMGSystemException omgWrapper ;    /**     * Creates a new IORInfo implementation.  This info object will establish     * tagged components with the template for the provided IOR Template.     */    IORInfoImpl( ObjectAdapter adapter ) {        this.orb = adapter.getORB() ;	orbutilWrapper = ORBUtilSystemException.get( orb,	    CORBALogDomains.RPC_PROTOCOL ) ;	wrapper = InterceptorsSystemException.get( orb,	    CORBALogDomains.RPC_PROTOCOL ) ;	omgWrapper = OMGSystemException.get( orb,	    CORBALogDomains.RPC_PROTOCOL ) ;	this.adapter = adapter;    }    /**     * An ORB service implementation may determine what server side policy      * of a particular type is in effect for an IOR being constructed by      * calling the get_effective_policy operation.  When the IOR being      * constructed is for an object implemented using a POA, all Policy      * objects passed to the PortableServer::POA::create_POA call that      * created that POA are accessible via get_effective_policy.     * <p>     * If a policy for the given type is not known to the ORB, then this      * operation will raise INV_POLICY with a standard minor code of 2.     *     * @param type The CORBA::PolicyType specifying the type of policy to      *   return.     * @return The effective CORBA::Policy object of the requested type.     *   If the given policy type is known, but no policy of that tpye is      *   in effect, then this operation will return a nil object reference.     */    public Policy get_effective_policy (int type) {	checkState( STATE_INITIAL, STATE_ESTABLISHED ) ;	return adapter.getEffectivePolicy( type );    }    /**     * A portable ORB service implementation calls this method from its      * implementation of establish_components to add a tagged component to      * the set which will be included when constructing IORs.  The      * components in this set will be included in all profiles.     * <p>     * Any number of components may exist with the same component ID.     *     * @param tagged_component The IOP::TaggedComponent to add     */    public void add_ior_component (TaggedComponent tagged_component) {	checkState( STATE_INITIAL ) ;	if( tagged_component == null ) nullParam();        addIORComponentToProfileInternal( tagged_component, 					  adapter.getIORTemplate().iterator());    }    /**     * A portable ORB service implementation calls this method from its      * implementation of establish_components to add a tagged component to      * the set which will be included when constructing IORs.  The      * components in this set will be included in the specified profile.     * <p>     * Any number of components may exist with the same component ID.     * <p>     * If the given profile ID does not define a known profile or it is      * impossible to add components to thgat profile, BAD_PARAM is raised      * with a minor code of TBD_BP + 3.     *     * @param tagged_component The IOP::TaggedComponent to add.     * @param profile_id The IOP::ProfileId tof the profile to which this      *     component will be added.     */    public void add_ior_component_to_profile (         TaggedComponent tagged_component, int profile_id )     {	checkState( STATE_INITIAL ) ;	if( tagged_component == null ) nullParam();        addIORComponentToProfileInternal( 	    tagged_component, adapter.getIORTemplate().iteratorById( 	    profile_id ) );    }    /**     * @param type The type of the server port     *     (see connection.ORBSocketFactory for discussion).     * @return The listen port number for that type.     * @throws UnknownType if no port of the given type is found.     */    public int getServerPort(String type)	throws UnknownType    {	checkState( STATE_INITIAL, STATE_ESTABLISHED ) ;	int port =	    orb.getLegacyServerSocketManager()	        .legacyGetTransientOrPersistentServerPort(type);	if (port == -1) {	    throw new UnknownType();	}	return port;    }    public ObjectAdapter getObjectAdapter()    {	return adapter;    }        public int manager_id()    {	checkState( STATE_INITIAL, STATE_ESTABLISHED) ;	return adapter.getManagerId() ;    }    public short state()    {	checkState( STATE_INITIAL, STATE_ESTABLISHED) ;	return adapter.getState() ;    }    public ObjectReferenceTemplate adapter_template()     {	checkState( STATE_ESTABLISHED) ;	// At this point, the iortemp must contain only a single	// IIOPProfileTemplate.  This is a restriction of our	// implementation.  Also, note the the ObjectReferenceTemplate	// is called when a certain POA is created in a certain ORB	// in a certain server, so the server_id, orb_id, and 	// poa_id operations must be well-defined no matter what	// kind of implementation is used: e.g., if a POA creates	// IORs with multiple profiles, they must still all agree	// about this information.  Thus, we are justified in	// extracting the single IIOPProfileTemplate to create 	// an ObjectReferenceTemplate here.	return adapter.getAdapterTemplate() ;    }    public ObjectReferenceFactory current_factory()     {	checkState( STATE_ESTABLISHED) ;	return adapter.getCurrentFactory() ;    }    public void current_factory( ObjectReferenceFactory factory )    {	checkState( STATE_ESTABLISHED) ;	adapter.setCurrentFactory( factory ) ;    }    /**     * Internal utility method to add an IOR component to the set of profiles     * present in the iterator.     */    private void addIORComponentToProfileInternal(         TaggedComponent tagged_component, Iterator iterator )    {        // Convert the given IOP::TaggedComponent into the appropriate        // type for the TaggedProfileTemplate        TaggedComponentFactoryFinder finder =             orb.getTaggedComponentFactoryFinder();        Object newTaggedComponent = finder.create( orb, tagged_component );                // Iterate through TaggedProfileTemplates and add the given tagged        // component to the appropriate one(s).	boolean found = false;        while( iterator.hasNext() ) {	    found = true;            TaggedProfileTemplate taggedProfileTemplate =                 (TaggedProfileTemplate)iterator.next();	    taggedProfileTemplate.add( newTaggedComponent );        }	// If no profile was found with the given id, throw a BAD_PARAM:	// (See orbos/00-08-06, section 21.5.3.3.)	if( !found ) {	    throw omgWrapper.invalidProfileId() ;	}    }        /**     * Called when an invalid null parameter was passed.  Throws a     * BAD_PARAM with a minor code of 1     */    private void nullParam()     {	throw orbutilWrapper.nullParam() ;    }    // REVISIT: add minor codes!    private void checkState( int expectedState )    {	if (expectedState != state)	    throw wrapper.badState1( new Integer(expectedState), new Integer(state) ) ;    }    private void checkState( int expectedState1, int expectedState2 )    {	if ((expectedState1 != state) && (expectedState2 != state))	    throw wrapper.badState2( new Integer(expectedState1), 		new Integer(expectedState2), new Integer(state) ) ;    }    void makeStateEstablished()    {	checkState( STATE_INITIAL ) ;	state = STATE_ESTABLISHED ;    }    void makeStateDone()    {	checkState( STATE_ESTABLISHED ) ;	state = STATE_DONE ;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -