RCP Überführen einer RCP-Anwendung nach RAP

dzim

Top Contributor
Hallo zusammen,

ich wollte mich mal erkundigen, ob ihr mit dem Thema schon Erfahrungen gesammelt hat.
Auch wenn ich im groben und ganzen nicht immer der Meinung bin, das unbedingt alles in die Cloud muss, sehe ich gerade einige Vorteile, wenn ich meine Anwendung portieren könnte.

Ich weiß, dass einige Kern-Konzepte meiner Gegenwärtigen RCP inkompatibel zu einer RAP-Anwendung sind, aber mir ist schon klar, dass es nicht ganz ohne Arbeit geht.

Meine Fragen wären folgende:
1) Welcher Application-Server bietet sich dafür an?
2) Funktionieren Eclipse Forms unter RAP?
3) Wie macht man es dort dann mit der Benutzerverwaltung? (Best practices...)

Thx,
Daniel
 

dzim

Top Contributor
Ich hab noch ein bisschen herumgespielt, die Target Runtime erstellt, diese danach in meine bisherige integriert (sonst hätte ich so viele Fehler bekommen...).

Der EntryPoint ist erstellt und in der plugin.xml verlinkt, dennoch bekomme ich beim Start der RAP-App einen Fehler:

Der Link ist lokal bei mir: http://127.0.0.1:37597/ssdtool?startup=view
Code:
HTTP ERROR 404

Problem accessing /ssdtool. Reason:

    ProxyServlet: /ssdtool

Powered by Jetty://

Er findet's nicht... Ok... Aber warum ist mir jetzt nicht wirklich klar.

Mein EntryPoint sieht wie folgt aus (aus einem Beispiel kopiert):
Java:
public class SSDToolEntryPoint implements IEntryPoint {

	public SSDToolEntryPoint() {
	}

	@Override
	public int createUI() {
		Display result = PlatformUI.createDisplay();
		return PlatformUI.createAndRunWorkbench(result,
				new ApplicationWorkbenchAdvisor());
	}
}

public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {

	private static final String PERSPECTIVE_ID = "myapp.rcp.pfs.ssdtool.ui.reportConfigurationPerspective"; //$NON-NLS-1$

	@Override
	public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
			IWorkbenchWindowConfigurer configurer) {
		return new ApplicationWorkbenchWindowAdvisor(configurer);
	}

	@Override
	public IAdaptable getDefaultPageInput() {
		// IWorkspace workspace = ResourcesPlugin.getWorkspace();
		// return workspace.getRoot();
		return SSDToolPlugin.getDefault().getSSDToolModel().getRootTask();
	}

	@Override
	public void initialize(IWorkbenchConfigurer configurer) {
		super.initialize(configurer);
		configurer.setSaveAndRestore(true);
	}

	@Override
	public String getInitialWindowPerspectiveId() {
		return PERSPECTIVE_ID;
	}

	@Override
	public boolean preShutdown() {
		List<Job> uninterruptableJobs = new ArrayList<Job>();
		Job[] jobs = Job.getJobManager().find(null);
		StringBuilder sb = new StringBuilder();
		if (jobs != null && jobs.length > 0) {
			for (int i = 0; i < jobs.length; i++) {
				if (!(jobs[i] instanceof UninterruptableJob)
						&& !(jobs[i] instanceof UninterruptableUIJob)) {
					continue;
				}
				uninterruptableJobs.add(jobs[i]);
				sb.append(jobs[i].getName());
				if (!jobs[i].isUser()) {
					sb.append(Messages
							.getString("ApplicationWorkbenchAdvisor.jobs.background")); //$NON-NLS-1$
				}
				if ((i + 1) < jobs.length) {
					sb.append("\n"); //$NON-NLS-1$
				}
			}
		}
		if (!uninterruptableJobs.isEmpty()) {
			boolean exit = MessageDialog
					.openQuestion(
							PlatformUI.getWorkbench()
									.getActiveWorkbenchWindow().getShell(),
							Messages.getString("ApplicationWorkbenchAdvisor.MessageDialog.Text"), //$NON-NLS-1$
							String.format(
									Messages.getString("ApplicationWorkbenchAdvisor.MessageDialog.confirm.exit.text") //$NON-NLS-1$
									, jobs.length, sb.toString()));
			if (exit) {
				return super.preShutdown();
			} else {
				return false;
			}
		}
		return super.preShutdown();
	}
}

