[Java RMI] Blijft hardnekkig proberen hostname resolven

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • DieterVDW
  • Registratie: Juli 2002
  • Laatst online: 12-02-2017
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
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...

Acties:
  • 0 Henk 'm!

  • bomberboy
  • Registratie: Mei 2007
  • Laatst online: 07:56

bomberboy

BOEM!

Ik weet niet zeker of dit het probleem is, maar ik denk dat de Context.PROVIDER_URL niet well-formed is. Moet die niet van de vorm "jnp://192.168.0.5:1099" zijn?

Ik vermoed dat je die laatste foutmelding ook krijgt op de client en niet op de server? Ik vind het dan wel vreemd dat die client op zoek gaat naar host ubuntu. Uit de informatie die je opgeeft wordt er immers nergens verwezen naar een host ubuntu, hoe komt de client dan aan die hostname?

Acties:
  • 0 Henk 'm!

  • DieterVDW
  • Registratie: Juli 2002
  • Laatst online: 12-02-2017
Ik heb er nu de prefix 'jnp://' bijgezet en dit werkt, maar het resultaat blijft hetzelfde.

De fout doet zich inderdaad voor op de client. Ik snap ook niet waarom er nog steeds de hostname 'ubuntu' gebruikt wordt.

Ik denk dat JBoss bij het opstarten automatisch een hostname bepaalt, en dat deze op de 1 of andere manier toch doorgestuurd wordt naar de server. Als ik de hostname van de machine instel op een IP adres, dan lukt het wel, maar niet echt netjes natuurlijk ... Dit is dus mijn grote probleem, hoe krijg ik JBoss zover dat een IP adres doorgestuurd wordt en geen hostname?

Acties:
  • 0 Henk 'm!

Verwijderd

In je foutmelding van je starttopic zie ik alleen maar "Caused By ..." waar wordt de exception gevangen?
Denk dat we dan beter kunnen vaststellen waar de fout vandaan komt.

Ik heb het vermoeden dat het aan je "c.lookup" ligt daar heb ik ook altijd gedonder mee gehad. Is al wel weer enige tijd geleden :x

Acties:
  • 0 Henk 'm!

  • DieterVDW
  • Registratie: Juli 2002
  • Laatst online: 12-02-2017
De root error:
code:
1
javax.naming.NamingException: Could not dereference object [Root exception is java.lang.reflect.UndeclaredThrowableException]


Ik vind het wel vreemd dat er geen UnknownHostException optreedt, vooral die regel met 'RuntimeException: ubuntu' vind ik bizar ...

Acties:
  • 0 Henk 'm!

Verwijderd

Ondanks dat je de regelnummers van de fout niet geprint hebt kan ik met redelijke zekerheid zeggen dat het spaak loopt op
Java:
1
it = (ImageTranscoderRemote) c.lookup("SomeEAR/InterfaceBean/remote");

Mijn vermoeden is dat je /remote niet hoeft te gebruiken.

Acties:
  • 0 Henk 'm!

  • DieterVDW
  • Registratie: Juli 2002
  • Laatst online: 12-02-2017
Verwijderd schreef op donderdag 19 maart 2009 @ 09:47:
Ondanks dat je de regelnummers van de fout niet geprint hebt kan ik met redelijke zekerheid zeggen dat het spaak loopt op
Java:
1
it = (ImageTranscoderRemote) c.lookup("SomeEAR/InterfaceBean/remote");

Mijn vermoeden is dat je /remote niet hoeft te gebruiken.
Even geprobeerd, maar helpt niet, krijg de volgende error:
code:
1
java.lang.ClassCastException: org.jnp.interfaces.NamingContext cannot be cast to com.siruna.common.contentadaptationengine.ImageTranscoderRemote


Ik vermoed dat die 'SomeEAR/InterfaceBean/remote' wel OK is, aangezien het wel werkt als de client de hostname 'ubuntu' kan vertalen naar een IP .

Acties:
  • 0 Henk 'm!

  • bomberboy
  • Registratie: Mei 2007
  • Laatst online: 07:56

bomberboy

BOEM!

Welke versie van JBoss gebruik je?
Of die JNDI-name correct is kan je normaal zeker wel controleren door in de JBoss webconsole de JNDI-tree te bekijken.

Maar ik blijf het verdacht vinden dat die client "ubuntu" gaat zoeken terwijl dat helemaal niet gevraagd is. Zeker dat dit niet in een of adnere config-file gebruikt wordt ofzo?

Acties:
  • 0 Henk 'm!

Verwijderd

DieterVDW schreef op donderdag 19 maart 2009 @ 12:14:
[...]


Even geprobeerd, maar helpt niet, krijg de volgende error:
code:
1
java.lang.ClassCastException: org.jnp.interfaces.NamingContext cannot be cast to com.siruna.common.contentadaptationengine.ImageTranscoderRemote


Ik vermoed dat die 'SomeEAR/InterfaceBean/remote' wel OK is, aangezien het wel werkt als de client de hostname 'ubuntu' kan vertalen naar een IP .
De /remote weghalen heeft het probleem dat je ondervond wel opgelost.
Er is echter een nieuw probleem onstaan. Het resultaat dat je terug krijgt van de c.lookup("SomeEAR/InterfaceBean") is geen "ImageTranscoderRemote". Dit probeer je er wel van te maken. Daarom krijg je de ClassCastException.

Nu moet je dus alleen nog even uitzoeken wat je terug krijgt van de c.lookup();
succes.

hint: lees de foutmelding goed door =)

[ Voor 2% gewijzigd door Verwijderd op 19-03-2009 14:15 . Reden: hint toegevoegd ]

Pagina: 1