localserverresponseimpl.java
来自「java jdk 1.4的源码」· Java 代码 · 共 172 行
JAVA
172 行
/* * @(#)LocalServerResponseImpl.java 1.29 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.IOR;import com.sun.corba.se.internal.core.ServiceContext;import com.sun.corba.se.internal.core.ServiceContexts;import com.sun.corba.se.internal.core.ClientResponse;import com.sun.corba.se.internal.iiop.messages.MessageBase;import com.sun.corba.se.internal.iiop.messages.ReplyMessage;class LocalServerResponseImpl extends IIOPOutputStream implements ServerResponse{ LocalServerResponseImpl(LocalServerRequestImpl 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); } LocalServerResponseImpl(LocalServerRequestImpl 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); } LocalServerResponseImpl( LocalServerRequestImpl request, ReplyMessage reply, IOR ior) { super(request.getGIOPVersion(), (com.sun.corba.se.internal.iiop.ORB)(request.orb()), null, false); setMessage(reply); ORB orb = (ORB)request.orb(); ServerResponseImpl.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()) { ServerResponseImpl.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; } public ReplyMessage getReply() { return reply ; } public ClientResponse getClientResponse() { // set the size of the marshalled data in the message header getMessage().setSize(getByteBuffer(), getSize()); // Construct a new ClientResponse out of the buffer in this ClientRequest LocalClientResponseImpl result = new LocalClientResponseImpl( (com.sun.corba.se.internal.iiop.ORB) orb(), toByteArray(), reply); // NOTE (Ram J) (06/02/2000) if we set result.setIndex(bodyBegin) here // then the LocalClientResponse does not need to read the headers anymore. // This will be an optimisation which is can be done to speed up the // local invocation by avoiding reading the headers in the local cases. // BUGFIX(Ram Jeyaraman) result.setOffset is now done in // LocalClientResponseImpl constructor. /* // Skip over all of the GIOP header information. This positions // the offset in the buffer so that the skeleton can correctly read // the marshalled arguments. result.setOffset( bodyBegin ) ; */ return result ; } /** * Check to see if the response is local. */ public boolean isLocal(){ return true; } private ReplyMessage reply; private IOR ior; // forwarded IOR}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?