orbinitinfoimpl.java
来自「java jdk 1.4的源码」· Java 代码 · 共 325 行
JAVA
325 行
/* * @(#)ORBInitInfoImpl.java 1.23 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.corba.se.internal.Interceptors;import org.omg.PortableInterceptor.ORBInitInfo;import org.omg.IOP.CodecFactory;import org.omg.PortableInterceptor.ClientRequestInterceptor;import org.omg.PortableInterceptor.IORInterceptor;import org.omg.PortableInterceptor.PolicyFactory;import org.omg.PortableInterceptor.ServerRequestInterceptor;import org.omg.PortableInterceptor.ORBInitInfoPackage.DuplicateName;import org.omg.PortableInterceptor.ORBInitInfoPackage.InvalidName;import org.omg.CORBA.BAD_PARAM;import org.omg.CORBA.BAD_INV_ORDER;import org.omg.CORBA.CompletionStatus;import org.omg.CORBA.NO_IMPLEMENT;import org.omg.CORBA.OBJECT_NOT_EXIST;import org.omg.CORBA.ORB;import org.omg.CORBA.LocalObject;import org.omg.CORBA.portable.Delegate;import org.omg.CORBA.portable.ObjectImpl;import com.sun.corba.se.internal.core.ClientSubcontract;import com.sun.corba.se.internal.core.IOR;/** * ORBInitInfoImpl is the implementation of the ORBInitInfo class to be * passed to ORBInitializers, as described in orbos/99-12-02. */public final class ORBInitInfoImpl extends org.omg.CORBA.LocalObject implements ORBInitInfo{ // The ORB we are initializing private PIORB orb; // The arguments passed to ORB_init private String[] args; // The ID of the ORB being initialized private String orbId; // The CodecFactory private CodecFactory codecFactory; // The current stage of initialization private int stage = STAGE_PRE_INIT; // The pre-initialization stage (pre_init() being called) public static final int STAGE_PRE_INIT = 0; // The post-initialization stage (post_init() being called) public static final int STAGE_POST_INIT = 1; // Reject all calls - this object should no longer be around. public static final int STAGE_CLOSED = 2; // The description for the OBJECT_NOT_EXIST exception in STAGE_CLOSED private static final String MESSAGE_ORBINITINFO_INVALID = "ORBInitInfo object is only valid during ORB_init"; /** * Creates a new ORBInitInfoImpl object (scoped to package) * * @param args The arguments passed to ORB_init. */ ORBInitInfoImpl( PIORB orb, String[] args, String orbId, CodecFactory codecFactory ) { this.orb = orb; this.args = args; this.orbId = orbId; this.codecFactory = codecFactory; } /** * Sets the current stage we are in. This limits access to certain * functionality. */ void setStage( int stage ) { this.stage = stage; } /** * Throws an exception if the current stage is STAGE_CLOSED. * This is called before any method is invoked to ensure that * no method invocations are attempted after all calls to post_init() * are completed. */ private void checkStage() { if( stage == STAGE_CLOSED ) { throw new OBJECT_NOT_EXIST( MESSAGE_ORBINITINFO_INVALID ); } } /* ******************************************************************* * The following are implementations of the ORBInitInfo operations. *******************************************************************/ /** * This attribute contains the arguments passed to ORB_init. They may * or may not contain the ORB's arguments */ public String[] arguments () { checkStage(); return args; } /** * This attribute is the ID of the ORB being initialized */ public String orb_id () { checkStage(); return orbId; } /** * This attribute is the IOP::CodecFactory. The CodecFactory is normally * obtained via a call to ORB::resolve_initial_references( "CodecFactory" ) * but since the ORB is not yet available and Interceptors, particularly * when processing service contexts, will require a Codec, a means of * obtaining a Codec is necessary during ORB intialization. */ public CodecFactory codec_factory () { checkStage(); return codecFactory; } /** * See orbos/99-12-02, Chapter 11, Dynamic Initial References on page * 11-81. This operation is identical to ORB::register_initial_reference * described there. This same functionality exists here because the ORB, * not yet fully initialized, is not yet available but initial references * may need to be registered as part of Interceptor registration. * <p> * This method may not be called during post_init. */ public void register_initial_reference( String id, org.omg.CORBA.Object obj ) throws InvalidName { checkStage(); if( id == null ) nullParam(); // As per ptc/00-08-06, if null is passed as the obj parameter, // throw BAD_PARAM with minor code MinorCodes.RIR_WITH_NULL_OBJECT. // Though the spec is talking about IDL null, we will address both // Java null and IDL null: // Note: Local Objects can never be nil! boolean isNil = false; if( obj == null ) { isNil = true; } else if( obj instanceof ObjectImpl ) { Delegate delegate = ((ObjectImpl)obj)._get_delegate(); ClientSubcontract csub = (ClientSubcontract)delegate; IOR ior = csub.marshal(); isNil = ior.is_nil(); } if( isNil ) { throw new BAD_PARAM( "register_initial_reference called with nil Object.", MinorCodes.RIR_WITH_NULL_OBJECT, CompletionStatus.COMPLETED_NO ); } // Delegate to ORB. If ORB version throws InvalidName, convert to // equivalent Portable Interceptors InvalidName. try { orb.register_initial_reference( id, obj ); } catch( org.omg.CORBA.ORBPackage.InvalidName e ) { throw new InvalidName( e.getMessage() ); } } /** * This operation is only valid during post_init. It is identical to * ORB::resolve_initial_references. This same functionality exists here * because the ORB, not yet fully initialized, is not yet available, * but initial references may be required from the ORB as part * of Interceptor registration. * <p> * (incorporates changes from errata in orbos/00-01-01) * <p> * This method may not be called during pre_init. */ public org.omg.CORBA.Object resolve_initial_references (String id) throws InvalidName { checkStage(); if( id == null ) nullParam(); if( stage == STAGE_PRE_INIT ) { // Initializer is not allowed to invoke this method during // this stage. // _REVISIT_ Spec issue: What exception should really be // thrown here? throw new BAD_INV_ORDER( "Resolve Initial References cannot be called in pre_init", MinorCodes.RIR_INVALID_PRE_INIT, CompletionStatus.COMPLETED_NO ); } org.omg.CORBA.Object objRef = null; try { objRef = orb.resolve_initial_references( id ); } catch( org.omg.CORBA.ORBPackage.InvalidName e ) { // Convert PIDL to IDL exception: throw new InvalidName(); } return objRef; } /** * This operation is used to add a client-side request Interceptor to * the list of client-side request Interceptors. * <p> * If a client-side request Interceptor has already been registered * with this Interceptor's name, DuplicateName is raised. */ public void add_client_request_interceptor ( ClientRequestInterceptor interceptor) throws DuplicateName { checkStage(); if( interceptor == null ) nullParam(); orb.register_interceptor( interceptor, InterceptorList.INTERCEPTOR_TYPE_CLIENT ); } /** * This operation is used to add a server-side request Interceptor to * the list of server-side request Interceptors. * <p> * If a server-side request Interceptor has already been registered * with this Interceptor's name, DuplicateName is raised. */ public void add_server_request_interceptor ( ServerRequestInterceptor interceptor) throws DuplicateName { checkStage(); if( interceptor == null ) nullParam(); orb.register_interceptor( interceptor, InterceptorList.INTERCEPTOR_TYPE_SERVER ); } /** * This operation is used to add an IOR Interceptor to * the list of IOR Interceptors. * <p> * If an IOR Interceptor has already been registered * with this Interceptor's name, DuplicateName is raised. */ public void add_ior_interceptor ( IORInterceptor interceptor ) throws DuplicateName { checkStage(); if( interceptor == null ) nullParam(); orb.register_interceptor( interceptor, InterceptorList.INTERCEPTOR_TYPE_IOR ); } /** * A service calls allocate_slot_id to allocate a slot on * PortableInterceptor::Current. * * @return The index to the slot which has been allocated. */ public int allocate_slot_id () { checkStage(); return orb.getPICurrent().allocateSlotId( ); } /** * Register a PolicyFactory for the given PolicyType. * <p> * If a PolicyFactory already exists for the given PolicyType, * BAD_INV_ORDER is raised with a minor code of TBD_BIO+2. */ public void register_policy_factory( int type, PolicyFactory policy_factory ) { checkStage(); if( policy_factory == null ) nullParam(); orb.registerPolicyFactory( type, policy_factory ); } /** * Called when an invalid null parameter was passed. Throws a * BAD_PARAM with a minor code of 1 */ private void nullParam() throws BAD_PARAM { throw new BAD_PARAM( com.sun.corba.se.internal.orbutil.MinorCodes.NULL_PARAM, CompletionStatus.COMPLETED_NO ); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?