Meine Herangehensweise war, dass ich die App aus dem Product-File heraus gestartet hatte. Da das nicht funktioniert hat, habe ich die Run Config überprüft, den Entry-Point angegeben und die Plugins angepasst.
Vorher habe ich die neuen Dependencies im Manifest als optional angegeben. (rap.ui, ~.forms, ~.intro, rap.help, rap.jface.databinding) die bestehenden habe ich auch auf optional gesetzt.

Was mich dabei wundert: Ich habe zwar source-Plugins für jface und workbench gesehen, aber keine "fertigen" Plugins dazu...

Ich sehe gerade, dass es auf der OSGi-Konsole einige Exceptions gibt - vielleicht könnt ihr ja da was mit anfangen...
Code:
14:26:43.829 [Start Level Event Dispatcher] DEBUG org.mortbay.log - started Server@6fb3d6
14:26:44.176 [17404503@qtp-21569784-0] DEBUG org.mortbay.log - EOF
14:26:44.223 [25678348@qtp-21569784-2 - /ssdtool?startup=view] DEBUG org.mortbay.log - REQUEST /ssdtool on org.mortbay.jetty.HttpConnection@10a7be0
14:26:44.223 [25678348@qtp-21569784-2 - /ssdtool?startup=view] DEBUG org.mortbay.log - sessionManager=org.mortbay.jetty.servlet.HashSessionManager@4adb34
14:26:44.223 [25678348@qtp-21569784-2 - /ssdtool?startup=view] DEBUG org.mortbay.log - session=null
14:26:44.224 [25678348@qtp-21569784-2 - /ssdtool?startup=view] DEBUG org.mortbay.log - servlet=org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet-3866956
14:26:44.225 [25678348@qtp-21569784-2 - /ssdtool?startup=view] DEBUG org.mortbay.log - chain=null
14:26:44.225 [25678348@qtp-21569784-2 - /ssdtool?startup=view] DEBUG org.mortbay.log - servlet holder=org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet-3866956
14:26:44.282 [25678348@qtp-21569784-2 - /ssdtool?startup=view] DEBUG org.mortbay.log - RESPONSE /ssdtool  404

!ENTRY org.eclipse.osgi 2 1 2011-04-26 14:26:44.366
!MESSAGE NLS unused message: ECLIPSE_CONSOLE_OTHER_VERSION in: org.eclipse.core.runtime.internal.adaptor.EclipseAdaptorMessages

!ENTRY org.eclipse.osgi 2 1 2011-04-26 14:26:44.367
!MESSAGE NLS unused message: fileManager_couldNotSave in: org.eclipse.core.runtime.internal.adaptor.EclipseAdaptorMessages

!ENTRY org.eclipse.osgi 4 0 2011-04-26 14:26:44.381
!MESSAGE Ein unerwarteter Laufzeitfehler ist aufgetreten.
!STACK 0
java.lang.IllegalArgumentException: An entry point named 'application' already exists.
	at org.eclipse.rwt.internal.lifecycle.EntryPointManager.register(EntryPointManager.java:51)
	at org.eclipse.rap.ui.internal.application.ApplicationRegistry.registerApplication(ApplicationRegistry.java:74)
	at org.eclipse.rap.ui.internal.application.ApplicationRegistry.registerApplicationEntryPoints(ApplicationRegistry.java:92)
	at org.eclipse.ui.internal.WorkbenchPlugin$3.addingService(WorkbenchPlugin.java:1109)
	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:896)
	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:261)
	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:233)
	at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:840)
	at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:104)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:933)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227)
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:149)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:756)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:711)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:206)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:507)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:525)
	at org.eclipse.equinox.http.registry.internal.HttpServiceTracker.open(HttpServiceTracker.java:43)
	at org.eclipse.equinox.http.registry.internal.Activator.addingService(Activator.java:59)
	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:896)
	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:261)
	at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:184)
	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:339)
	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:273)
	at org.eclipse.equinox.http.registry.internal.Activator.start(Activator.java:37)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:783)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:774)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:755)
	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:370)
	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:374)
	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1067)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:561)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:546)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:459)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:440)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337)

!ENTRY org.eclipse.rap.ui.workbench 4 0 2011-04-26 14:26:44.383
!MESSAGE 
!STACK 0
java.lang.IllegalArgumentException: An entry point named 'application' already exists.
	at org.eclipse.rwt.internal.lifecycle.EntryPointManager.register(EntryPointManager.java:51)
	at org.eclipse.rap.ui.internal.application.ApplicationRegistry.registerApplication(ApplicationRegistry.java:74)
	at org.eclipse.rap.ui.internal.application.ApplicationRegistry.registerApplicationEntryPoints(ApplicationRegistry.java:92)
	at org.eclipse.ui.internal.WorkbenchPlugin$3.addingService(WorkbenchPlugin.java:1109)
	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:896)
	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:261)
	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:233)
	at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:840)
	at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:104)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:933)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227)
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:149)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:756)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:711)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:206)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:507)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:525)
	at org.eclipse.equinox.http.registry.internal.HttpServiceTracker.open(HttpServiceTracker.java:43)
	at org.eclipse.equinox.http.registry.internal.Activator.addingService(Activator.java:59)
	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:896)
	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:261)
	at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:184)
	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:339)
	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:273)
	at org.eclipse.equinox.http.registry.internal.Activator.start(Activator.java:37)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:783)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:774)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:755)
	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:370)
	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:374)
	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1067)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:561)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:546)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:459)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:440)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337)

!ENTRY org.eclipse.help.ui 4 0 2011-04-26 14:26:44.650
!MESSAGE 
!STACK 0
org.osgi.framework.BundleException: Ausnahme in org.eclipse.help.ui.internal.HelpUIPlugin.start() von Bundle org.eclipse.help.ui.
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:806)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:755)
	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:370)
	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:374)
	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1067)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:561)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:546)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:459)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:440)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337)
Caused by: java.lang.IllegalStateException: Die Arbeitsumgebung wurde noch nicht erstellt.
	at org.eclipse.ui.PlatformUI.getWorkbench(PlatformUI.java:92)
	at org.eclipse.help.ui.internal.HelpUIPlugin.start(HelpUIPlugin.java:108)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:783)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:774)
	... 11 more
Root exception:
java.lang.IllegalStateException: Die Arbeitsumgebung wurde noch nicht erstellt.
	at org.eclipse.ui.PlatformUI.getWorkbench(PlatformUI.java:92)
	at org.eclipse.help.ui.internal.HelpUIPlugin.start(HelpUIPlugin.java:108)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:783)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:774)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:755)
	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:370)
	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:374)
	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1067)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:561)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:546)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:459)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:440)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337)

edit: Ich habe jface und workbench von Hand hinzugefügt, weil sie in der Target Runtime eigentlich existieren - es gibt auch keine Fehler, ich gehe mal davon aus, dass das also geht...
 
Zuletzt bearbeitet:

dzim

Top Contributor
Ja, das ist ja auch rel. einfach: org.eclipse.ui gegen org.eclipse.rap.ui austauschen u.s.w.
Ich vermute, dass aber irgend eines der anderen Plugins da noch ärger macht...

Darüber hinaus hab ich (noch) nicht ganz begriffen, wie mir SessionSingletonBase weiterhilft. Ich muss nun mal so denken, das es mehrere gleichzeitig, aber mit unterschiedlichen, sprich eigenen, Aufgabenbereichen verwenden können.
 

dzim

Top Contributor
Ich hab mal wieder ein bisschen herumgespielt und komme zu dem vorläufigen Schluss, dass eine umbauen meiner Anwendung wohl ein Graus wird. Von den eigenen Plugins der Anwendung sprech' ich jetzt mal lieber noch nicht (da ist immerhin die Business-Logik drin enthalten...). Allein meine Grund-Plattform macht genug Probleme (Dependency zu einem Core-Plugin, das einiges an gesharter GUI enthält)...

Ich hatte dann einige Start-Schwierigkeiten mit neu erstellten Templates (Eclipse Community Forums), jetzt aber steh ich schlicht und ergreifend aber vor einer Design-Entscheidung, wie sie Lars Vogel vorgeschlagen hat:
Fragmente...
Das Idee dabei ist, dass ich ja die Dependencies (rcp oder rap) in die Fragmente verlege.
Dummerweise hat so ein Plugin aber i.d.R. einen Activator... Erweitert bei UI-Plugins gerne org.eclipse.ui.plugin.AbstractUIPlugin.
Ich frage mich, wie ich dabei vorgehen soll? Den Activator auch in die Fragmente verlegen?
Im Prinzip bleibt dann nur ein fast völlig "nacktes" Plugin zurück und alle UI-Klassen sind auf die Fragmente verlegt - und müssen dann doch wieder zwei mal gepflegt werden. Vielleicht versteh ich es ja nur Grundlegend falsch, aber bislang versteh ich Single-Sourcing anders...
 

Sonecc

Gesperrter Benutzer
Also wir nutzen auf der Arbeit RAP und RCP für die gleiche Anwendung. Einige unserer Plugins mussten dabei in Fragmente aufgeteilt werden, was ja nicht so unbedingt schwierig ist. Die meisten waren aber genauso wie sie in RCP existierten auch in RAP nutzbar. Einzig wenn es darum geht zu zeichnen oder bei speziellen Dingen wie Reports und Co wirds etwas schwieriger.

AbstractUIPlugin stellt bei uns übrigens ebenfalls kein Problem dar.
Ich denke wirklich, dass du da etwas falsch verstanden hast und ggf. die Dependencies nicht korrekt eingestellt hast (rap und rcp spezifische Dependencies sollten als optional markiert sein und beide sollten enthalten sein.)
 

dzim

Top Contributor
Ein klassischer PEBCAC würde ich sagen. Ich versuche es mal noch einmal mit den optionalen Dependencies!
Ich meine, mich drängt niemand außer mich selbst. Ich werde einfach immer weiter probieren und hoffe, das der (gedankliche) Knoten mal platzt! ;-)

[edit] Ich versuche es gerade mal wieder und frage mich folgendes:
Es gibt von rap Ersatz für help und jface, aber nicht für alle von deren Plugins.
in meiner Applikation sind derzeit
Code:
org.eclipse.help
org.eclipse.help.appserver
org.eclipse.help.base
org.eclipse.help.ui
org.eclipse.help.webapp
ich denke, dass es wenigstens mit org.eclipse.help.ui Probleme geben wird.
Bei jface ist noch org.eclipse.jface.text das Problem.
Meine Applikation hat zum Beispiel eine Depedency zu org.eclipse.ui.console, wenn ich diese optional mache - wie kann ich dann dafür sorgen dass das Toolbar-Icon zum aktivieren verschwindet, wenn das Plugin nicht verfügbar ist?
Darüber hatte ich in einem Test mit reinem RAP mal das Problem, das eine Klassen nicht den vollen Funktionsumfang unterstützen, was ich jetzt nicht mal mitbekomme, wenn ich die optionalen Dep. nutze. Beispiel: Im WorkbenchActionBarAdvisor habe ich eine Action für den About-Dialog
Code:
aboutAction = ActionFactory.ABOUT.create(window);
. Im reinem RAP gibt es ActionFactory.ABOUT nicht...

[edit2]
Code:
!ENTRY com.ipoque.p2p.tracker.rcp.core 4 0 2011-05-02 14:13:36.686
!MESSAGE 
!STACK 0
org.osgi.framework.BundleException: Der Activator myapp.rcp.core.CorePlugin für Bundle myapp.rcp.core ist ungültig
	at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:156)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:751)
	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:370)
	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:374)
	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1067)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:561)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:546)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:459)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:440)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337)
Caused by: java.lang.NoClassDefFoundError: org/eclipse/ui/plugin/AbstractUIPlugin
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:580)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:550)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:481)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:469)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:449)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:393)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:469)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
	at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:338)
	at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:232)
	at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:149)
	... 11 more
Caused by: java.lang.ClassNotFoundException: org.eclipse.ui.plugin.AbstractUIPlugin
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:506)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
	... 30 more
Root exception:
java.lang.NoClassDefFoundError: org/eclipse/ui/plugin/AbstractUIPlugin
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:580)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:550)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:481)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:469)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:449)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:393)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:469)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
	at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:338)
	at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:232)
	at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:149)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:751)
	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:370)
	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:374)
	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1067)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:561)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:546)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:459)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:440)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337)
Caused by: java.lang.ClassNotFoundException: org.eclipse.ui.plugin.AbstractUIPlugin
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:506)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
	... 30 more
so etwas passiert, wenn ich rap.ui verwende... Ich schaffe es irgendwie noch immer nicht, meiner alten Anwendung beizubringen, dass sie unter RAP funktionieren soll! Ärgerlich!
Hinterher geht noch - wie man sich denken kann - einiges anderes schief...
 
Zuletzt bearbeitet:

dzim

Top Contributor
Ich hab das ganze noch mal etwas anders angegangen und - erst einmal zu Testzwecken - neu geschrieben.
Nach einigen Anpassungen an einem bestehenden Plugin, das ich ebenfalls zum Testen mal angepasst habe, habe ich es erst einmal hinbekommen, meine Anwendung wieder zu starten.
Das ich auch konzeptionell einiges anpassen muss, war mir klar, aber ich hatte vergessen, dass dazu auch so was triviales wie Datei-Auswahl und -Upload gehören...

Wie macht man in RAP so etwas? Wenn ich das Ganze produktiv werden lassen will, muss es die Möglichkeit für mich geben, Dateien hoch oder runter zu laden. Nur wie???
 

dzim

Top Contributor
Beinahe hätte ich gestern rufen können "Heureka!" - kurzzeitig habe ich meine Anwendung nun doch auch als RAP zum Laufen bekommen.
Leider währte das Glück nur kurz, denn nach ein wenige aufräumen des Quellcodes (Ich wollte die für die RCP-Anwendung gerade zum testen durchaus sinnvolle Konsole in ein Fragment auslagern) ging es wieder einmal nicht mehr. Trotz rückgängig machen aller Änderungen und einem versuchten Neuanfang ist es mir nicht mehr gelungen, die Anwendung zu starten...

Ich bekomme derzeit folgende Meldungen:

Eclipse Konsole:
Code:
osgi> 2011-05-05 14:53:40.268:INFO:org.mortbay.log:Logging to STDERRorg.mortbay.log via org.mortbay.log.Slf4jLog
2011-05-05 14:53:40.344:INFO::jetty-6.1.x
2011-05-05 14:53:40.399:INFO::Started SelectChannelConnector@0.0.0.0:42179
!SESSION 2011-05-05 14:53:39.044 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.6.0_24
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=linux, ARCH=x86, WS=gtk, NL=de_DE
Command-line arguments:  -dev file:/home/dzimmermann/workspaces/pfs-workspace-rap/../configuration-SSDTool/dev.properties -os linux -ws gtk -arch x86 -consoleLog -console

!ENTRY com.ipoque.p2p.tracker.rcp.core 2 0 2011-05-05 14:53:40.541
!MESSAGE Could not load other PCP plugins - unable to retrieve the plugins or no plugins available.

!ENTRY com.ipoque.p2p.tracker.rcp.core 2 0 2011-05-05 14:53:40.553
!MESSAGE Could not load other PCP plugins - unable to retrieve the plugins or no plugins available.

Die letzten beiden Meldungen sind ok, denn es gibt keine Plugins für die Anwendung zu laden. Eigentlich ist es imho ein gutes Zeichen, das die Meldung überhaupt kommt, was mich stört, ist das sie zwei mal erscheint. Und natürlich dass, nichts weiter passiert, sondern folgender 404 im Browser angezeigt wird:

Browser:
Code:
HTTP ERROR 404

Problem accessing /view. Reason:

    ProxyServlet: /view

Powered by Jetty://

Und hier der Schnipsel aus meiner plugin.xml (branding und entry point).
Code:
   <extension
         point="org.eclipse.rap.ui.branding">
      <branding
            defaultEntrypointId="myapp.rcp.pfs.ssdtool.SSDToolEntryPoint"
            id="myapp.rcp.pfs.ssdtool.SSDToolEntryPoint.branding.1"
            servletName="view">
      </branding>
   </extension>
   <extension
         point="org.eclipse.rap.ui.entrypoint">
      <entrypoint
            class="myapp.rcp.pfs.ssdtool.SSDToolEntryPoint"
            id="myapp.rcp.pfs.ssdtool.SSDToolEntryPoint"
            parameter="pcp">
      </entrypoint>
   </extension>

Mein EntryPoint:
Java:
public class SSDToolEntryPoint implements IEntryPoint {

	public SSDToolEntryPoint() {
	}

	@Override
	public int createUI() {

		Display display = PlatformUI.createDisplay();
		ApplicationWorkbenchAdvisor awa = new ApplicationWorkbenchAdvisor();

		return PlatformUI.createAndRunWorkbench(display, awa);
	}
}

Mehr Logging finde ich nirgendwo, also stehe ich - gelinde gesagt - ziemlich blöd da.
Habt ihr noch Ideen?
 

dzim

Top Contributor
Strange...

Mit "Browser" habe ich bisher immer den internen von Eclipse gemeint. Wenn ich nun den Link - auch trotz des o.g. Fehlers - in einen externen Browser packe, kann ich die Anwendung doch sehen (es sei denn es gibt noch Fehler, diese erscheinen aber auch erst, wenn die Anwendung im externen Browser gestartet wird).
Wenn ich die Anwendung im internen Browser noch einmal neu lade, dann startet sie, zeigt mir aber nicht meinen Entry-Point sondern den der Demo-Anwendung (in der Eclipse Hilfe wird erwähnt, diese wäre nötig um jede RAP-Anwendung zu starten - kann ich mir zwar nicht vorstellen, hatte bisher aber mich eher darüber gefreut, dass meine App überhaupt geht).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Problem bei Einbinden einer DLL in Java-Projekt Plattformprogrammierung 4
D IPerspectiveFactory in einer e4 application Plattformprogrammierung 2
B Entwicklung einer Webplattform Plattformprogrammierung 1
maestr0 WorkingSets mit Komma getrennt in einer ComboBox anzeigen lassen Plattformprogrammierung 2
dzim Migration einer bestehenden Applikation nach e4 Plattformprogrammierung 11
Mike90 Error beim Öffnen einer RCP-App Plattformprogrammierung 2
W SWTException beim Schließen einer ViewPart Plattformprogrammierung 13
X Teile einer p2 UpdateSite mit b3 aggregator spiegeln Plattformprogrammierung 4
S RCP name einer view ändern Plattformprogrammierung 2
Mike90 RCP 2Views und einer davon als Placeholder Plattformprogrammierung 4
T Expression Definitions in einer RCP Plattformprogrammierung 3
L RCP Canvas in einer View? Plattformprogrammierung 4
M Eclipse RCP: überflüssige Icons in einer Toolbar Plattformprogrammierung 6
F Eclipse Plugin - Rückgabewert einer Methode Plattformprogrammierung 4
dzim Kontrolliertes Beenden einer Application Plattformprogrammierung 7
S In einem Plugin main einer anderen Klasse aufrufen Plattformprogrammierung 18
C RCP: Veraenderungen innerhalb einer View per Extension?! Plattformprogrammierung 7
K TextFeld in einer ToolBar Plattformprogrammierung 2
K Position einer Multiple View speichern Plattformprogrammierung 6
dzim Implementieren einer Help-Seite Plattformprogrammierung 18
S Literatur: Kennt einer ein gutes RCP Buch Plattformprogrammierung 13
R SWT: nur eine Instanz einer View erlauben Plattformprogrammierung 5
S XMI Datensatz in RAP Anwendung nutzen Plattformprogrammierung 2
Z MySQL-Treiber in RAP-Anwendung für Jetty im OSGI- Equinox- Maven-Dschungel Plattformprogrammierung 0
J Probleme mit Toolbar Konfiguartion in e4 Anwendung. Plattformprogrammierung 0
P Artifact-Editor in RCP-Anwendung Plattformprogrammierung 14
D Action von RCP-Anwendung extern aufrufen Plattformprogrammierung 4
S Wie lauffähige .jar-Datei mit Netbeans für Java3D Anwendung erstellen? Plattformprogrammierung 8
N Was brauche ich für eine Web- und was für eine Fat-Client-Anwendung? Plattformprogrammierung 14
M Unter welchem Benutzer läuft eine RCP-Anwendung? (Windows-Berechtigungsproblem) Plattformprogrammierung 7
G RCP Die Anwendung {0} konnte nicht in der Registry gefunden werden. Plattformprogrammierung 3
K OSGi Verteilte Anwendung? Plattformprogrammierung 9
E eclipse RCP Anwendung programmatisch / aus einem anderen Programme starten? Plattformprogrammierung 8
J RCP-Anwendung aus EMF erzeugen und vor allem danach modifizieren Plattformprogrammierung 11
S RCP Anwendung nicht weiterladen bei Exception in Plugin Plattformprogrammierung 2
K Bild Problem in exportierter RCP Anwendung Plattformprogrammierung 5
K Log4j in Eclipse RCP Anwendung Plattformprogrammierung 5
R Eclipse RCP Anwendung per Web start verteilen Plattformprogrammierung 23
dzim Eclipse 3.5: p2 in eigener Anwendung Plattformprogrammierung 11
SaSa83 Inkompatibilität meiner RCP Anwendung zwischen JAVA 1.5 & JAVA6 Plattformprogrammierung 2
H Visueller Editor für Eclipse RCP Anwendung Plattformprogrammierung 3
B Bildbearbeitung in Eclipse-RCP-Anwendung Plattformprogrammierung 8

Ähnliche Java Themen


Oben