Hallo,
sicher supertrivial, aber ich komme einfach nicht auf die Lösung... Ich gehe übrigens nach dem Buch Die OSGi Service Platform von G. Wütherich et. al. vor.
Es gibt drei Plugins:
Bundle 2 ist das Interface für Bundle 3. Bundle 1 und 2 werden beim Start geladen, Bundle 3 wird von Hand nachgeladen und meldet einen Service an. Bundle 1 schaut über einen ServiceTracker, wann ein Service angemeldet wird und schreibt etwas auf die Konsole.
Bundle 1 und 2 können auch gut aktiviert werden (bei beiden ist der Status active). Anschließend installiere ich Bundle 3 per [c]install file:/pfad/org.osgibook.translation.impl[/c], woraufhin es im Status installed ist. Ein folgendes [c]start 3[/c] schlägt mit folgendem Stacktrace fehl:
Ich verstehe nicht, wieso das Bundle seinen eigenen Activator nicht finden kann. Funde im Netz wiesen auf eine fehlerhafte [c]build.properties[/c] hin, aber die sieht bei mir aus wie bei allen anderen Bundles und die finden ihre Activator-Klassen:
Ein Schreibfehler bei der Activator-Klasse ist definitiv ausgeschlossen, da ich die Klasse innerhalb des Manifest-Editor gesucht und nicht von Hand geschrieben habe.
Ich habe spaßeshalber auch mal einen neuen Versuch gewagt und ein neues Bundle angelegt. Gleiches Resultat: Installieren geht, Starten nicht...
Wäre nett, wenn mir jemand bei meinen etwas frustrierenden OSGi-Anfängen helfen könne.
Gruß
mK
sicher supertrivial, aber ich komme einfach nicht auf die Lösung... Ich gehe übrigens nach dem Buch Die OSGi Service Platform von G. Wütherich et. al. vor.
Es gibt drei Plugins:
- org.osgibook.helloworld
- org.osgibook.translation
- org.osgibook.translation.impl
Bundle 2 ist das Interface für Bundle 3. Bundle 1 und 2 werden beim Start geladen, Bundle 3 wird von Hand nachgeladen und meldet einen Service an. Bundle 1 schaut über einen ServiceTracker, wann ein Service angemeldet wird und schreibt etwas auf die Konsole.
Bundle 1 und 2 können auch gut aktiviert werden (bei beiden ist der Status active). Anschließend installiere ich Bundle 3 per [c]install file:/pfad/org.osgibook.translation.impl[/c], woraufhin es im Status installed ist. Ein folgendes [c]start 3[/c] schlägt mit folgendem Stacktrace fehl:
Code:
org.osgi.framework.BundleException: The activator org.osgibook.translation.impl.Activator for bundle org.osgibook.translation.impl is invalid
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.start(AbstractBundle.java:284)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:276)
at org.eclipse.osgi.framework.internal.core.FrameworkCommandProvider._start(FrameworkCommandProvider.java:252)
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:597)
at org.eclipse.osgi.framework.internal.core.FrameworkCommandInterpreter.execute(FrameworkCommandInterpreter.java:155)
at org.eclipse.osgi.framework.internal.core.FrameworkConsole.docommand(FrameworkConsole.java:156)
at org.eclipse.osgi.framework.internal.core.FrameworkConsole.runConsole(FrameworkConsole.java:141)
at org.eclipse.osgi.framework.internal.core.FrameworkConsole.run(FrameworkConsole.java:105)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: org.osgibook.translation.impl.Activator
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)
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)
... 14 more
Nested Exception:
java.lang.ClassNotFoundException: org.osgibook.translation.impl.Activator
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)
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.start(AbstractBundle.java:284)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:276)
at org.eclipse.osgi.framework.internal.core.FrameworkCommandProvider._start(FrameworkCommandProvider.java:252)
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:597)
at org.eclipse.osgi.framework.internal.core.FrameworkCommandInterpreter.execute(FrameworkCommandInterpreter.java:155)
at org.eclipse.osgi.framework.internal.core.FrameworkConsole.docommand(FrameworkConsole.java:156)
at org.eclipse.osgi.framework.internal.core.FrameworkConsole.runConsole(FrameworkConsole.java:141)
at org.eclipse.osgi.framework.internal.core.FrameworkConsole.run(FrameworkConsole.java:105)
at java.lang.Thread.run(Thread.java:662)
Nested Exception:
java.lang.ClassNotFoundException: org.osgibook.translation.impl.Activator
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)
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.start(AbstractBundle.java:284)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:276)
at org.eclipse.osgi.framework.internal.core.FrameworkCommandProvider._start(FrameworkCommandProvider.java:252)
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:597)
at org.eclipse.osgi.framework.internal.core.FrameworkCommandInterpreter.execute(FrameworkCommandInterpreter.java:155)
at org.eclipse.osgi.framework.internal.core.FrameworkConsole.docommand(FrameworkConsole.java:156)
at org.eclipse.osgi.framework.internal.core.FrameworkConsole.runConsole(FrameworkConsole.java:141)
at org.eclipse.osgi.framework.internal.core.FrameworkConsole.run(FrameworkConsole.java:105)
at java.lang.Thread.run(Thread.java:662)
Ich verstehe nicht, wieso das Bundle seinen eigenen Activator nicht finden kann. Funde im Netz wiesen auf eine fehlerhafte [c]build.properties[/c] hin, aber die sieht bei mir aus wie bei allen anderen Bundles und die finden ihre Activator-Klassen:
Code:
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.
Ein Schreibfehler bei der Activator-Klasse ist definitiv ausgeschlossen, da ich die Klasse innerhalb des Manifest-Editor gesucht und nicht von Hand geschrieben habe.
Ich habe spaßeshalber auch mal einen neuen Versuch gewagt und ein neues Bundle angelegt. Gleiches Resultat: Installieren geht, Starten nicht...
Wäre nett, wenn mir jemand bei meinen etwas frustrierenden OSGi-Anfängen helfen könne.
Gruß
mK