启动OSGI声明性服务导致线程错误

时间:2014-08-01 00:28:15

标签: eclipse osgi declarative-services

我有一个需要两个数据库连接的RCP 3.7应用程序,每个数据库的代码都在一个单独的包中。以前,数据库启动是在Activator.start()方法中完成的。我已经大量重构了代码,将数据库启动转移到两个Declarative Services中。这实现了打破紧密耦合和跨包过多包装暴露的目标(几乎所有东西都被输出)。

我现在面临的挑战是两个服务的启动速度不够快,工作台加载,我遇到线程违规。我有两个服务设置立即=真。 bundle起始顺序是eclipse.osgi在-1(默认),equinox.ds和equinox.common在2,core.runtime默认情况下。我已经尝试为我的捆绑包添加启动级别,但它没有帮助删除它们。

有关如何在服务返回之前确保数据库启动的任何想法或建议?

1 个答案:

答案 0 :(得分:3)

您似乎正在从DS激活线程中访问SWT。请使用Display.asyncExec从其他线程访问SWT代码。请参阅PlatformUI.getWorkbench以访问Display。