7 Stimmen

Netbeans-Bereitstellung schlägt nach Klassenumbenennung fehl

Ich schreibe einen Test-Client für einen Webservice. Es ist eine Netbeans 6.9.1 WebAnwendung mit JSF-Framework. Ich habe eine verwaltete Bohne, die den Webservice aufruft.

Alles funktionierte gut, bis ich einen Tippfehler im Namen meiner Bohnenklasse bemerkte. Er lautete serviceBean und ich habe es umbenannt in ServiceBean mit dem ersten Buchstaben in Großbuchstaben. Ich habe die sichere Umbenennungsfunktion von Netbeans verwendet und sowohl der Dateiname als auch die Klassensignatur wurden wie erwartet geändert.

Aber von da an hatte ich eine Menge Probleme, meine Anwendung auf Glassfish 3.0.1 laufen zu lassen.

Ich kann meine Anwendung aus Netbeans ohne Fehler erstellen (sogar mit "Clean & Build"). Aber wenn ich bereitstellen gibt es die folgende Meldung im Server-Protokoll:

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

Ich habe ein Formular auf einer Facelet-Seite, das an meine verwaltete Bean übergeben wird. Das Formular wird trotz des oben genannten Fehlers geladen, aber wenn ich versuche, es zu übermitteln, erhalte ich den folgenden Fehler:

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)

Es handelt sich also nur um einen Folgefehler, der durch den obigen NoClassDefFoundError verursacht wird.

Und jetzt kommt der seltsame Teil: Wenn ich mein Projekt baue, wird die Datei ServiceBean.class aber wenn ich das Projekt von Netbeans aus bereitstelle und dann in mein Bereitstellungsverzeichnis schaue, ist die Klasse umbenannt in serviceBean.class .

Es scheint, dass der Bereitstellungsprozess die Datei umbenennt.

Was ist das Problem? (Netbeans 6.9.1, Glassfish 3.0.1, Windows 7)

UPDATE: Es kommt noch besser: Ich habe ServiceBean.java in ServiceBean2.java umbenannt. Ergebnis: Wenn ich "Clean & Build" mache, enthält die War-Datei nur ServiceBean2.class. Wenn ich von NB aus bereitstelle, enthält das Build-Verzeichnis ServiceBean2.class. y serviceBean.class. Wie kann ich diesen Geist loswerden?

14voto

vkraemer Punkte 9824

Es ist mir gelungen, eine Variante dieses Problems zu replizieren. Ich musste den NetBeans-Kompilierungscache löschen (was bei Betriebssystemen, die auf Großbuchstaben angewiesen sind, Probleme zu bereiten scheint...)

Um das Problem, auf das ich gestoßen bin, zu überwinden, musste ich das tun:

  1. Anhalten des Servers

  2. Das Projekt reinigen

  3. NetBeans beenden

  4. %HOME%.netbeans löschen \6.9\var\cache

  5. NetBeans starten

Als ich das Projekt, bei dem Probleme auftraten, ausführte, kompilierte NetBeans das Projekt neu, startete den Server und öffnete die index.xhtml. Danach konnte ich erfolgreich durch die Anwendung navigieren.

Ich habe geöffnet http://netbeans.org/bugzilla/show_bug.cgi?id=198565 um das Problem zu verfolgen. Bitte beobachten Sie dieses Problem und fügen Sie alle Informationen hinzu, die Ihrer Meinung nach jemandem helfen könnten, der versucht, das Problem zu lösen.

0voto

Ich hatte ein sehr ähnliches Problem mit NetBeans 7.3, was bedeutet, dass es immer noch nicht behoben ist. Es passierte, nachdem ich eine Entitätsklasse umbenannt und gelöscht hatte, und JPA weigerte sich zu glauben, dass die Klasse gelöscht wurde, so dass ich sie nicht in Glassfish bereitstellen konnte.

Ich habe viele Stunden gebraucht, vom Neustart von NetBeans und Glassfish bis zur Neuinstallation. Es stellte sich heraus, dass die Neuinstallation von NetBeans den Cache nicht löscht, und genau da liegt das Problem.

Da ich OS X verwende, habe ich in ~/Library/Caches/NetBeans folgendes getan:

$ grep -r MyDeletedEntity *

Und siehe da, es gab nur wenige Hinweise auf meine gestrichene Klasse!

Dann löschte ich den Inhalt dieses Ordners, startete NetBeans neu und stellte Glassfish erneut bereit. Jetzt funktioniert es!

Wenn dies nicht funktioniert, prüfen Sie auch /Applications/NetBeans/NetBeans {welche Version auch immer}.app/Contents/Resources/NetBeans/nb/var/cache und löschen Sie alles in diesem Ordner ebenfalls.

0voto

Alejandro Punkte 724

Zu spät, aber vielleicht hilft es anderen. Ich habe gerade festgestellt, dass JRebel die alten Namen beibehält. Ich deaktivierte JRebel für mein Projekt, clean&build+run und das Problem war weg.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X