Ich habe einen EJB-Container, der auf JBoss 5.1 auf einer virtuellen Amazon AWS Fedora 8-Maschine bereitgestellt wird. Ich habe eine andere Anwendung, die ich auf diesen EJB-Behälter über das Internet remote zugreifen möchte. Aber ich erhalte die folgende AusnahmeRemote-EJB-Schnittstelle funktioniert nicht über das Internet
javax.naming.CommunicationException [Root exception is java.rmi.ConnectException: Connection refused to host: xxx.xxx.xx.x; nested exception is: java.net.ConnectException: Connection timed out]
Caused by: java.rmi.ConnectException: Connection refused to host: xxx.xxx.xx.x; nested exception is: java.net.ConnectException: Connection timed out
Caused by: java.net.ConnectException: Connection timed out
Hier xxx.xxx.xx.x
ist die interne IP der Maschine die EJB ausgeführt wird. Hier
ist der Code, den ich verwendet, um darauf zuzugreifen
Properties props = new Properties();
props.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
props.setProperty(Context.INITIAL_CONTEXT_FACTORY,org.jboss.security.jndi.JndiLoginInitialContextFactory");
props.setProperty(Context.PROVIDER_URL, "<external-ip>:1099");
props.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
props.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
props.put("java.naming.provider.url", "jnp://<external-ip>:1099");
InitialContext ic = new InitialContext(props);
ic.lookup("EJBName");
Ich habe auch die /etc/hosts
Datei wie
127.0.0.1 localhost.localdomain localhost
xxx.xxx.xx.x hostname alias
und begann JBoss mit
-Djboss.bind.address=0.0.0.0 -Djava.rmi.server.hostname=xxx.xxx.xx.x -Dremoting.bind_by_host=false
Ich denke, ich habe alle notwendigen Konfigurationen vorgenommen und den Code dafür korrigiert, scheint aber nicht zu funktionieren. Bitte helfen Sie mir, dieses Problem zu lösen, das mich seit über einer Woche nervt. Und entschuldige das Ausblenden der aktuellen ips aus Sicherheitsgründen.
Ich benutze den JBoss 5.1 auch auf der Client-Seite. Also denke ich, dass ich die ORB-Port-Eigenschaften dafür nicht benötigen werde. Der Anfangskontext gibt den Naming-Stub mit der internen IP an den Client zurück. Aber wenn versucht wird, nachzuschlagen, gibt es mir diese Ausnahme. –
Wenige Überprüfungen: 1. Telnet auf EJB Port 3700/33700 2. Sniffing mit Wireshark, um sicherzustellen, dass eine externe Verbindung versucht wird 3. "netstat -na | grep 3700", um sicherzustellen, dass der Parameter bind.address berücksichtigt wird. – h3xStream