2012-05-04 8 views
5

Unsere App ist nach OSGi migriert, aber ich habe Probleme beim Starten/Debuggen in Eclipse. Was ist der Prozess: Wird erwartet, dass der OSGi-Anwendungsentwickler die Equinox-Umgebung einrichtet, Hunderte von Bundles installiert (jar = bundle?) Und von der Konsole aus startet? Mit anderen Worten, startet "hot-plug-tauglich" -Anwendung anders als "modular-herausgefordert"?OSGi-Anwendung in Eclipse ausführen/debuggen

Sekundäre, konkretere Frage. Es gibt eine Bootstrap-Bündel, das sich um alles gekümmert nehmen soll, aber nach dem Laden Gruppe von Klassen, die es verlangsamt und hängt fast an:

... 
... 
... 
Flat profile of 0.22 secs (16 total ticks): main 

    Interpreted + native Method       
16.7%  1 +  0 java.awt.Toolkit.addAWTEventLi[Loaded java.awt.SentEvent from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar] 
stener 
16.7%  1 +  0 jav[Loaded java.awt.DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar] 
a.util.regex.Pattern.compile 
16.7%  1 +  0 sun.util.logging.PlatformLogger.<init> 
50.0%  3 +  0 Total interpreted 

    Thread-local ticks: 
62.5% 10    Blocked (of total) 
50.0%  3    Class loader 

... 
... 
... 
[Loaded sun.reflect.Label$PatchInfo from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar] 
[Loaded sun.reflect.MethodAccessorGenerator$1 from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar] 
[Loaded sun.reflect.ClassDefiner from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar] 
[Loaded sun.reflect.ClassDefiner$1 from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar] 
[Loaded sun.reflect.GeneratedMethodAccessor1 from __JVM_DefineClass__] 
[Dynamic-linking native method sun.java2d.DefaultDisposerRecord.invokeNativeDispose ... JNI] 
[Dynamic-linking native method java.lang.ref.Finalizer.invokeFinalizeMethod ... JNI] 

Edit: fortgeschritten etwas seit Frage Entsendung

[Loaded sun.reflect.GeneratedMethodAccessor1 from __JVM_DefineClass__] 
[Dynamic-linking native method sun.java2d.DefaultDisposerRecord.invokeNativeDispose ... JNI] 
[Dynamic-linking native method java.lang.ref.Finalizer.invokeFinalizeMethod ... JNI] 
--- new stuff --- 
[Loaded sun.awt.windows.WComponentPeer$2 from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar] 
[Dynamic-linking native method sun.awt.windows.WInputMethod.disableNativeIME ... JNI] 

Es ist also kein Stillstand, was könnte es so erdrückend langsam machen?

Antwort

4

Das Starten und Debuggen in Eclipse sollte ziemlich genau sein. Der Trick (meiner Meinung nach) besteht darin, zu erkennen, dass die gesamte Eclipse-Unterstützung, die Sie benötigen, als "Plug-In" anstatt "OSGi" bezeichnet wird. Richten Sie eine Zielplattform mit allen externen Paketen ein, die Sie benötigen. Sie können sie einfach in einem Verzeichnis ablegen und dann den Zielplattform-Konfigurator auf diesen Ordner richten. Die Konfiguration der Zielplattform erfolgt unter Preferences-> Plug-in Development-> Target Platform. Sie können die Zielplattform als Datei .target freigeben. Eine gute Zielplattform hilft beim Laufen und Kompilieren.

Um Ihre Bundles auszuführen, klicken Sie mit der rechten Maustaste und wählen Sie Ausführen als -> OSGi Framework (oder debuggen als). Sie können festlegen, welche Bundles in der Laufzeitkonfiguration enthalten sind und welche Argumente verwendet werden. Sie können zum Beispiel -console hinzufügen. Sie können auch eine Anwendung für den Export erstellen, die Ihnen eine config.ini Datei gibt. Sobald Sie eine config.ini haben, werden Ihre Bundles beim Start von Equinox vorinstalliert.