eclipse

org.mortbay.thread.Timeout. exception bei neuer GWT webapplication mit instantiations gwt designer oder windowbuilder pro

Wenn man eine neue WebApplication mit der GWT SDK 2.0.3 und der App Engine SDK 1.3.3 in eclipse erstellt und dabei den Instantiations WindowBuilder Pro oder den GWT Designer verwendet, dann taucht der folgende Fehler auf, wenn man versucht die “GWT application” (google nennt dies “Development Mode”) zu starten.

Exception in thread “main” java.lang.NoSuchMethodError: org.mortbay.thread.Timeout.<init>(Ljava/lang/Object;)V
at org.mortbay.io.nio.SelectorManager$SelectSet.<init>(SelectorManager.java:306)
at org.mortbay.io.nio.SelectorManager.doStart(SelectorManager.java:223)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
at org.mortbay.jetty.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:303)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
at org.mortbay.jetty.Server.doStart(Server.java:233)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
at com.google.gwt.dev.shell.jetty.JettyLauncher.start(JettyLauncher.java:543)
at com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:421)
at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1035)
at com.google.gwt.dev.DevModeBase.run(DevModeBase.java:783)
at com.google.gwt.dev.DevMode.main(DevMode.java:275)

Leider konnte ich bisher nicht herausfinden warum dies passiert, aber ich habe einen Workaround gefunden, mit dem man das Problem verhindern und umgehen kann:

Statt die App Engine SDK 1.3.3 beim Anlegen des neuen Web Application Projektes zu verwenden, erstellt man das Projekt zunächst unter Verwendung der App Engine SDK 1.3.1. Nachdem das Projekt erstellt ist, kann man mit einem Rechts-Klick auf das Projektverzeichnis (in eclipse) die Properties des Projektes ändern: Unter Google>App Engine kann man nun von der App Engine 1.3.1 die Einstellung auf die App Engine 1.3.3 ändern; das Projekt läuft dann ohne Probleme unter der neuen Engine.

select new appengine in the properties

select new appengine in the properties



Missing required argument ‘module[s]‘ Google Web Toolkit – jetty startet nicht in eclipse – project is not GWT project

Missing required argument ‘module[s]‘
Google Web Toolkit 2.0.3
DevMode [-noserver] [-port port-number | "auto"] [-whitelist whitelist-string] [-blacklist blacklist-string] [-logdir directory] [-logLevel level] [-gen dir] [-bindAddress host-name-or-address] [-codeServerPort port-number | "auto"] [-server servletContainerLauncher[:args]] [-startupUrl url] [-war dir] [-extra dir] [-workDir dir] module[s]

where
-noserver Prevents the embedded web server from running
-port Specifies the TCP port for the embedded web server (defaults to 8888)
-whitelist Allows the user to browse URLs that match the specified regexes (comma or space separated)
-blacklist Prevents the user browsing URLs that match the specified regexes (comma or space separated)
-logdir Logs to a file in the given directory, as well as graphically
-logLevel The level of logging detail: ERROR, WARN, INFO, TRACE, DEBUG, SPAM, or ALL
-gen Debugging: causes normally-transient generated types to be saved in the specified directory
-bindAddress Specifies the bind address for the code server and web server (defaults to 127.0.0.1)
-codeServerPort Specifies the TCP port for the code server (defaults to 9997)
-server Specify a different embedded web server to run (must implement ServletContainerLauncher)
-startupUrl Automatically launches the specified URL
-war The directory into which deployable output files will be written (defaults to ‘war’)
-extra The directory into which extra files, not intended for deployment, will be written
-workDir The compiler’s working directory for internal use (must be writeable; defaults to a system temp dir)
and
module[s] Specifies the name(s) of the module(s) to host

Nachdem man einige Zeit mit einem GWT-Projekt in eclipse gearbeitet hat, kann es passieren, daß das Projekt sich nicht mehr als “GWT application” unter Jetty startetn lassen will. Ich versuche derzeit noch herauszufinden was da genau passiert. In der wischenzeit möchte ich kurz erläutern, wie man das Problem umgehen kann:

1) In eclipse vom “Run”-Menü den Menüpunkt “Run Configurations …” auswählen

2) Dann unter “GWT Application” und “Web Application” die Konfigurationen des Projektes löschen

Das war alles. Danach kann man wieder normal aus dem Selektor das Projekt als “GWT Application” starten und es läuft wieder problemlos unter Jetty.

GWT und tomcat: .war erzeugen mit eclispe um .war auf tomcat zu deployen

Wie man mit eclipse kompfortabel ein .war aus einem GWT-Projekt erzeugt, um es auf einem tomcat-Server zu deployen.

Im Grunde genommen sind es nur zwei einfache Schritte, um aus dem GWT-Projekt ein .war zu erzeugen:

Kurzversion:

Als erstes wird ein .jar aus dem “src”-Verzeichnis des Projektes generiert, welches in das “lib”-Verzeichnis des “war”-Verzeichnisses des GWT-Projektes gelegt werden muß. Der zweite Schritt ist dann das eigentliche generieren der .war-Datei, welche dann auf den tomcat-server deployed werden kann. Um den zweiten Schritt etwas kompfortabler zu gestalten habe ich hierfür ein Ant-Script geschrieben, welches das eigentliche .war erzeugt.

Detailierte Version – Schritt 1:

right_click_src

1) Rechts-Klick auf das "src"-Verzeichnis (anklicken für größere Darstellung)

1) Rechts-Klick auf das src Verzeichnis innerhalb des Projektes.

popup_export

2) "Export" anklicken (anklicken für größere Darstellung)

2) Das nebenstehende PopUp erscheint.

Aus diesem Menü “Export …” wählen.

Select_export_format

3) Exportformat: "JAR File" (anklicken für größere Darstellung)

3) Nun “JAR file” als Export-Format wählen

select_export_source_and_target

3) Quelle und Ziel auswählen (anklicken für größere Darstellung)

4) Es darf nur das “src”-Verzeichnis des Projektes ausgewählt sein.

Als Ziel für den Export muß folgender Pfad angegeben werden: <Verzeichnis des Projektes>/war/WEB-INF/lib/<projectname>.jar – dann auf “Finish” klicken.

Nun ist das GWT-Projekt soweit vorbereitet, daß es in ein .war gepackt werden kann um auf einem tomcat-Server deployed zu werden.

Detailierte Version – Schritt 2:

1) Es wird ein neues ANT-Script innerhalb des Projektes erstellt (Rechts-Klick auf das Projektverzeichnis, dann “New” und vom Untermenü “File” auswählen. Die neue Datei sollte z.B. “warbuilder.xml” heissen).

2) Folgender Inhalt muß in diese Datei kopiert werden. Dabei <projectname> durch den Namen des Projektes ersetzen:

<project name="<projectname>" basedir="." default="default">
 
	<target name="default" depends="buildwar,deploy"></target>
 
	<target name="buildwar">
		<war basedir="war" destfile="
<projectname>.war" webxml="war/WEB-INF/web.xml">
			<exclude name="WEB-INF/**" />
			<webinf dir="war/WEB-INF/">
				<include name="**/*.jar" />
			</webinf>
		</war>
	</target>
 
	<target name="deploy">
		<copy file="
<projectname>.war" todir="." />
	</target>
 
</project>
run_ant_script

5) Run the warbuilder ANT-script (click for larger view)

3) Die ersten beiden Schritte müssen für jedes Projekt nur einmal ausgeführt werden. Danach kann der warbuilder.xml immer wieder benutzt werden. Um das .war nun zu erzeugen klickt man einfach mit der rechten Maustaste auf den warbuilder.xml und wählt vom PopUp-Menü den Punkt “Run as” und vom Submenü “Ant Build” aus.

Die .war-Datei wird dann durch das ANT-Script erzeugt. You will find the .war-file in your ProjectFolder.

eclipse workbench reparieren – defekter eclipse workspace

Mein Workbench in eclipse wird leider sehr häufig beschädigt, und all die guten Ratschläge im Netz wie dies zu reparieren sei funktionieren nicht, da sie von der Tatsache ausgehen, daß eclipse gestartet ist. Was aber, wenn eclipse wegen der beschädigten Workbench überhaupt nicht mehr startet (Wie das normal bei mir der Fall ist)?

Als erstes sollte man das Logfile prüfen. Es ist im workbench-Verzeichnis zu finden und heißt “.metdata”. In diesem Verzeichnis ist die Datei “.log” zu finden. Öffne diese Datei und siehe nach, ob hier nicht etwas nützliches zu finden ist. Hier ist das File, welches ich heute erhalten habe:

!ENTRY org.eclipse.osgi 4 0 2009-06-25 18:56:21.330
!MESSAGE Application error
!STACK 1
org.apache.commons.lang.exception.NestableError: Java Model Exception: Java Model Status [src/net/project/windows [in project] does not exist]
	at com.instantiations.designer.core.utils.execution.ExecutionUtils.runRethrow(ExecutionUtils.java:66)
	at com.instantiations.designer.core.editor.DesignPage.initialize(DesignPage.java:96)
	at com.instantiations.designer.core.editor.multi.MultiMode.create(MultiMode.java:74)
	at com.instantiations.designer.core.editor.multi.MultiPagesMode.create(MultiPagesMode.java:63)
	at com.instantiations.designer.core.editor.multi.MultiPageEditor.createPartControl(MultiPageEditor.java:57)
	at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:661)
	at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:428)
	at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:594)
	at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:306)
	at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180)
	at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270)
	at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65)
	at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473)
	at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1256)
	at org.eclipse.ui.internal.PartStack.handleDeferredEvents(PartStack.java:1224)
	at org.eclipse.ui.internal.LayoutPart.deferUpdates(LayoutPart.java:400)
	at org.eclipse.ui.internal.PartSashContainer.handleDeferredEvents(PartSashContainer.java:1401)
	at org.eclipse.ui.internal.LayoutPart.deferUpdates(LayoutPart.java:400)
	at org.eclipse.ui.internal.WorkbenchPage.handleDeferredEvents(WorkbenchPage.java:1383)
	at org.eclipse.ui.internal.WorkbenchPage.deferUpdates(WorkbenchPage.java:1373)
	at org.eclipse.ui.internal.WorkbenchPage.access$14(WorkbenchPage.java:1364)
	at org.eclipse.ui.internal.WorkbenchPage$15.runWithException(WorkbenchPage.java:3261)
	at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:133)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3342)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3071)
	at org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803)
	at org.eclipse.ui.internal.Workbench$27.runWithException(Workbench.java:1363)
	at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:133)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3342)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3071)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2295)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2200)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:495)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:490)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:386)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
Caused by: Java Model Exception: Java Model Status [src/net/siteduke/windows [in SiteDuke] does not exist]
	at org.eclipse.jdt.internal.core.JavaElement.newNotPresentException(JavaElement.java:491)
	at org.eclipse.jdt.internal.core.PackageFragmentRoot.getUnderlyingResource(PackageFragmentRoot.java:678)
	at org.eclipse.jdt.internal.core.PackageFragment.getUnderlyingResource(PackageFragment.java:337)
	at org.eclipse.jdt.internal.core.Openable.getUnderlyingResource(Openable.java:333)
	at org.eclipse.jdt.internal.core.CompilationUnit.getUnderlyingResource(CompilationUnit.java:916)
	at com.instantiations.designer.core.editor.UndoManager.<init>(UndoManager.java:62)
	at com.instantiations.designer.core.editor.DesignPage$2.run(DesignPage.java:99)
	at com.instantiations.designer.core.utils.execution.ExecutionUtils.runRethrow(ExecutionUtils.java:64)
	... 52 more
 
