Как установить TTL кеша DNS DNS-резольвера в приложении Web Start? - PullRequest
3 голосов
/ 26 мая 2011

Я могу сказать, что распознаватель Java DNS не должен кэшироваться следующим образом:

java.security.Security.setProperty("networkaddress.cache.ttl", "0");

Это прекрасно работает, когда программа запускается непосредственно из JRE, однако при запуске из Web Start этонастройка, кажется, игнорируется, и она кешируется навсегда.Я не получаю исключение SecurityException.

Однако, если я установлю для диспетчера безопасности значение null, настройка будет работать при запуске через Интернет:

System.setSecurityManager(null);

Кто-нибудь знает способ включить этосвойство в Web Start без отключения диспетчера безопасности?Кроме того, если вы можете просто пролить больше света на то, что происходит, я был бы признателен за это.

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

Простой ответ заключается в том, что sun.net.InetAddressCachePolicy инициализируется только один раз в статическом инициализаторе {} с учетом указанного вами свойства.Загрузчик Webstart, очевидно, использует класс, поэтому он не принимает ваше значение.

Однако, поскольку свойство может не инициализироваться, вы можете использовать InetAddressCachePolicy.setIfNotSet(InetAddressCachePolicy.NEVER).

В качестве альтернативы существует системное свойстводобавить в jnlp:

Если это уже указано в веб-запуске (естьне проверено) Вы можете прибегнуть только к взлому с помощью отражения Field f= InetAddressCachePolicy.getDeclaredField("cachePolicy"); f.setAccessible(true); f.setInt(0); , которое может или не может работать.

Удачи и счастливого взлома!

1 голос
/ 26 мая 2011

Вы используете это с челюстями? Если вы, пробовали ли вы

javaws -J-Dnetworkaddress.cache.ttl=0 yourapp.jnlp
...