backport: MarshalledObject.java (equals): Check hashcode first.
Merge Orp RMI patches from Wu Gansha <gansha.wu@intel.com> * java/rmi/MarshalledObject.java (equals): Check hashcode first. * java/rmi/server/RMIClassLoader.java (MyClassLoader): Create/Use annotation. (loadClass): Take String as codebases. (getClassAnnotation): Use MyClassLoader annotations. * java/rmi/server/UnicastRemoteObject.java (UnicastRemoteObject): call exportObject(this). * gnu/java/rmi/RMIMarshalledObjectOutputStream.java (RMIMarshalledObjectOutputStream): set locBytesStream and locStream. (setAnnotation): Don't set locBytesStream and locStream. (replaceObject): Removed. (flush): Don't test locStream. (getLocBytes): LikeWise. * gnu/java/rmi/dgc/DGCImpl.java: extends UnicastServerRef. (leaseCache): New field. (dirty): Use leaseCache. (LeaseRecord): New inner class. * gnu/java/rmi/registry/RegistryImpl.java (RegistryImpl): Don't explicitly call exportObject(). * gnu/java/rmi/registry/RegistryImpl_Stub.java: set useNewInvoke to false to communicate with Sun JDK130. * gnu/java/rmi/server/ConnectionRunnerPool.java: Add CPU comment. * gnu/java/rmi/server/RMIObjectInputStream.java (UnicastConnectionManager): Removed field. * gnu/java/rmi/server/RMIObjectOutputStream.java (replaceObject): Use UnicastServer.getExportedRef(). * gnu/java/rmi/server/UnicastConnection.java (reviveTime): New field. (expireTime): Likewise. (CONNECTION_TIMEOUT): Likewise. (disconnect): Call sock.close(). (isExpired): New method. (resetTime): Likewise. (run): Use do while loop and catch Exception for discardConnection(). * gnu/java/rmi/server/UnicastConnectionManager.java: Pool connections. * gnu/java/rmi/server/UnicastRef.java: Lots of changes. * gnu/java/rmi/server/UnicastRemoteCall.java: Lots of changes. * gnu/java/rmi/server/UnicastServer.java (refcache): New field. (exportObject): Use refcache. (unexportObject): Likewise. (getExportedRef): New method. * gnu/java/rmi/server/UnicastServerRef.java (UnicastServerRef): New constructor. (exportObject): Save manager.serverobj. (getStub): New method. From-SVN: r58900
This commit is contained in:
parent
396a80436c
commit
f150fe3fa7
18 changed files with 601 additions and 200 deletions
|
@ -38,14 +38,24 @@ exception statement from your version. */
|
|||
package gnu.java.rmi.server;
|
||||
|
||||
import java.lang.Exception;
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectOutput;
|
||||
import java.io.ObjectInput;
|
||||
import java.io.StreamCorruptedException;
|
||||
import java.rmi.server.RemoteCall;
|
||||
import java.rmi.RemoteException;
|
||||
import java.rmi.MarshalException;
|
||||
import java.rmi.UnmarshalException;
|
||||
import java.rmi.server.UID;
|
||||
import java.rmi.server.ObjID;
|
||||
import java.rmi.server.RemoteObject;
|
||||
|
||||
import java.util.Vector;
|
||||
|
||||
public class UnicastRemoteCall implements RemoteCall
|
||||
public class UnicastRemoteCall
|
||||
implements RemoteCall, ProtocolConstants
|
||||
{
|
||||
|
||||
private UnicastConnection conn;
|
||||
|
@ -56,6 +66,9 @@ public class UnicastRemoteCall implements RemoteCall
|
|||
private Vector vec;
|
||||
private int ptr;
|
||||
|
||||
private ObjectOutput oout;
|
||||
private ObjectInput oin;
|
||||
|
||||
/**
|
||||
* Incoming call.
|
||||
*/
|
||||
|
@ -67,30 +80,71 @@ public class UnicastRemoteCall implements RemoteCall
|
|||
/**
|
||||
* Outgoing call.
|
||||
*/
|
||||
UnicastRemoteCall(Object obj, int opnum, long hash)
|
||||
UnicastRemoteCall(UnicastConnection conn, ObjID objid, int opnum, long hash)
|
||||
throws RemoteException
|
||||
{
|
||||
this.object = obj;
|
||||
this.conn = conn;
|
||||
this.opnum = opnum;
|
||||
this.hash = hash;
|
||||
|
||||
// signal the call when constructing
|
||||
try
|
||||
{
|
||||
DataOutputStream dout = conn.getDataOutputStream();
|
||||
dout.write(MESSAGE_CALL);
|
||||
|
||||
oout = conn.getObjectOutputStream();
|
||||
objid.write(oout);
|
||||
oout.writeInt(opnum);
|
||||
oout.writeLong(hash);
|
||||
}
|
||||
catch(IOException ex)
|
||||
{
|
||||
throw new MarshalException("Try to write header but failed.", ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
UnicastConnection getConnection()
|
||||
{
|
||||
return conn;
|
||||
}
|
||||
|
||||
public ObjectOutput getOutputStream() throws IOException
|
||||
{
|
||||
vec = new Vector();
|
||||
return new DummyObjectOutputStream();
|
||||
if (conn != null)
|
||||
{
|
||||
if(oout == null)
|
||||
return (oout = conn.getObjectOutputStream());
|
||||
else
|
||||
return oout;
|
||||
}
|
||||
else
|
||||
{
|
||||
vec = new Vector();
|
||||
return (new DummyObjectOutputStream());
|
||||
}
|
||||
}
|
||||
|
||||
public void releaseOutputStream() throws IOException
|
||||
{
|
||||
// Does nothing.
|
||||
if(oout != null)
|
||||
oout.flush();
|
||||
}
|
||||
|
||||
public ObjectInput getInputStream() throws IOException
|
||||
{
|
||||
if (conn != null)
|
||||
return conn.getObjectInputStream();
|
||||
ptr = 0;
|
||||
return new DummyObjectInputStream();
|
||||
{
|
||||
if(oin == null)
|
||||
return (oin = conn.getObjectInputStream());
|
||||
else
|
||||
return oin;
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr = 0;
|
||||
return (new DummyObjectInputStream());
|
||||
}
|
||||
}
|
||||
|
||||
public void releaseInputStream() throws IOException
|
||||
|
@ -104,15 +158,57 @@ public class UnicastRemoteCall implements RemoteCall
|
|||
vec = new Vector();
|
||||
return new DummyObjectOutputStream();
|
||||
}
|
||||
|
||||
|
||||
public void executeCall() throws Exception
|
||||
{
|
||||
throw new Error("Not implemented");
|
||||
byte returncode;
|
||||
ObjectInput oin;
|
||||
try
|
||||
{
|
||||
releaseOutputStream();
|
||||
DataInputStream din = conn.getDataInputStream();
|
||||
if (din.readByte() != MESSAGE_CALL_ACK)
|
||||
throw new RemoteException("Call not acked");
|
||||
|
||||
oin = getInputStream();
|
||||
returncode = oin.readByte();
|
||||
UID.read(oin);
|
||||
}
|
||||
catch(IOException ex)
|
||||
{
|
||||
throw new UnmarshalException("Try to read header but failed:", ex);
|
||||
}
|
||||
|
||||
//check return code
|
||||
switch(returncode)
|
||||
{
|
||||
case RETURN_ACK: //it's ok
|
||||
return;
|
||||
case RETURN_NACK:
|
||||
Object returnobj;
|
||||
try
|
||||
{
|
||||
returnobj = oin.readObject();
|
||||
}
|
||||
catch(Exception ex2)
|
||||
{
|
||||
throw new UnmarshalException
|
||||
("Try to read exception object but failed", ex2);
|
||||
}
|
||||
|
||||
if(!(returnobj instanceof Exception))
|
||||
throw new UnmarshalException("Should be Exception type here: "
|
||||
+ returnobj);
|
||||
throw (Exception)returnobj;
|
||||
|
||||
default:
|
||||
throw new UnmarshalException("Invalid return code");
|
||||
}
|
||||
}
|
||||
|
||||
public void done() throws IOException
|
||||
{
|
||||
/* Does nothing */
|
||||
// conn.disconnect();
|
||||
}
|
||||
|
||||
Object returnValue()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue