Hallo,
Weinig RMI topics hier, maar toch maar eens proberen.
Ik heb 2 machines met op beide een JBoss applicatieserver.
Machine A draait de server applicatie.
Machine B draait een client applicatie.
Nu wil ik vanuit de client applicatie via RMI de server applicatie aanroepen.
Dit lukt, maar niet helemaal zoals ik het wil.
Het probleem zit erin dat op de client machine B altijd gezocht wordt naar de hostname van machine A om mee te verbinden. Deze hostname is eenvoudigweg 'ubuntu', en dus probeert machine B te connecten met hostname 'ubuntu', wat niet lukt. Als ik bvb. deze hostname toevoeg in de hosts file, dan werkt RMI perfect.
Ik wil echter geen hostnames gebruiken, maar IP's! (En ik wil de client hostfile niet moeten aanpassen.)
Volgens meerdere bronnen zou de parameter
moeten toelaten om in te stellen welke hostname gebruikt wordt als RMI codebase.
Inderdaad zonder deze parameter zie ik de volgende regel tijdens het opstarten van JBoss:
Als ik nu echter op de client een request doe, dan krijg ik nog steeds de fout:
Uit deze foutmelding meen ik te mogen afleiden dat de client nog steeds probeert om de hostname 'ubuntu' te contacteren! Dit is helemaal niet wat ik wil!
Maar wat ik ook probeer, ik kan er niet voor zorgen dat de client een IP adres gebruikt. De hostname 'ubuntu' blijft doorgegeven worden naar de client, terwijl ik wil dat er een IP adres gebruikt wordt.
Op deze pagina wordt verteld hoe de RMI codebase bepaald wordt. Kort samengevat wordt dit gestuurd door de java.rmi.server.hostname en java.rmi.server.useLocalHostname properties. Ik heb voor de veiligheid ook nog eens expliciet java.rmi.server.useLocalHostname op false gezet, maar dit helpt ook niet.
Ik vind het wel een vreemde fout op de client, ik verwacht eerder een UnknownHostException oid...
Code voor de client lookup:
Vanwaar komt die fout bij de client? Waarom wordt de hostname van de server machine nog steeds doorgegeven? Hoe krijg ik RMI zover om IP adressen te gebruiken?
Waar moet ik verderzoeken hiervoor? Ik heb het gevoel dat ik op de verkeerde plaats kijk...
Weinig RMI topics hier, maar toch maar eens proberen.
Ik heb 2 machines met op beide een JBoss applicatieserver.
Machine A draait de server applicatie.
Machine B draait een client applicatie.
Nu wil ik vanuit de client applicatie via RMI de server applicatie aanroepen.
Dit lukt, maar niet helemaal zoals ik het wil.
Het probleem zit erin dat op de client machine B altijd gezocht wordt naar de hostname van machine A om mee te verbinden. Deze hostname is eenvoudigweg 'ubuntu', en dus probeert machine B te connecten met hostname 'ubuntu', wat niet lukt. Als ik bvb. deze hostname toevoeg in de hosts file, dan werkt RMI perfect.
Ik wil echter geen hostnames gebruiken, maar IP's! (En ik wil de client hostfile niet moeten aanpassen.)
Volgens meerdere bronnen zou de parameter
code:
1
| java.rmi.server.hostname=<ip adres> |
moeten toelaten om in te stellen welke hostname gebruikt wordt als RMI codebase.
Inderdaad zonder deze parameter zie ik de volgende regel tijdens het opstarten van JBoss:
code:
1
2
3
4
5
| [WebService] Using RMI server codebase: http://ubuntu:8083/ Met -Djava.rmi.server.hostname=192.168.0.5 [WebService] Using RMI server codebase: http://192.168.0.5:8083/ |
Als ik nu echter op de client een request doe, dan krijg ik nog steeds de fout:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| Caused by: java.lang.RuntimeException: javax.naming.NamingException: Could not dereference object [Root exception is java.lang.reflect.UndeclaredThrowableException] ... Caused by: javax.naming.NamingException: Could not dereference object [Root exception is java.lang.reflect.UndeclaredThrowableException] ... Caused by: java.lang.reflect.UndeclaredThrowableException ... Caused by: java.lang.reflect.InvocationTargetException ... Caused by: java.lang.RuntimeException: ubuntu at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.<init>(MicroSocketClientInvoker.java:275) at org.jboss.remoting.transport.socket.SocketClientInvoker.<init>(SocketClientInvoker.java:75) at org.jboss.remoting.transport.socket.TransportClientFactory.createClientInvoker(TransportClientFactory.java:39) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jboss.remoting.InvokerRegistry.loadClientInvoker(InvokerRegistry.java:450) at org.jboss.remoting.InvokerRegistry.createClientInvoker(InvokerRegistry.java:349) at org.jboss.remoting.Client.connect(Client.java:495) ... |
Uit deze foutmelding meen ik te mogen afleiden dat de client nog steeds probeert om de hostname 'ubuntu' te contacteren! Dit is helemaal niet wat ik wil!
Maar wat ik ook probeer, ik kan er niet voor zorgen dat de client een IP adres gebruikt. De hostname 'ubuntu' blijft doorgegeven worden naar de client, terwijl ik wil dat er een IP adres gebruikt wordt.
Op deze pagina wordt verteld hoe de RMI codebase bepaald wordt. Kort samengevat wordt dit gestuurd door de java.rmi.server.hostname en java.rmi.server.useLocalHostname properties. Ik heb voor de veiligheid ook nog eens expliciet java.rmi.server.useLocalHostname op false gezet, maar dit helpt ook niet.
Ik vind het wel een vreemde fout op de client, ik verwacht eerder een UnknownHostException oid...
Code voor de client lookup:
code:
1
2
3
4
5
6
7
8
9
| InterfaceRemote it = null; try { Properties props = new Properties(); props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); props.setProperty(Context.PROVIDER_URL, "192.168.0.5:1099"); props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming"); Context c = new InitialContext(props); it = (ImageTranscoderRemote) c.lookup("SomeEAR/InterfaceBean/remote"); } catch(NamingException ne) ... |
Vanwaar komt die fout bij de client? Waarom wordt de hostname van de server machine nog steeds doorgegeven? Hoe krijg ik RMI zover om IP adressen te gebruiken?
Waar moet ik verderzoeken hiervoor? Ik heb het gevoel dat ik op de verkeerde plaats kijk...