Я не пробовал это, но это может помочь.
Основное неудобство здесь заключалось в том, что нет простого способа указать IP-адрес хоста.
адрес для привязки JMX, он всегда будет привязан ко всем интерфейсам.
Свойство 'java.rmi.server.hostname' не работает, и я не хочу выбирать
разные порты для всех разных экземпляров на одном хосте.
Кроме того, я не хотел создавать свой собственный RMIServerSocketFactory со всеми
Сложности, связанные с этим, я получил после простого патча к существующему коду.
Я исправил это, исправив стандартную фабрику сокетов RV JVM, которая
ответственный за создание этого сокета сервера. Теперь он поддерживает новый
Свойство com.sun.management.jmxremote.host.
Чтобы заставить это работать, сохраните приведенный ниже код Java в файл с именем
ВС / RMI / транспорт / прокси / RMIDirectSocketFactory.java.
Скомпилируйте и создайте из него jmx_patch.jar и поместите его в tomcat lib /
папка.
Затем вам нужно добавить следующую строку в bin / setenv.sh:
CLASSPATH = $ CLASSPATH: $ CATALINA_HOME / Библиотека / mx_patch.jar
добавить эту опцию при запуске экземпляра tomcat
-Dcom.sun.management.jmxremote.host = 192.168.100.100"
После этого служба JMX будет привязана только к адресу 192.168.100.100. 2 других
случайные порты прослушивания RMI будут по-прежнему связываться со всеми интерфейсами, но это нормально
в любом случае они всегда выбирают свободный порт.
Теперь вы можете запускать несколько экземпляров tomcat на одном хосте со всеми
порты по умолчанию не повреждены (например, 8080 для JMX для всех).
package sun.rmi.transport.proxy;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.rmi.server.RMISocketFactory;
public class RMIDirectSocketFactory extends RMISocketFactory {
public Socket createSocket(String host, int port) throws IOException
{
return new Socket(host, port);
}
public ServerSocket createServerSocket(int port) throws IOException
{
String jmx_host = System.getProperty("com.sun.management.jmxremote.host");
String jmx_port = System.getProperty("com.sun.management.jmxremote.port");
// Allow JMX to bind to specific address
if (jmx_host != null && jmx_port != null && port != 0 && integer.toString(port).equals(jmx_port)) {
InetAddress[] inetAddresses = InetAddress.getAllByName(jmx_host);
if (inetAddresses.length > 0) {
return new ServerSocket(port, 50, inetAddresses[0]);
}
}
return new ServerSocket(port);
}
}