OSGi Bundle findet Activator nicht (ClassNotFoundException)

musiKk

Top Contributor
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:
  1. org.osgibook.helloworld
  2. org.osgibook.translation
  3. 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
 

musiKk

Top Contributor
Ich war eigentlich der Meinung, schon genug gesucht zu haben, aber als ich auf der Suche nach Beispielcode auf der Seite des Buches war, fand ich dort auch ein Forum, in dem mein Problem schon von jemandem anders geschildert wurde.

Lösung: In der Run Configuration muss bei Program Arguments noch ein [c]-dev bin[/c] hinzugefügt werden, weil die Bundles nicht als JAR, sondern in Verzeichnisform vorliegen.

Narf und nochmals Narf.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T OSGi OSGI bundle bauen org.apache.xerces Plattformprogrammierung 3
H !MESSAGE Missing required bundle javax.mail_1.4.0. Plattformprogrammierung 5
G OSGi Bundle-ClassPath Plattformprogrammierung 3
F OSGi NPE bei deklarativen Bundle mit Maven SCR Plattformprogrammierung 2
G OSGi Ressourcen aus anderem Bundle laden Plattformprogrammierung 15
G RCP Datei im Bundle Plattformprogrammierung 6
A RCP RAP-Bundle nach Installation nicht auffindbar?! Plattformprogrammierung 5
A OSGi Bundle exportieren, importieren und vewenden geht nicht?! Plattformprogrammierung 4
lumo RCP The System Bundle was updated Plattformprogrammierung 13
A RCP p2 - manuelles update "check for updates" von core bundle funktioniert nicht Plattformprogrammierung 6
S OSGi Ablegen von Bundle-Eigenschaften (unabhängig) Plattformprogrammierung 4
L RCP Plugin als Bundle geklarieren? Plattformprogrammierung 3
O Bundle in Projekt-Dependencies nicht sichtbar Plattformprogrammierung 6
lumo Bundle verzeichnis Plattformprogrammierung 10
G [osgi] bundle spezifische properties Plattformprogrammierung 5
C RCP Applikation starten als OSGi Bundle Plattformprogrammierung 2
B OSGi, Euqinox, innherhalb vom Bundle Pfad des zugehörigen jar-files ermitteln Plattformprogrammierung 6
N bundle und classpath Plattformprogrammierung 12
G Activator Bilder laden Plattformprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben