Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-2019273 | 1.2.0 | Laird Dornin | P3 | Resolved | Fixed | 1.2beta4 |
I have a server running on rudra.eng.sun.com, as well as a registry at port
10099. When I try to invoke a method on a Remote reference obtained via a
registry lookup from ohio.central.sun.com, I get an unknown host exception for
the server host. Somehow RMI loses the domainname when making the newServer
remote call.
- jre1.1.5/bin/jre -cp .:jma.zip xDomain rudra.eng.sun.com
local host is ohio
looking up rmi://rudra.eng.sun.com:10099/managedObjFactory/JmaDispatch
looked up com.sun.em.server.jma.JmaDispatcherImpl_Stub[RemoteStub [ref: [endpoint:[rudra:33193](remote),objID:[1dce0818:cedfa0c057:-8000, 0]]]]
creating new server rudra.eng.sun.com
java.rmi.UnknownHostException: Unknown host: [rudra:33193]; nested exception is:
java.net.UnknownHostException: rudra
at sun.rmi.transport.tcp.TCPChannel.openSocket(TCPChannel.java:238)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:125)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:73)
at com.sun.em.server.jma.JmaDispatcherImpl_Stub.newServer(JmaDispatcherImpl_Stub.java:29)
at xDomain.connectTo(xDomain.java:51)
at xDomain.main(xDomain.java:31)
test case follows. to duplicate, one will have to replace JmaDispatcherRmi...
import java.rmi.*;
import java.net.*;
import com.sun.em.server.jma.JmaDispatcherRmi;
public class xDomain extends java.applet.Applet {
public void init() {
}
public void start() {
String hostname = getCodeBase().getHost();
connectTo(hostname);
}
public static void main(String[] args) {
if (args.length < 1) {
System.err.println("Missing argument: hostname");
return;
}
try {
String localhost =
java.net.InetAddress.getLocalHost().getHostName();
System.out.println("local host is "+localhost);
}
catch (java.net.UnknownHostException e) {
e.printStackTrace();
}
String hostname = args[0];
connectTo(hostname);
}
static void connectTo(String hostname) {
String serverName = "rmi://" + hostname + ":" +
Integer.toString(10099) +
"/managedObjFactory/JmaDispatch";
System.out.println("looking up "+serverName);
try {
JmaDispatcherRmi remoteObj =
(JmaDispatcherRmi) Naming.lookup(serverName);
System.out.println("looked up "+remoteObj);
System.out.println("creating new server "+hostname);
String newSrvrName = remoteObj.newServer(hostname); <<-- fails
System.out.println("created server "+newSrvrName);
} catch (Exception e) {
e.printStackTrace();
}
}
}
10099. When I try to invoke a method on a Remote reference obtained via a
registry lookup from ohio.central.sun.com, I get an unknown host exception for
the server host. Somehow RMI loses the domainname when making the newServer
remote call.
- jre1.1.5/bin/jre -cp .:jma.zip xDomain rudra.eng.sun.com
local host is ohio
looking up rmi://rudra.eng.sun.com:10099/managedObjFactory/JmaDispatch
looked up com.sun.em.server.jma.JmaDispatcherImpl_Stub[RemoteStub [ref: [endpoint:[rudra:33193](remote),objID:[1dce0818:cedfa0c057:-8000, 0]]]]
creating new server rudra.eng.sun.com
java.rmi.UnknownHostException: Unknown host: [rudra:33193]; nested exception is:
java.net.UnknownHostException: rudra
at sun.rmi.transport.tcp.TCPChannel.openSocket(TCPChannel.java:238)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:125)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:73)
at com.sun.em.server.jma.JmaDispatcherImpl_Stub.newServer(JmaDispatcherImpl_Stub.java:29)
at xDomain.connectTo(xDomain.java:51)
at xDomain.main(xDomain.java:31)
test case follows. to duplicate, one will have to replace JmaDispatcherRmi...
import java.rmi.*;
import java.net.*;
import com.sun.em.server.jma.JmaDispatcherRmi;
public class xDomain extends java.applet.Applet {
public void init() {
}
public void start() {
String hostname = getCodeBase().getHost();
connectTo(hostname);
}
public static void main(String[] args) {
if (args.length < 1) {
System.err.println("Missing argument: hostname");
return;
}
try {
String localhost =
java.net.InetAddress.getLocalHost().getHostName();
System.out.println("local host is "+localhost);
}
catch (java.net.UnknownHostException e) {
e.printStackTrace();
}
String hostname = args[0];
connectTo(hostname);
}
static void connectTo(String hostname) {
String serverName = "rmi://" + hostname + ":" +
Integer.toString(10099) +
"/managedObjFactory/JmaDispatch";
System.out.println("looking up "+serverName);
try {
JmaDispatcherRmi remoteObj =
(JmaDispatcherRmi) Naming.lookup(serverName);
System.out.println("looked up "+remoteObj);
System.out.println("creating new server "+hostname);
String newSrvrName = remoteObj.newServer(hostname); <<-- fails
System.out.println("created server "+newSrvrName);
} catch (Exception e) {
e.printStackTrace();
}
}
}
- backported by
-
JDK-2019273 Remote obj may be unreachable if ref doesnt use ip or fully qualified domainName
-
- Resolved
-
- duplicates
-
JDK-4097947 Functionality of InetAddress.java changed in 1.1.1; hostname not fully qualified
-
- Closed
-
- relates to
-
JDK-4119391 Allow configuration for nonstraightforward network setups
-
- Closed
-