diff options
| author | Norbert Frese <postfach@nfrese.net> | 2004-03-20 20:30:56 +0000 |
|---|---|---|
| committer | Michael Koch <mkoch@gcc.gnu.org> | 2004-03-20 20:30:56 +0000 |
| commit | f903e73b80ccb078fb4bb8cfb5c4a44ea901a002 (patch) | |
| tree | 46489ab9dc40917ff9013121644478cc830a4a4e /libjava/gnu/java/rmi/server/UnicastServer.java | |
| parent | 079f946dad97b3def95bc6010e1a89f2058a69d5 (diff) | |
| download | gcc-f903e73b80ccb078fb4bb8cfb5c4a44ea901a002.zip gcc-f903e73b80ccb078fb4bb8cfb5c4a44ea901a002.tar.gz gcc-f903e73b80ccb078fb4bb8cfb5c4a44ea901a002.tar.bz2 | |
RMIIncomingThread.java: New file.
2004-03-20 Norbert Frese <postfach@nfrese.net>
* gnu/java/rmi/server/RMIIncomingThread.java: New file.
* gcc/libjava/gnu/java/rmi/server/UnicastConnection.java:
Create a new RMIObjectOuputStream/RMIObjectInputStream for every
rmi-message.
(getObjectInputStream): Return object reference, throw IOException if null.
(startObjectInputStream): Create new RMIObjectInputStream on top of 'din'.
(getObjectOutputStream): Return object reference, throw IOException if null.
(startObjectOutputStream): Create new RMIObjectOutputStream on top of 'dout'.
* gcc/libjava/gnu/java/rmi/server/UnicastConnectionManager.java:
(UnicastConnectionManager): Throw RemoteException if port is not available.
(getInstance): Throw RemoteException.
(run): Lookup client host and attach it to new RMIIncomingThread for later retrieval.
* gcc/libjava/gnu/java/rmi/server/UnicastRef.java:
Start a new RMIObjectInputStream/RMIObjectOutputStream for every rmi-message.
Collect Exceptions which are returned by a rmi-call and fix void returns.
* gcc/libjava/gnu/java/rmi/server/UnicastRemoteCall.java:
Start a new RMIObjectInputStream/RMIObjectOutputStream for every rmi-message.
* gcc/libjava/gnu/java/rmi/server/UnicastServer.java:
(dispatch): Answer ping messages which are sent by other java implementions.
(incomingMessageCall): Start a new RMIObjectInputStream/RMIObjectOutputStream
for every rmi-message and fix void return problems.
* gcc/libjava/gnu/java/rmi/server/UnicastServerRef.java
(UnicastServerRef): Throw RemoteException.
(exportObject): Find the class up the class hierarchy which has a _Stub generated by rmic.
In some situations it is necessary to export a subclass of the class which has the _Stub.
For instance when the class with has the _Stub is abstract.
(findStubSkelClass): New method which looks for the class which has the _Stub.
(getClientHost): Implementated.
* gcc/libjava/java/rmi/server/RemoteServer.java
(getClientHost): Implementated.
* gcc/libjava/Makefile.am (rmi_java_source_files):
Added gnu/java/rmi/server/RMIIncomingThread.java.
* Makefile.in: Regenerated.
From-SVN: r79755
Diffstat (limited to 'libjava/gnu/java/rmi/server/UnicastServer.java')
| -rw-r--r-- | libjava/gnu/java/rmi/server/UnicastServer.java | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/libjava/gnu/java/rmi/server/UnicastServer.java b/libjava/gnu/java/rmi/server/UnicastServer.java index fb6ec1f..ace43f0 100644 --- a/libjava/gnu/java/rmi/server/UnicastServer.java +++ b/libjava/gnu/java/rmi/server/UnicastServer.java @@ -99,13 +99,19 @@ public static void dispatch(UnicastConnection conn) throws Exception { case MESSAGE_CALL: incomingMessageCall(conn); break; + case MESSAGE_PING: + // jdk sends a ping before each method call -> answer it! + DataOutputStream out = conn.getDataOutputStream(); + out.writeByte(MESSAGE_PING_ACK); + out.flush(); + break; default: throw new Exception("bad method type"); } } private static void incomingMessageCall(UnicastConnection conn) throws IOException { - ObjectInputStream in = conn.getObjectInputStream(); + ObjectInputStream in = conn.startObjectInputStream(); // (re)start ObjectInputStream ObjID objid = ObjID.read(in); int method = in.readInt(); @@ -138,13 +144,18 @@ private static void incomingMessageCall(UnicastConnection conn) throws IOExcepti conn.getDataOutputStream().writeByte(MESSAGE_CALL_ACK); - ObjectOutputStream out = conn.getObjectOutputStream(); + ObjectOutputStream out = conn.startObjectOutputStream(); // (re)start ObjectOutputStream out.writeByte(returncode); (new UID()).write(out); + + //System.out.println("returnval=" + returnval + " returncls=" + returncls); + if(returnval != null && returncls != null) ((RMIObjectOutputStream)out).writeValue(returnval, returncls); - else if (!(returnval instanceof RMIVoidValue)) + + // 1.1/1.2 void return type detection: + else if (!(returnval instanceof RMIVoidValue || returncls == Void.TYPE)) out.writeObject(returnval); out.flush(); |
