Findbugs maven странное предупреждение [дубликат]

По состоянию на JSF 2.x есть 4 боковых области:

  • @SessionScoped
  • @RequestScoped
  • @ApplicationScoped
  • @ViewScoped

Сфера сеанса: область сеанса сохраняется с момента установления сеанса до завершения сеанса. Сеанс завершается, если веб-приложение вызывает метод invalidate объекта HttpSession или время его истечения.

RequestScope: область запроса недолговечна. Он начинается, когда HTTP-запрос отправляется и заканчивается после отправки ответа клиенту. Если вы поместите управляемый компонент в область запроса, с каждым запросом создается новый экземпляр. Стоит рассмотреть область запроса, если вас беспокоит стоимость хранения области сеанса.

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

ViewScope: область просмотра добавлена ​​в JSF 2.0. Объект с видимым компонентом сохраняется, пока страница с JSF повторно отображается. (Спецификация JSF использует термин term для страницы JSF.) Как только пользователь переходит на другую страницу, компонент не работает.

Выберите область действия, основанную на ваших требованиях.

blockquote>

Источник: Core Java Server Faces 3rd Edition от David Geary & amp; Кей Хорстманн [Стр. 51 - 54] enter image description here [/g1]

169
задан Dennis Traub 7 May 2013 в 21:35
поделиться

8 ответов

Ответ Денниса правильный. Однако я хотел бы объяснить это решение немного более подробно (для пользователя Windows):

  1. Зайдите в свое меню «Пуск» и введите regedit в поле поиска.
  2. Перейдите к пути HKEY_LOCAL_MACHINE\Software\JavaSoft (теперь у Windows 10 есть это: HKEY_LOCAL_MACHINE\Software\WOW6432Node\JavaSoft)
  3. Щелкните правой кнопкой мыши папку JavaSoft и нажмите New -> Key
  4. Назовите новый ключ Prefs, и все должно работать.

В качестве альтернативы сохраните и выполните файл *.reg со следующим содержимым:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs]
291
ответ дан Jason Washo 21 August 2018 в 02:35
поделиться
  • 1
    Возможно ли это сделать программно? – facetoe 15 October 2013 в 07:20
  • 2
    Но у меня уже есть ключ под названием Prefs. Тогда почему это дает эту ошибку? !!! – Sumon Bappi 18 December 2014 в 06:43
  • 3
    Я могу подтвердить, что это не сработает, если сделано в HKEY_CURRENT_USER. Лучший вопрос, почему на самом деле продукт на основе Java привязывается к реестру Windows? – avgvstvs 23 December 2014 в 19:41
  • 4
    Пользовательское приложение не может требовать, чтобы пользователь заходил и возился с реестром. Почему Java всегда реализует наполовину решения, подобные этому. – El Mac 6 April 2016 в 11:27
  • 5
    Моя установка Windows 10 имеет оба указанных выше пути, для исправления моей установки требуется добавить Prefs к HKEY_LOCAL_MACHINE \ Software \ JavaSoft, а не к HKEY_LOCAL_MACHINE \ Software \ WOW6432Node \ JavaSoft – gt124 13 August 2016 в 19:33

Это случилось со мной.

По-видимому, это связано с тем, что у Java нет разрешения на создание разделов реестра.

См.: Java: java.util.Preferences Failed

1
ответ дан Community 21 August 2018 в 02:35
поделиться
  • 1
    Ну, точнее, это потому, что в JDK есть ошибка. См. Принятый ответ по ссылке в вашем ответе. – peterh 5 March 2017 в 08:54

Проблема в том, что простая консоль не может редактировать реестр. Не нужно редактировать реестр вручную, просто запустите groovysh один раз с административными привилегиями. Все последующие запуски работают без ошибок.

6
ответ дан Darksnake 21 August 2018 в 02:35
поделиться
  • 1
    Спасибо, я предлагаю другим попробовать это, это самое простое решение :) – Aditya Thakur 8 September 2017 в 01:56
  • 2
    Самый простой ответ должен быть сверху. У меня было предупреждение о выполнении тестов JMeter, но я начал работу с jmeter.bat как администратор, и предупреждение не было. – K. B. 1 March 2018 в 17:14

Я смог решить проблему, вручную создав следующий раздел реестра:

HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
67
ответ дан Dennis Traub 21 August 2018 в 02:35
поделиться
  • 1
    Не могли бы вы сказать мне точный процесс? Я работаю в основном на Mac, но я получаю эту ошибку, когда запускаю свою программу в Windows, и я хотел бы знать, как ее исправить. – Meshulam Silk 16 June 2013 в 02:24
  • 2
    Я вижу это на программном обеспечении, которое мы продаем. Автоматическое / программное исправление было бы лучше, если бы вы получили один из них. Говорить моим конечным пользователям, чтобы перейти в regedit, - страшная перспектива. Есть ли способ заставить Java сделать это автоматически на Windows 8.1 (это единственная платформа, на которой я вижу ошибку). – Brian Knoblauch 27 November 2013 в 20:23
  • 3
    Ошибка также возникает в Windows 10, и это исправление работает – TriumphST 11 May 2016 в 21:07
  • 4
    Я на Windows 10. Это работает для меня. – Gabriel Wu 14 July 2018 в 11:18

Это на самом деле ошибка JDK. За несколько лет он сообщался несколько раз, но только в 8139507 он был серьезно воспринят Oracle.

Проблема заключалась в исходном коде JDK для WindowsPreferences.java. В этом классе оба узла userRoot и systemRoot были объявлены как статические, как в:

/**
 * User root node.
 */
static final Preferences userRoot =
     new WindowsPreferences(USER_ROOT_NATIVE_HANDLE, WINDOWS_ROOT_PATH);

/**
 * System root node.
 */
static final Preferences systemRoot =
    new WindowsPreferences(SYSTEM_ROOT_NATIVE_HANDLE, WINDOWS_ROOT_PATH);

Это означает, что при первом обращении к классу статические переменные инициируется и этим будет создан ключ реестра для HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs (= системное дерево), если он еще не существует.

Таким образом, даже если пользователь принял все меры предосторожности в своем собственном коде и никогда не касались или не ссылались на системное дерево, тогда JVM на самом деле все равно попытается создать экземпляр systemRoot, тем самым вызывая предупреждение. Это интересная тонкая ошибка.

В июне 2016 года исправлено право на источник JDK. Будет интересно посмотреть, будет ли он включен в Java 8.

Что вы см. на самом деле предупреждение от внутреннего регистратора JDK. Это не исключение. Я считаю, что предупреждение можно смело игнорировать ... если код пользователя действительно не хочет системных предпочтений, но это очень редко.

Информация о бонусе

Ошибка не отображалась в версиях до Java 1.7.21, потому что до этого установщик JRE создавал для вас ключ реестра HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs, и это эффективно скрыть ошибку. С другой стороны, вам никогда не требовалось запускать установщик, чтобы иметь JRE на вашей машине, или, по крайней мере, это не было намерением Sun / Oracle. Как вам известно, Oracle много лет распространяет JRE для Windows в формате .tar.gz.

28
ответ дан egallardo 21 August 2018 в 02:35
поделиться

Если кто-то пытается решить эту проблему в 64-разрядной версии Windows, возможно, вам потребуется создать следующий ключ:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs
30
ответ дан Jawa 21 August 2018 в 02:35
поделиться
  • 1
    Я получил эту ошибку при использовании 64-битной JVM на 64-разрядной Windows 7, и решение, предложенное Денисом и Маккоршем, работало для меня отлично. Возможно, решение Wow6432Node предназначено для 32-разрядных JVM в 64-битной Windows. – Scott Johnson 15 April 2014 в 20:03

Была аналогичная проблема при запуске apache jmeter в Windows 8 64 бит:

[]apache-jmeter-2.13\bin>jmeter
java.util.prefs.WindowsPreferences <init>
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs     at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.

Успешно использовалось решение Dennis Traub с объяснениями Mkorsch. Или вы можете создать файл с расширением «reg» и записать в него следующее:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs]

... затем выполнить его.

2
ответ дан razvanone 21 August 2018 в 02:35
поделиться

Я получил следующее сообщение:

Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002

, и он исчез после создания одного из этих разделов реестра, у меня 64 бит, поэтому я попробовал только это.

32 bit Windows
HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs

64 bit Windows
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs
1
ответ дан Sohail Ahmed 21 August 2018 в 02:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: