Использовать широковещательные рассылки UDP на серверах баз данных :) Это позволит вам принимать широковещательные рассылки на всех машинах в локальной сети, а сами широковещательные рассылки могут нести IP-адрес серверов. Для получения локального IP, используйте InetAddress ip = InetAddress.getLocalHost();
С http://java.sun.com/j2se/1.4.2/docs/api/java/net/DatagramSocket.html:
Передачи UDP-рассылок всегда включены на DatagramSocket
. Для приема широковещательных пакетов DatagramSocket
должен быть связан с подстановочным адресом. В некоторых реализациях широковещательные пакеты также могут приниматься, когда DatagramSocket
привязан к более конкретному адресу.
Пример: DatagramSocket s = new DatagramSocket(null); s.bind(new InetSocketAddress(8888));
Что эквивалентно: DatagramSocket s = new DatagramSocket(8888);
В обоих случаях создается DatagramSocket
, способный принимать широковещательные сообщения через порт UDP 8888.
Изменить: вы также можете перебрать все IP-адреса в сети; используйте алгоритм на http://www.linglom.com/2007/02/20/how-to-find-subnet-number-ip-addresses-in-the-subnet-in-a-few-seconds/ для определения IP-адресов подсетей, итерации по ним и проверки каждого на наличие сервера H2 (попробуйте подключиться). Возможно, вы захотите, чтобы несколько потоков ускорили обнаружение.