Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden

RMI-Kommunikation zu Remote-Hosts mit ungünstiger DNS-Konfiguration

Bei der Kommunikation über Java-RMI gibt es einen sehr häss­li­chen Fallstrick, für den ich hier eine Lösung beschreibe.

Bei der RMI-Kommunikation wird vom RMI-Service ein RMI-Stub-Objekt erzeugt. Dieses Stubobjekt ent­hält fest kodiert eine IP-Adresse des Systems, wel­ches den Service anbie­tet (siehe Bild).

gestörte RMI-Kommunikation
gestörte RMI-Kommunikation

Bei Systemen mit meh­re­ren IP-Adressen und mit nicht funk­tio­nie­ren­dem DNS-Reverse-Lookup kann es dabei zu fol­gen­dem Verhalten kommen:

  • Server fin­det kei­nen pri­mä­ren Hostnamen oder keine IP-Adresse dazu per Reverse-Lookup
  • Server kodiert eine belie­bige IP-Adresse sei­nes Hosts in das RMI-Stub-Objekt
  • Client ver­sucht auf dem Stub einen RMI-Aufruf durch­zu­füh­ren und kann die Ziel-IP-Adresse (z.B. 127.0.0.1) nicht erreichen

Als Workaround für diese Situation muss das Systemproperty java.rmi.server.hostname auf einen per DNS vom Client auf­lös­ba­ren Namen gesetzt wer­den. Folgendes Beispiel ist aus der JMX-Konfiguration einer ActiveMQ-Installation entnommen:

SUNJMX="-Dcom.sun.management.jmxremote.port=52097 \
 -Dcom.sun.management.jmxremote.authenticate=false \
 -Dcom.sun.management.jmxremote.ssl=false \
 -Djava.rmi.server.hostname=areal.primaryhostname.example.com"

Die Variable SUNJMX wird dann spä­ter für die Konstruktion der java-Kommandozeile genutzt.

17. September 2008
||

Related Posts

Pin It on Pinterest