Hallo zusammen,
ich habe letzte Woche versucht einige der etwas "kruden" Datenanbindungen durch OSGi Declaratice Services abzulösen, bin dabei aber auf ein Problem gestoßen:
Wenn ich in meiner RCP-Application die Abhängigkeiten zu org.eclipse.osgi.services, org.eclipse.equinox.ds und org.eclipse.equinox.util hinzufüge, stürzt mir die Anwendung ohne weitere Meldung, ohne Log-Eintrag oder sonst etwas hab. Nach ein wenig Debuggen fand ich heraus, dass irgendetwas auf einmal anscheinend probierte, ein "Multi-Display" anzulegen, was anscheinend einen SWTError produzierte.
Zum System und Service:
Ich verwende Ubuntu 11.10 64Bit - vielleicht hat der eine oder andere ja mal was von einem SWT-Bug oder so gehört...
Den Service hatte ich mir folgendermaßen vorgestellt und bisher implementiert: Meine RCP-Anwendung (eine Plugin-basiert Plattform) stellt das Service-Interface zur Verfügung und exportiert das entsprechende Package. Ein weiteres Plugin (oder besser Bundle) implementiert den Service und bietet ihn als DS (über OSGI-INF/component.xml) an. Meine Platform selbst wiederum soll (so war der Plan) auch wieder der Consumer sein und hat dementsprechend auch eine Komponentendefinition (über OSGI-INF/component.xml).
DS-Komponente
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="x.y.z.ds.services">
<implementation
class="x.y.z.ds.services.Services"/>
<service>
<provide
interface="x.y.z.service.IAvailablePluginService"/>
</service>
</scr:component>
[/XML]
Plattform-/Consumer-Komponente
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="x.y.z.service.consumer">
<implementation
class="x.y.z.service.consumer.GlobalServiceConsumer"/>
<reference
bind="setAvailablePlugins"
cardinality="0..n"
interface="x.y.z.service.IAvailablePluginService"
name="IAvailablePluginService"
policy="dynamic"
unbind="unsetAvailablePlugins"/>
</scr:component>
[/XML]
Ich habe mich versucht an das Tutorial von Lars Vogel zu halten. Ich denke die meisten wissen, was ich meine, daher keine Verlinkung...
Wenn ich die Dependencies in meine Platform und meine Runtime Configuration eintrage, bricht das Program beim Start (nachdem kurz einmal der Splash-Screen auftauchte) ab.
Beim Debuggen, habe ich einen Breakpoint direkt auf dem Versuch das Display zu erstellen gelegt und erreiche nicht einmal den Punkt des erstellens der Shell für das Splash - alles etwas seltsam...
Hier noch einmal der Fehler (den ich nur im Debugmodus auf der Konsole des Eclipse erhalte):
... und wie ich gerade feststelle, ist es wieder einmal ein anderer Fehler - das scheint sich auch nach Tageslaune zu ändern ...
Wenn ihr hinsichtlich der DS Hinweise allgemeiner Natur habt, oder bezüglich des Set-Ups, oder auch des Fehlers, wäre ich sehr Dankbar!
Viele Grüße,
Daniel
[edit]
Ach so: Ich verwende Eclipse 3.7
[/edit]
[edit]
2ter Nachtrag:
Ich hatte beim ersten Versuch ('BadGC [...]') noch nicht alle Dependencies in der Runtime Config aufgelöst. Nach betätigen des "Add Required Plugins"-Knopfes kommt nun das hier:
[/edit]
ich habe letzte Woche versucht einige der etwas "kruden" Datenanbindungen durch OSGi Declaratice Services abzulösen, bin dabei aber auf ein Problem gestoßen:
Wenn ich in meiner RCP-Application die Abhängigkeiten zu org.eclipse.osgi.services, org.eclipse.equinox.ds und org.eclipse.equinox.util hinzufüge, stürzt mir die Anwendung ohne weitere Meldung, ohne Log-Eintrag oder sonst etwas hab. Nach ein wenig Debuggen fand ich heraus, dass irgendetwas auf einmal anscheinend probierte, ein "Multi-Display" anzulegen, was anscheinend einen SWTError produzierte.
Zum System und Service:
Ich verwende Ubuntu 11.10 64Bit - vielleicht hat der eine oder andere ja mal was von einem SWT-Bug oder so gehört...
Den Service hatte ich mir folgendermaßen vorgestellt und bisher implementiert: Meine RCP-Anwendung (eine Plugin-basiert Plattform) stellt das Service-Interface zur Verfügung und exportiert das entsprechende Package. Ein weiteres Plugin (oder besser Bundle) implementiert den Service und bietet ihn als DS (über OSGI-INF/component.xml) an. Meine Platform selbst wiederum soll (so war der Plan) auch wieder der Consumer sein und hat dementsprechend auch eine Komponentendefinition (über OSGI-INF/component.xml).
DS-Komponente
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="x.y.z.ds.services">
<implementation
class="x.y.z.ds.services.Services"/>
<service>
<provide
interface="x.y.z.service.IAvailablePluginService"/>
</service>
</scr:component>
[/XML]
Plattform-/Consumer-Komponente
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="x.y.z.service.consumer">
<implementation
class="x.y.z.service.consumer.GlobalServiceConsumer"/>
<reference
bind="setAvailablePlugins"
cardinality="0..n"
interface="x.y.z.service.IAvailablePluginService"
name="IAvailablePluginService"
policy="dynamic"
unbind="unsetAvailablePlugins"/>
</scr:component>
[/XML]
Ich habe mich versucht an das Tutorial von Lars Vogel zu halten. Ich denke die meisten wissen, was ich meine, daher keine Verlinkung...
Wenn ich die Dependencies in meine Platform und meine Runtime Configuration eintrage, bricht das Program beim Start (nachdem kurz einmal der Splash-Screen auftauchte) ab.
Beim Debuggen, habe ich einen Breakpoint direkt auf dem Versuch das Display zu erstellen gelegt und erreiche nicht einmal den Punkt des erstellens der Shell für das Splash - alles etwas seltsam...
Java:
public Object start(IApplicationContext context) throws Exception {
Display display = PlatformUI.createDisplay();
try {
// look and see if there's a splash shell we can parent off of
Shell shell = WorkbenchPlugin.getSplashShell(display);
if (shell != null) {
// should should set the icon and message for this shell to be
// the same as the chooser dialog - this will be the guy that
// lives in the task bar and without these calls you'd have the
// default icon with no message.
shell.setText(OpenWorkpaceDialog.WINDOW_TITLE);
ImageDescriptor imgDescr = Activator
.getImageDescriptor("icons/logo_16.gif"); //$NON-NLS-1$
if (imgDescr != null)
shell.setImage(imgDescr.createImage());
else
shell.setImages(Dialog.getDefaultImages());
}
[...]
Hier noch einmal der Fehler (den ich nur im Debugmodus auf der Konsole des Eclipse erhalte):
Code:
The program 'SWT' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadGC (invalid GC parameter)'.
(Details: serial 734 error_code 13 request_code 60 minor_code 0)
(Note to programmers: normally, X errors are reported asynchronously;
that is, you will receive the error a while after causing it.
To debug your program, run it with the --sync command line
option to change this behavior. You can then get a meaningful
backtrace from your debugger if you break on the gdk_x_error() function.)
... und wie ich gerade feststelle, ist es wieder einmal ein anderer Fehler - das scheint sich auch nach Tageslaune zu ändern ...
Wenn ihr hinsichtlich der DS Hinweise allgemeiner Natur habt, oder bezüglich des Set-Ups, oder auch des Fehlers, wäre ich sehr Dankbar!
Viele Grüße,
Daniel
[edit]
Ach so: Ich verwende Eclipse 3.7
[/edit]
[edit]
2ter Nachtrag:
Ich hatte beim ersten Versuch ('BadGC [...]') noch nicht alle Dependencies in der Runtime Config aufgelöst. Nach betätigen des "Add Required Plugins"-Knopfes kommt nun das hier:
Code:
[xcb] Unknown request in queue while dequeuing
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
java: ../../src/xcb_io.c:178: dequeue_pending_request: Zusicherung »!xcb_xlib_unknown_req_in_deq« nicht erfüllt.
Zuletzt bearbeitet: