【发布时间】:2012-07-31 10:08:06
【问题描述】:
所以当我尝试使用以下方法从供应代理获取元数据和工件存储库管理器时,我一直遇到这个问题:
ServiceReference<?> sr = Activator.getContext().getServiceReference(IProvisioningAgentProvider.SERVICE_NAME);
IProvisioningAgentProvider agentProvider = null;
if (sr == null)return;
agentProvider = (IProvisioningAgentProvider) Activator.getContext().getService(sr);
final IProvisioningAgent agent = agentProvider.createAgent(new URI("some place"));
IMetadataRepositoryManager manager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
IArtifactRepositoryManager artifactManager = (IArtifactRepositoryManager) agent.getService(IArtifactRepositoryManager.SERVICE_NAME);
如果这些服务已经启动,则效果很好。但是,很多时候工件管理器会返回 null,因为它的服务还不存在。我已经能够通过将包含上述代码的捆绑包的启动级别设置为 5 来破解它,因此在我尝试获取它们的服务引用之前所有服务都已启动。
我真的不想搞乱起始关卡。我想做的是使用声明性服务来设置这些不同的组件,从而延迟我的服务的启动。唯一的问题是我不知道要引用哪些服务,所以我可以将它们放在我的 component.xml 文件中。这在 eclipse 3.7.2 中是否可能?
【问题讨论】:
标签: eclipse equinox p2 declarative-services