serverresponseimpl.java
来自「java jdk 1.4的源码」· Java 代码 · 共 184 行
JAVA
184 行
/* * @(#)ServerResponseImpl.java 1.41 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.iiop;import org.omg.CORBA.SystemException;import com.sun.corba.se.internal.core.ServerResponse;import com.sun.corba.se.internal.core.ServerRequest;import com.sun.corba.se.internal.core.IOR;import com.sun.corba.se.internal.core.ServiceContext;import com.sun.corba.se.internal.core.ServiceContexts;import com.sun.corba.se.internal.iiop.messages.MessageBase;import com.sun.corba.se.internal.iiop.messages.ReplyMessage;import com.sun.corba.se.internal.POA.POAImpl; // REVISIT - remove laterimport com.sun.corba.se.internal.POA.POAORB; // REVISIT - remove laterpublic class ServerResponseImpl extends IIOPOutputStream implements ServerResponse{ protected ServerResponseImpl(ServerRequestImpl request, ServiceContexts svc) { this(request, MessageBase.createReply( (com.sun.corba.se.internal.iiop.ORB) request.orb(), request.getGIOPVersion(), request.getRequestId(), ReplyMessage.NO_EXCEPTION, svc, null), null); } protected ServerResponseImpl(ServerRequestImpl request, ServiceContexts svc, boolean user) { this(request, MessageBase.createReply( (com.sun.corba.se.internal.iiop.ORB) request.orb(), request.getGIOPVersion(), request.getRequestId(), user ? ReplyMessage.USER_EXCEPTION : ReplyMessage.SYSTEM_EXCEPTION, svc, null), null); } protected ServerResponseImpl(ServerRequestImpl request, ReplyMessage reply, IOR ior) { super( request.getGIOPVersion(), request.getConnection().getORB(), request.getConnection()); setMessage(reply); ORB orb = (ORB)request.getConnection().getORB(); runServantPostInvoke(orb, request); if( request.executePIInResponseConstructor() ) { // Invoke server request ending interception points (send_*): // Note: this may end up with a SystemException or an internal // Runtime ForwardRequest orb.invokeServerPIEndingPoint( reply ); // Note this will be executed even if a ForwardRequest or // SystemException is thrown by a Portable Interceptors ending // point since we end up in this constructor again anyway. orb.cleanupServerPIRequest(); // See (Local)ServerRequestImpl.createSystemExceptionResponse // for why this is necesary. request.setExecutePIInResponseConstructor(false); } // Once you get here then the final reply is available (i.e., // postinvoke and interceptors have completed. if (request.executeRemoveThreadInfoInResponseConstructor()) { removeThreadInfo(orb, request); } reply.write(this); if (reply.getIOR() != null) { reply.getIOR().write(this); } this.reply = reply; this.ior = reply.getIOR(); } public boolean isSystemException() { if (reply != null) return reply.getReplyStatus() == ReplyMessage.SYSTEM_EXCEPTION; return false; } public boolean isUserException() { if (reply != null) return reply.getReplyStatus() == ReplyMessage.USER_EXCEPTION; return false; } public boolean isLocationForward() { if (ior != null) return true; return false; } public IOR getForwardedIOR() { return ior; } public int getRequestId() { if (reply != null) return reply.getRequestId(); return -1; } public ServiceContexts getServiceContexts() { if (reply != null) return reply.getServiceContexts(); return null; } public SystemException getSystemException() { if (reply != null) return reply.getSystemException(); return null; } /** * Check to see if response is local. */ public boolean isLocal(){ return false; } static void runServantPostInvoke(ORB orb, ServerRequest request) { // Run ServantLocator::postinvoke. This may cause a SystemException // which will throw out of the constructor and return later // to construct a reply for that exception. The internal logic // of returnServant makes sure that postinvoke is only called once. // REVISIT: instead of instanceof, put method on all orbs. POAORB poaorb = null; // This flag is to deal with BootstrapServer use of reply streams, // with ServerDelegate's use of reply streams when a POA ORB is // present, etc. if (request.executeReturnServantInResponseConstructor()) { // It is possible to get marshaling errors in the skeleton after // postinvoke has completed. We must set this to false so that // when the error exception reply is constructed we don't try // to incorrectly access poa current (which will be the wrong // one or an empty stack. request.setExecuteReturnServantInResponseConstructor(false); request.setExecuteRemoveThreadInfoInResponseConstructor(true); if (orb instanceof POAORB) { poaorb = (POAORB) orb; POAImpl poaimpl = poaorb.getCurrent().getPOA(); // REVISIT: is synchronization necessary still? synchronized (poaimpl) { poaimpl.returnServant(); } } } } static void removeThreadInfo(ORB orb, ServerRequest request) { request.setExecuteRemoveThreadInfoInResponseConstructor(false); POAORB poaorb = (POAORB)orb; POAImpl poaimpl = poaorb.getCurrent().getPOA(); // REVISIT: is synchronization necessary still? synchronized (poaimpl) { poaimpl.removeThreadInfo(); } } private ReplyMessage reply; private IOR ior; // forwarded IOR}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?