Odrzucanie połaczeń JMX, a sprawa /etc/hosts

Ciekawy problem mi się trafił. Generalnie kto był na Warsjawie ten zapewne pamięta przykład z odpytywaniem serwera Tomcat po JMX. Wszystko było super, ale tylko dlatego, że nie uruchomiłem dodatkowego serwera na VirtualBoxie. Ten drugi serwer kładłby się z komunikatem błędu:

Listing 1. Odrzucenie połączenia JMX, komunikat błędu

java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is: java.net.ConnectException: Connection refused: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:574)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:94)
at javax.management.remote.rmi.RMIServerImpl_Stub.newClient(Unknown Source)
at javax.management.remote.rmi.RMIConnector.getConnection(RMIConnector.java:2239)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:271)
...

nie chce mi się wnikać dlaczego jakiś geniusz wykombinował sobie, że nazwa komputera musi koniecznie być rozwiązywalna w ramach adresu IP (vide GNOME tak wymaga). Adres jest bezpieczny, bo nie spieprzy niczego na około do czasu… gdy ktoś nie będzie chciał wywołać usługi JMX na serwerze umieszczonym na hoście z taką konfiguracją. Co się stanie widać powyżej.

Ok. Wujek Google podpowiada, żeby usunąć drażliwy wpis z /etc/hosts. Gówno to daje. Komunikat błędu różni się tylko tym, że adres IP to 127.0.0.1. Względnie Tomcat strzeli focha i nie wstanie (i niech mi ktoś powie, że baby są normalne – skrypt startowy nazywa się Catalina). Kolejna podpowiedź to dodanie -Djava.rmi.serwer.hostname=localhost do catalina.sh jako opcji serwera wraz z innymi opcjami JMX. Wynik? Adres IP ze stacktrace zmienia się na nazwę hosta. W sumie można by zamiast localhost dać coś w stylu TenJebanySerwerNaKurewskimDebianieNaKtórymNicNieChceDziałać. Dla ciekawskich jest to poprawna nazwa domeny.

Po dłuższej chwili grzebania w google trafiłem na post na java.net. Wrzodem na dupie okazał się jednak wpis w /etc/hosts. Wystarczyło jednak podać zamiast adresu z dupy normalny adres IP, który będzie rozwiązany w ramach całej sieci. Teraz bangla.

Konkluzja – nie tylko twórcy GNOME są dziwni. Goście tworzący obsługę sieci w JVM (OpenJDK nie testowałem na HotSpocie, ale wszystko przede mną) dla Linuxa też są dziwni.

Napisz odpowiedź

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax