Web UI Integration: java.lang.NoClassDefFoundError

Allgemeine Fragen zur Entwicklung von und mit JVx.

Web UI Integration: java.lang.NoClassDefFoundError

Postby JekoschIT » Thu Dec 06, 2012 6:31 pm

Derzeit gibt es in meiner Applikation ein Problem mit JVx und der Integration der Web UI. Das bisherige Projekt wurde entsprechend des Tutorials (http://www.sibvisions.com/de/jvxmdocumentation/94-jvxhelloworld) entwickelt und unterscheidet sich lediglich in der Datenbankkomponente. Das Problem umschreibe ich am besten mit den Rahmendaten.

Die Web UI (v 0.10) sollte gemäß der Anleitung unter http://forum.sibvisions.com/viewtopic.php?f=5&t=99&p=145&hilit=Web+UI+einrichten#p145 umgesetzt werden. Dort ist die Rede von einer Web Applikation und ich interpretierte es als „Dynamisches Web Projekt“, welches ich mit Eclipse erstellt habe. Weiterführend wurden die ersten 3 Punkte umgesetzt, erst ab Punkt 4 stellten sich mir viele Fragen (siehe unten). In das WEB-INF/lib Verzeichnis habe ich ein JAR-Archiv meiner Applikation exportiert. In Punkt 5 habe ich die entsprechenden Anpassungen vorgenommen.

In der webui.html:

Code: Select all
<!--                        -->
<!-- Application properties -->
<!--                        -->
<meta name="gwt:property" content="main=JVxFirstApp.bin.apps.firstapp.FirstApplication">
<!-- <meta name="gwt:property" content="config=/com/sibvisions/apps/showcase/application.xml"> -->


und in der web.xml:

Code: Select all
<servlet>
    <servlet-name>WebLauncherServiceImpl</servlet-name>
    <servlet-class>com.sibvisions.rad.ui.gwt.server.WebLauncherServiceImpl</servlet-class>
   
    <init-param>
      <param-name>main</param-name>
      <param-value>JVxFirstApp.bin.apps.firstapp.FirstApplication</param-value>
    </init-param>
</servlet>


Mir ist bewusst, dass man diverse XML’s erstellen kann, um der Applikation beim Start entsprechende Parameter übergeben zu können, dies wurde von mir aber nicht umgesetzt.

Bei der Ausführung der Web Applikation auf einem Tomcat6 entsteht dann folgender Fehler:

Code: Select all
java.lang.NoClassDefFoundError: JVxFirstApp/bin/apps/firstapp/FirstApplication (wrong name: apps/firstapp/FirstApplication)
   at java.lang.ClassLoader.defineClass1(Native Method)
   at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
   at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
   at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2818)
   at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1159)
   at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1647)
   at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
   at java.lang.Class.forName0(Native Method)
   at java.lang.Class.forName(Class.java:264)
   at com.sibvisions.util.Reflective.construct(Unknown Source)
   at com.sibvisions.rad.ui.ApplicationUtil.createApplication(Unknown Source)
   at com.sibvisions.rad.ui.web.impl.WebLauncher.<init>(Unknown Source)
   at com.sibvisions.rad.ui.gwt.server.WebLauncherServiceImpl.startApplication(Unknown Source)
   at com.sibvisions.rad.ui.gwt.server.WebLauncherServiceImpl.dispatchEvent(Unknown Source)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:616)
   at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:562)
   at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:207)
   at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:243)
   at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
   at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
   at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
   at java.lang.Thread.run(Thread.java:679)


Nun meine Fragen:
    - Ist bei der Erstellung der Web Applikation hinsichtlich des Eclipse-Projektes (Dynamisches Web Projekt) etwas Spezielles zu beachten oder war es gar das falsche Projekt?

    - Muss ich beim Kopieren der „bereits installierten Applikation“ etwas Besonderes beachten?

    - Muss die "bereits installierte Applikation" besondere Eigenschaften an einer bestimmten stelle haben und kann ich ersatzweise auch ein JAR-Archiv exportieren?

    - Werden zusätzliche Parameter per XML bei der Umsetzung in Bezug auf die Web UI benötigt? Oder muss ich etwas anderes bei der web.xml / webui.html beachten?


Anbei noch ein Screenshot meiner Arbeit, die ein gutes Bild meiner aktuellen Situation abgibt:
workscreen.png
workscreen.png (191.37 KiB) Viewed 6699 times
JekoschIT
 
Posts: 4
Joined: Thu Dec 06, 2012 6:16 pm

Re: Web UI Integration: java.lang.NoClassDefFoundError

Postby johnit » Thu Dec 06, 2012 10:24 pm

Hi,

sieht bei dir sehr verwirrend aus?

Ich habs damals hinbekommen aber bin anders rangegangen: 1. Tomcat standalone aufgesetzt, 2. App in jar gepackt, 3. WebUI entpackt in die Ordner aus dem Posting.

Die html Seite habe ich gar nicht angefasst. Die Applikationsklasse habe ich nur im web.xml eingerichtet.

Kann es sein das du beim Erstellen des Archivs etwas falsch gemacht hast?
Mich verwirrt JVxFirstApp.bin, weil bei mir war die Klasse einfach apps.firstapp.FirstApplication.
-> Das steht auch in deiner Exception so: wrong name: apps/firstapp/FirstApplication

Pack doch einfach nochmals den Inhalt den bin Verzeichnisses in ein neues jar und probiers dann. Sieht aus als hättest du zu viel ins jar gepackt.

Nachdem bei mir die Standalone Version funzte habe ich mich ans Setup mit Eclipse gemacht und auch ein dynamisches Projekt erstellt. Ich hab die Anleitung aber etwas anders interpretiert, weil ich dachte das ist die Anleitung zum Installieren einer fertigen Applikation und nicht zum Coden? aber nicht so wichtig.

Bei mir läuft nun das dynamische Web Projekt mit live Sourcen (ohne jar). Ich habs jetzt auch so weit das ich 2 Eclipse Projekte habe und das Web Projekt die Sourcen aus dem anderen Projekt referenziert, weil ich dann nicht immer den Server brauche.

Hoffe das hilft weiter?

-
John
johnit
 
Posts: 18
Joined: Fri Nov 16, 2012 5:58 pm

Re: Web UI Integration: java.lang.NoClassDefFoundError

Postby JekoschIT » Fri Dec 07, 2012 4:31 pm

Hi John,

danke für deine Ausführungen. Sie haben mir einen sehr guten Ansatz gegeben, die richtigen Einstellungen vor zu nehmen. Bei mir läuft das dynamische Web Projekt nun auch so, dass es das andere Projekt per Deployment Assembly (-> Properties des Projektes)referenziert. In der entsprechenden Web App Library taucht das referenzierte Projekt nun auf.

Damit das Projekt aber ausgeführt werden kann, habe ich noch eine manuelle Erweiterung vorgenommen. Unter WebContent/WEB-INF habe ich die Verzeichnisstruktur /rad/apps/firstapp hinzugefügt, wobei firstapp ein verlinkter Ordner auf das entsprechende Projekt ist. Das habe ich desswegen gemacht, damit die config.xml zur Laufzeit gefunden werden kann. Dazu wieder eine Frage: Ist es da sinnvoll den gesamten Projektordner zu verlinken, reicht eine Referenz auf die config.xml oder sollte da eine eigene config.xml erstellt werden?

Mit diesen Änderungen stand ich dann jedenfalls vor dem Login meines Projektes ... woraufhin das nächste Problem entstand. Im Login sollte bei einer falschen Eingabe eine java.lang.SecurityException auftreten, was aber nicht passiert. Stattdessen entsteht eine NullPointerException (auch bei eigentlich korrekten Angaben), hier mal der Fehler:

Code: Select all
java.lang.NullPointerException at com.sibvisions.rad.server.config.ApplicationZone.getProperty(Unknown Source)
at com.sibvisions.rad.server.config.UpToDateConfigFile.getProperty(Unknown Source)
at com.sibvisions.rad.server.MasterSession.<init>(Unknown Source)
at com.sibvisions.rad.server.DefaultSessionManager.createSession(Unknown Source)
at com.sibvisions.rad.server.Server.createSessionIntern(Unknown Source)
at com.sibvisions.rad.server.Server.createSession(Unknown Source)
at com.sibvisions.rad.server.DirectServerConnection.open(Unknown Source)
at javax.rad.remote.MasterConnection.open(Unknown Source)
at com.sibvisions.rad.application.Application.doLogin(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at javax.rad.util.EventHandler$ListenerHandler.dispatchEvent(Unknown Source)
at javax.rad.util.EventHandler.dispatchEvent(Unknown Source)
at javax.rad.util.RuntimeEventHandler.dispatchEvent(Unknown Source)
at com.sibvisions.rad.ui.gwt.server.WebLauncherServiceImpl.action(Unknown Source)
at com.sibvisions.rad.ui.gwt.server.WebLauncherServiceImpl.dispatchEvent(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:562)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:207)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:243)
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:679)


