[JBOSS] EJB Connection via NAT

flo_hr

Mitglied
Guten Abend,

ich habe folgendes Problem.

Ich habe einen JBOSS 5.1.0 wo EnterpriseJavaBeans deployed sind (EJB 3.0 ).
Und einen SwingClient der mit den EJB's kommuniziert.

In meinem internen Netzwerk funktioniert das auch alles einwandfrei. Ich möchte nun aber auch, das der SwingClient von außerhalb (Internet) mit dem jboss kummunizieren kann.
Ich habe einen handelsüblichen Router. Dort habe ich schon alle notwendigen Ports freigeschaltet. Die WebOberfläche des JBOSS lässt sich auch "außerhalb" aufrufen. Wenn der SwingClient aber versucht zu connecten, dann kommt ein ConnectionTimeOut.


Ich habe auch schon versucht über das http Protokoll die Verbindung herzustellen:
Code:
props.put("java.naming.factory.initial","org.jboss.naming.HttpNamingContextFactory");
props.put("java.naming.provider.url", "http://X.X.X.X:8080/invoker/JNDIFactory");
Im internen LAN funktioniert es, vom Internet nicht.

Schonmal vielen Dank für eure Hilfe.
flo
 
Das funktioniert leider auch nicht.
Habe meinen JBOSS mit dem binding an meine Netzwerkkarte, welche für die Verbindung mit dem Router zuständig ist, gestartet.

Wie oben beschrieben. Im internen LAN geht es. Ich kann von anderen PC's im LAN die Verbindung aufbauen. Vom Internet her geht es nicht.

Ich hab die Vermutung, wenn der Client eine Verbindung aufbaut, gibt der JBOSS dem Client iwelche ProxyAdressen zurück, oder so. Und diese ist dann die lokale IP. Kann man das irgendwo konfigurieren? Das er nicht die lokale IP sondern die zugewiesene Internet IP des ISP zurück gibt. In meinem Fall dann eine DynDNS Adresse.

gruss flo
 
Zuletzt bearbeitet:
Hallo,

welche Exception bekommst du denn genau?

Code:
java.rmi.ConnectException: Connection refused to host: (xxx.xxx.xxx.xxx); nested exception is: 
 java.net.ConnectException: Connection timed out: connect

Steht bei xxx.xxx... die Ziel IP oder localhost?

Bekommst du die Exception beim erstellen vom InitialContext, beim Lookup-Versuch oder beim ersten Aufruf einer Remote Methode?

Gruß Tom
 
Code:
javax.naming.CommunicationException [Root exception is java.rmi.ConnectException
: Connection refused to host: 192.168.1.104; nested exception is:
java.net.ConnectException: Connection timed out: connect]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:839)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:686)
at javax.naming.InitialContext.lookup(Unknown Source)
at de.mediadb.client.DataManager.getUserManager(DataManager.java:63)
at de.mediadb.client.toplevelview.TopLevelView$LoginDialog.login(TopLeve
lView.java:370)
at de.mediadb.client.toplevelview.TopLevelView$LoginDialog$1.actionPerfo
rmed(TopLevelView.java:363)

Hallo Thomas,
laut Stacktrace bekomme ich die Exception beim lookup.
Man kann im Stacktrace gut erkennen das er versucht zu 192.168.1.104 zu connecten.
Ich habe aber beim erstellen des InitialContext meine DynDNS Adresse angegeben. Habe es auch schon direkt mit der externen IP versucht. Im Stacktrace ist dann aber immer die lokale IP zu sehen.
Das wird wohl der Fehler sein. Nur wie kriege ich das gelöst

gruss flo
 
Wenn ich mein Server mit dem Property -Djava.rmi.server.hostname=<MEINE DYNDNS ADRESSE> starte, dann bleibt er beim hochfahren beim Deployment meiner EJB stehen:

22:01:21,140 INFO [Ejb3DependenciesDeployer] Encountered deployment AbstractVFSDeploymentContext@19425577{vfszip:/home/florian/Programme/jboss-5.1.0.GA/server/default/deploy/MediaDB.jar/}

Nach ca 5min kommt folgende Exception im Server:
Code:
Caused by: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: <MEINE DYNDNS ADRESSE>; nested exception is: 
	java.net.ConnectException: Connection timed out]
	at com.sun.jndi.rmi.registry.RegistryContext.bind(RegistryContext.java:143)
	at com.sun.jndi.toolkit.url.GenericURLContext.bind(GenericURLContext.java:226)
	at javax.naming.InitialContext.bind(InitialContext.java:417)
	at javax.management.remote.rmi.RMIConnectorServer.bind(RMIConnectorServer.java:639)
	at javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:426)
	... 63 more
Caused by: java.rmi.ConnectException: Connection refused to host: <MEINE DYNDNS ADRESSE>; nested exception is: 
	java.net.ConnectException: Connection timed out
	at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
	at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
	at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
	at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:340)
	at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
	at com.sun.jndi.rmi.registry.RegistryContext.bind(RegistryContext.java:137)
	... 67 more
Caused by: java.net.ConnectException: Connection timed out
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:310)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:176)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:163)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384)
	at java.net.Socket.connect(Socket.java:542)
	at java.net.Socket.connect(Socket.java:492)
	at java.net.Socket.<init>(Socket.java:389)
	at java.net.Socket.<init>(Socket.java:203)
	at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
	at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:146)
	at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)

gruss flo
 
habe folgendes im ServerLog gefunden:

Code:
Caused by: java.io.IOException: Cannot bind to URL [rmi://<DYNDNS_ADRESSE>:1090/jmxconnector]: javax.naming.NoPermissionException [Root exception is java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
	java.rmi.AccessException: Registry.Registry.bind disallowed; origin /87.168.191.8 is non-local host]
	at javax.management.remote.rmi.RMIConnectorServer.newIOException(RMIConnectorServer.java:818)
 
Hallo,

dann setz den rmi.server Hostname nur auf dem Client auf die dyndns Adresse... vielleicht hilft das was.
Das mit der Permission wäre zwar auch über entsprechende Policies machbar, jedoch sollte das auch anders gehen.

Gruß Tom
 
Ich habe jetzt den Client mit folgendem Befehl über die Konsole gestartet:
java -jar MediaDBSwClient.jar -Djava.rmi.server.hostname=<DYNDNS ADRESSE>
hat nicht funktioniert.

Dann habe ich mal versucht beim instanziieren des InitialContext das genannte Propertie zu setzen.

Bei beiden Varianten bekomme ich die gleiche Exception wie früher. Im Stacktrace ist auch wieder die lokale IP des Servers zu sehen.


gruss flo
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück