Сбой развертывания NetBeans после переименования класса - PullRequest
7 голосов
/ 11 мая 2011

Я пишу тестовый клиент для веб-сервиса.Это веб-приложение Netbeans 6.9.1, использующее инфраструктуру JSF.У меня есть один управляемый компонент, который вызывает веб-сервис.

Все работало нормально, пока я не заметил опечатку в имени класса моего компонента.Это был serviceBean , и я переименовал его в ServiceBean с первой буквой в верхнем регистре.Я использовал функцию безопасного переименования Netbeans, и имя файла, и сигнатура класса изменились, как и ожидалось.

Но с тех пор у меня возникли большие проблемы с запуском приложения на Glassfish 3.0.1.

Я могусобрать приложение из Netbeans без ошибок (даже «Clean & Build»).Но если я разверну, в журнале сервера появится следующее сообщение:

WARNUNG: Error in annotation processing: java.lang.NoClassDefFoundError: jsf/serviceBean (wrong name: jsf/ServiceBean)
WARNUNG: WEB9052: Unable to load class jsf.ServiceBean, reason: java.lang.ClassNotFoundException: jsf.ServiceBean
INFO: Mojarra 2.0.2 (FCS b10) für Kontext '/PidClient' wird initialisiert.
SCHWERWIEGEND: Unable to load annotated class: jsf.serviceBean, reason: java.lang.NoClassDefFoundError: jsf/serviceBean (wrong name: jsf/ServiceBean)
INFO: Loading application PidClient at /PidClient

У меня есть форма на странице лицевой стороны, которая будет передана моему управляемому компоненту.Форма будет загружена, несмотря на вышеуказанную ошибку, но если я попытаюсь отправить ее, я получу следующую ошибку:

WARNUNG: /index.xhtml @19,94 value="#{serviceBean.fldLname}": Target Unreachable, identifier 'serviceBean' resolved to null
javax.el.PropertyNotFoundException: /index.xhtml @19,94 value="#{serviceBean.fldLname}": Target Unreachable, identifier 'serviceBean' resolved to null
        at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:93)
        at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95)
        at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1008)

Так что это будет только последующей ошибкой, вызванной вышеуказанной ошибкой NoClassDefFoundError.

А теперь странная часть: если я собираю свой проект, он создает файл ServiceBean.class , но если я развертываю проект из Netbeans и затем просматриваю каталог моего развертывания, класс переименовывается в serviceBean.class .

Кажется, что процесс развертывания переименовывает файл.

В чем проблема?(Netbeans 6.9.1, Glassfish 3.0.1, Windows 7)

ОБНОВЛЕНИЕ: Становится еще лучше: переименовано в ServiceBean.java в ServiceBean2.java.Результат: если я "Очистить и построить", файл войны содержит только класс ServiceBean2.class.Если я развернусь из NB, каталог сборки содержит ServiceBean2.class и serviceBean.class.Как мне избавиться от этого призрака?

Ответы [ 3 ]

14 голосов
/ 13 мая 2011

Мне удалось воспроизвести вариант этой проблемы. Мне пришлось очистить кэш компиляции NetBeans (который, похоже, имеет проблемы с операционными системами, прощающими случай ...)

Чтобы преодолеть проблему, с которой я столкнулся, мне пришлось:

  1. Остановить сервер

  2. Очистить проект

  3. Остановить NetBeans

  4. Удалить% HOME% .netbeans \ 6,9 \ var \ cache

  5. Запустить NetBeans

Когда я запустил проект, в котором возникли проблемы, NetBeans перекомпилировал проект, запустил сервер и открыл файл index.xhtml. После этого я смог успешно перемещаться по приложению.

Я открыл http://netbeans.org/bugzilla/show_bug.cgi?id=198565, чтобы отследить проблему. Пожалуйста, следите за этой проблемой и добавьте любую информацию, которая, по вашему мнению, поможет кому-то, кто пытается решить проблему.

0 голосов
/ 03 апреля 2016

Слишком поздно, но может помочь другим.Я только что понял, что JRebel хранит ссылки на старые имена.Я отключил JRebel для своего проекта, очистил и собрал + запустил, и проблема исчезла.

0 голосов
/ 10 февраля 2013

У меня была очень похожая проблема с NetBeans 7.3, что означает, что она все еще не исправлена. Это произошло после того, как я переименовал и удалил класс сущности, и JPA отказалась верить, что класс был удален, поэтому я не смог развернуться на Glassfish.

Мне потребовалось много часов, от перезапуска NetBeans и Glassfish до их фактической переустановки. Оказывается, переустановка NetBeans не очищает его кэш, хотя в этом и заключается проблема.

Запустив OS X, я сделал следующее в ~ / Library / Caches / NetBeans:

$ grep -r MyDeletedEntity *

И бум, было мало ссылок на мой удаленный класс!

Затем я продолжил удалять содержимое этой папки, перезапустил NetBeans и затем снова развернул его в Glassfish. Теперь это работает!

Если это не работает, посмотрите также / Applications / NetBeans / NetBeans {любой версии} .app / Contents / Resources / NetBeans / nb / var / cache и удалить все в этой папке тоже.

...