subcontractresponsehandler.java

来自「java jdk 1.4的源码」· Java 代码 · 共 146 行

JAVA
146
字号
/* * @(#)SubcontractResponseHandler.java	1.20 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ // Mortazavi 99/05/25package com.sun.corba.se.internal.POA;import org.omg.PortableServer.*;import org.omg.CORBA.portable.*;import org.omg.CORBA.INTERNAL ;import com.sun.corba.se.internal.core.ServerRequest;import com.sun.corba.se.internal.core.ServiceContext;import com.sun.corba.se.internal.core.DuplicateServiceContext;import com.sun.corba.se.internal.core.SendingContextServiceContext;import com.sun.corba.se.internal.core.ORBVersionServiceContext;import com.sun.corba.se.internal.core.ORBVersionFactory;import com.sun.corba.se.internal.core.ServiceContexts;import com.sun.corba.se.internal.core.ServerResponse;import com.sun.corba.se.internal.core.MarshalOutputStream;import com.sun.corba.se.internal.iiop.Connection;import com.sun.corba.se.internal.orbutil.ORBUtility;import com.sun.corba.se.internal.ior.ObjectKey ;import com.sun.corba.se.internal.ior.ObjectKeyFactory ;public class SubcontractResponseHandler     implements org.omg.CORBA.portable.ResponseHandler{    private com.sun.corba.se.internal.core.ServerRequest serverRequest;    private org.omg.CORBA.ORB orb;    public 	SubcontractResponseHandler(com.sun.corba.se.internal.core.ServerRequest req, org.omg.CORBA.ORB scOrb)    {	serverRequest = req;	orb = scOrb;    }    public 	org.omg.CORBA.portable.OutputStream 	createReply()     {	return (org.omg.CORBA.portable.OutputStream)            serverRequest.createResponse(					 getServiceContextsForReply(								    serverRequest.getConnection()));    }    public 	org.omg.CORBA.portable.OutputStream 	createExceptionReply()     {	return        	    (org.omg.CORBA.portable.OutputStream)            serverRequest.createUserExceptionResponse(						      getServiceContextsForReply(										 serverRequest.getConnection()));    }    private 	ServiceContexts 	getServiceContextsForReply(Connection c)     {	com.sun.corba.se.internal.corba.ORB theOrb = (com.sun.corba.se.internal.corba.ORB)orb ;	/*	  if (theOrb.subcontractDebugFlag)	  dprint( "getServiceContextsReply called with connection " + c ) ;	*/	ServiceContexts contexts = new ServiceContexts( theOrb )  ;	// NOTE : We only want to send the runtime context the first time	if (c!=null && !c.isPostInitialContexts()) {            /*	      if (theOrb.subcontractDebugFlag)	      dprint( "Adding SendingContextServiceContext" ) ;            */	    c.setPostInitialContexts();	    SendingContextServiceContext scsc = 		new SendingContextServiceContext(theOrb.getServantIOR()) ; //d11638	    try {		contexts.put( scsc ) ;	    } catch (DuplicateServiceContext dsc) {	    }	}        // send ORBVersion servicecontext as part of the Reply        ORBVersionServiceContext ovsc = new ORBVersionServiceContext(                        ORBVersionFactory.getORBVersion());        try {            contexts.put( ovsc ) ;        } catch (DuplicateServiceContext dsc) {	    throw new INTERNAL() ;        }	/*	  if (theOrb.subcontractDebugFlag)	  dprint( "Checking for transaction support" ) ;	*/	com.sun.corba.se.internal.POA.POAORB myorb ; 	try {	    myorb = (com.sun.corba.se.internal.POA.POAORB)orb;	} catch (ClassCastException cce) {	    /*	      if (theOrb.subcontractDebugFlag) 	      dprint( "Non-POA ORB: returning normally" ) ;	    */	    // This is not the POA ORB, so it can't be transactional:	    // just return the current contexts.	    return contexts ;	}	ObjectKey okey = serverRequest.getObjectKey();	int tscid = okey.getTemplate().getSubcontractId() ;	myorb.getServiceSpecificServiceContexts(tscid, serverRequest, contexts);	try {	    ((com.sun.corba.se.internal.POA.POAORB)theOrb).		sendingReplyServiceContexts(contexts);	} catch (Throwable ex) {	    ; //Do not let hook errors escape.	}	/*	  if (theOrb.subcontractDebugFlag)	  dprint( "getServiceContextsReply completed successfuly" ) ;	*/        return contexts;    }    }

⌨️ 快捷键说明

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