Ich vermute, dass es entweder etwas mit der ServerConnection oder mit dem Session-Lifecycle-Objekt zu tun hat, kann das genaue Problem aber nicht identifizieren.

Derzeit verwende ich eine DirectServerConnection, Server und Client befinden sich auf einer VM. Anbei noch ein Screenshot:
workscreen.png
workscreen.png (175.62 KiB) Viewed 6678 times
JekoschIT
 
Posts: 4
Joined: Thu Dec 06, 2012 6:16 pm

Re: Web UI Integration: java.lang.NoClassDefFoundError

Postby johnit » Fri Dec 07, 2012 4:52 pm

Dieses Problem hatte ich nicht, aber du hast recht! Die config.xml habe ich verlinkt. Ich hab nur die config.xml verlinkt und die Verzeichnisstruktur selbst erstellt. Aber ich werde das ändern, damit ich den Appnamen nicht nachziehen muss sollte ich den mal ändern. Ist aber denke ich vollkommen Wurst.

Die Exception kam mir bisher nicht unter.
johnit
 
Posts: 18
Joined: Fri Nov 16, 2012 5:58 pm

Re: Web UI Integration: java.lang.NoClassDefFoundError

Postby johnit » Fri Dec 07, 2012 6:06 pm

Hast du auch die config vom Server gelinked?
johnit
 
Posts: 18
Joined: Fri Nov 16, 2012 5:58 pm

Re: Web UI Integration: java.lang.NoClassDefFoundError

Postby JekoschIT » Sun Dec 09, 2012 1:48 pm

Die Server-Config ist verlinkt, bzw. ich habe es auch mit einer eigenen config.xml ausprobiert, doch das Ergebnis ist das Gleiche. Müssen dort spezielle Angaben rein (wenn ja, welche genau?) oder bleibt sie quasi leer und JVx bezieht seine Informationen aus der config.xml der App?
JekoschIT
 
Posts: 4
Joined: Thu Dec 06, 2012 6:16 pm

Re: Web UI Integration: java.lang.NoClassDefFoundError

Postby Development@SIB » Mon Dec 10, 2012 2:29 pm

Die NullPointerException besagt das die ServerZone nicht gefunden wurde. Das ist jedoch ungewöhnlich wenn Sie die config.xml an die richtigen Positionen verlinkt haben.

Verwenden Sie bitte einen aktuellen nightly build um das Problem zu verifizieren. Im Idealfall erhalten Sie nun eine aussagekräftigere Fehlermeldung?
User avatar
Development@SIB
 
Posts: 311
Joined: Mon Sep 28, 2009 1:54 pm

Re: Web UI Integration: java.lang.NoClassDefFoundError

Postby JekoschIT » Fri Dec 14, 2012 2:10 pm

Nach einer etwas längeren Suche bin ich selbst auf den von mir verschuldeten Fehler gekommen. Von daher erstmal danke für die Unterstützung, wodurch ich die Problematik letztendlich lösen konnte.

johnit wrote:Hast du auch die config vom Server gelinked?


Ich sagte zwar, dass ich sie gelinked habe, aber in Wirklichkeit hatte ich das nicht richtig. Mir ist erst später bewusst geworden, dass JVx die Server-config.xml in folgender Verzeichnisstruktur sucht:
rad --> server --> config.xml

und nicht, so wie von mir fälschlicherweise angenommen, in:
rad --> apps --> [Appname] --> server --> config.xml

Ich wollte nicht unnötig Verwirrung stiften. Die Anwendung funktioniert jetzt jedenfalls so wie sie soll und ich kann weiter JVx testen.

Ich bedanke mich noch einmal recht herzlich für die Unterstützung.
JekoschIT
 
Posts: 4
Joined: Thu Dec 06, 2012 6:16 pm

Re: Web UI Integration: java.lang.NoClassDefFoundError

Postby Support@SIB » Fri Dec 14, 2012 2:33 pm

Gut, daß Ihr Projekt nun wie gewünscht funktioniert.
User avatar
Support@SIB
 
Posts: 200
Joined: Mon Sep 28, 2009 1:56 pm


Return to Entwicklung