Как Java проверяет, что устарели

У меня есть linux box, который не подключен к Интернету. Я установил на него Firefox 24.0 и jre1.7.0_40 (а также 1.7.0_17) Когда я запускаю FF с локальным установленным в окне веб-приложением, я получаю всплывающее предупреждение о том, что

Необходимость обновления Java; Версия YourJava устарела

Я не отказываюсь от того, как Java знает, что это "устаревший"??? Что по сравнению с чем? Я бы предположил, что проверяет доступные версии на oracle.com, и если текущий, установленный в системе, слишком стар, то это предупреждение.

Или само начало приложения, которое запускается, содержит некоторую информацию о версии Java, которая была доступна или что использовалось во время компиляции.

Ответ 1

В примечаниях 1.7.0u10 есть объяснения.

JRE полагается на периодические проверки с помощью Oracle Server для определения если он (JRE) по-прежнему считается актуальным со всеми доступными исправления безопасности (выше базового уровня безопасности). В прошлом, если JRE не смог связаться с сервером Oracle, он продолжал вести себя как хотя это все еще самая последняя версия в отношении безопасности, на неопределенный срок.

Чтобы избежать этой проблемы, вторичный механизм, который не полагается на внешняя связь, была добавлена ​​в JDK 7u10. Из этого релиз и далее, все JRE будут содержать дату окончания жесткого кодирования. Дата истечения рассчитана для завершения после запланированного выпуска следующего обновления критического обновления.

Онлайн-проверка получает свои данные из https://javadl-esd-secure.oracle.com/update/baseline.version, я полагаю.

Дата истечения срока действия и версии, жестко закодированные в JRE, хранятся в BuiltInProperties.class, расположенном в файле deploy.jar

Для 1.7.0u45 имеем

public static final boolean JRE_BASELINE_CHECKS_ENABLED = true;
public static final String JRE_EXPIRATION_DATE = "02/14/2014";
public static final String BASELINE_VERSION_131 = "1.3.1_21";
public static final String BASELINE_VERSION_142 = "1.4.2_43";
public static final String BASELINE_VERSION_150 = "1.5.0_55";
public static final String BASELINE_VERSION_160 = "1.6.0_65";
public static final String BASELINE_VERSION_170 = "1.7.0_45";
public static final String BASELINE_VERSION_180 = "1.8.0";
public static final String CURRENT_VERSION = "1.7.0_45";
public static final String CURRENT_NODOT_VERSION = "170";
public static final String DEPLOY_VERSION = "10.45.2.18";
public static final String DEPLOY_NOBUILD_VERSION = "10.45.2";
public static final String DEPLOY_NODOT_VERSION = "10452";
public static final String JAVAWS_NAME = "javaws-10.45.2.18";
public static final String JAVAWS_VERSION = "10.45.2.18";