!ENTRY org.eclipse.osgi 2 0 2009-06-25 18:56:21.409
!MESSAGE The following is a complete list of bundles which are not resolved, see the prior log entry for the root cause if it exists:
!SUBENTRY 1 org.eclipse.osgi 2 0 2009-06-25 18:56:21.409
!MESSAGE Bundle reference:file:plugins/org.eclipse.jdt.apt.pluggable.core_1.0.101.R34x_v20081108-1950.jar [216] was not resolved.
!SUBENTRY 2 org.eclipse.jdt.apt.pluggable.core 2 0 2009-06-25 18:56:21.410
!MESSAGE Missing imported package org.eclipse.jdt.internal.compiler.tool_0.0.0.
!SUBENTRY 2 org.eclipse.jdt.apt.pluggable.core 2 0 2009-06-25 18:56:21.410
!MESSAGE Missing imported package org.eclipse.jdt.internal.compiler.apt.dispatch_0.0.0.
!SUBENTRY 2 org.eclipse.jdt.apt.pluggable.core 2 0 2009-06-25 18:56:21.410
!MESSAGE Missing imported package org.eclipse.jdt.internal.compiler.apt.model_0.0.0.
!SUBENTRY 2 org.eclipse.jdt.apt.pluggable.core 2 0 2009-06-25 18:56:21.411
!MESSAGE Missing imported package org.eclipse.jdt.internal.compiler.apt.util_0.0.0.
!SUBENTRY 1 org.eclipse.osgi 2 0 2009-06-25 18:56:21.411
!MESSAGE Bundle reference:file:plugins/org.eclipse.jdt.compiler.apt_1.0.101.R34x_v20090114-1205.jar [218] was not resolved.
!SUBENTRY 2 org.eclipse.jdt.compiler.apt 2 0 2009-06-25 18:56:21.412
!MESSAGE Missing imported package org.eclipse.jdt.internal.compiler.tool_0.0.0.
!SUBENTRY 1 org.eclipse.osgi 2 0 2009-06-25 18:56:21.412
!MESSAGE Bundle reference:file:plugins/org.eclipse.jdt.compiler.tool_1.0.100.v_894_R34x.jar [219] was not resolved.
!SUBENTRY 1 org.eclipse.osgi 2 0 2009-06-25 18:56:21.412
!MESSAGE Bundle reference:file:plugins/com.instantiations.designer.swing.java6_7.0.0.200905010653.jar [417] was not resolved.

In diesem speziellen Fall steckt die nützliche Information hier: org.apache.commons.lang.exception.NestableError: Java Model Exception: Java Model Status [src/net/project/windows [in project] does not exist] Aus irgendeinem Grund kann eclipse eine spezielle Datei nicht mehr auf der Workbench öffnen. Nach einigen Versuchen habe ich dann einen Weg gefunden dieses Problem zu umgehen:

  • Lege eine Sicherheitskopie des “.metadata“-Verzeichnisses an (sehr wichtig!!)
  • Navigiere in das Verzeichnis “.plugins” welches sich in “.metadata” befindet
  • Lösche dort das Verzeichnis “org.eclipse.ui.workbench
  • Starte wieder eclipse und prüfe, ob noch alle Daten vorhanden sind.

Tip: Lege so häufig wie möglich eine komplette Sicherungskopie Deiner workbench an!

Ach ja – bitte vergiss auf keinen Fall: Du folgst diesem Rat auf eigene Verantwortung ;)

Erste Schritte mit GWT und XML unter com.google.gwt.xml

Die Entwicklung von Webapplikationen und Portalen mit eclipse, GWT (Google Web Toolkit) und apache tomcat ist einer der effektivsten Wege die es derzeit gibt: Das Ergebnis ist eine hochperformante, schnelle AJAX-Applikation. Um von der AJAX-Oberfläche mit dem tomcat-Server Daten auszutauschen, benutze ich gerne die GWT RPC, über die ich die Daten in XML-Form austausche.

Hierfür gibt es im GWT ein Paket: com.google.gwt.xml.client.*

com.google.gwt.xml.client.* ist ein vollständiges Toolkit um schnell und effektiv auf Clientseite (JavaScript) mit XML Datenströmen umzugehen.

Nachdem ich die notwendigen Pakete wie üblich importiert habe und einige Methoden zur Erstellung einer XML-Struktur geschrieben habe, trat beim Start der Applikation der folgende Fehler auf:

Line 52: No source code is available for type
com.google.gwt.xml.client.Document; did you forget to inherit a
required module?

Bis zu diesem Punkt war ich gewohnt, daß eclipse alles für mich regelt; so hatte ich keinen Ansatzpunkt, warum dieses Modul nicht korrekt vererbt wurde. So machte ich mich auf eine lange, aber erfolgreiche Suche in der Dokumentation und dem Projekt selbst, da auch google zu diesem Fehler keine Ergebnisse lieferte:

Um das XML-Modul korrekt zu vererben muß in der “gwt.xml” folgende Zeile ergänzt werden:

<inherits name="com.google.gwt.xml.XML" />

Die “gwt.xml” Datei kann unter folgendem Pfad gefunden werden: <project>/src/<your domain>/<project>.gwt.xml

Nachdem ich diese Zeile ergänzt hatte, ist es sehr einfach mit XML-Strukturen umzugehen. Ich werde hierzu noch einen Artikel veröffentlichen, sowie ich wieder etwas mehr Zeit für meinen Blog habe.

Get in contact:

Kategorien