当停止使用的serice束时会发生什么

时间:2017-04-22 09:41:44

标签: java osgi apache-felix

让我们考虑一下这种情况。 BundleA提供Foo服务,BundleB使用Foo服务。在某些时候,BundleB正在执行代码foo.foo() - Foo服务的方法foo正在执行但尚未完成。

此时会发生什么(当foo方法仍在执行时) OSGI框架获得阻止BunldeA的命令?框架会等到 方法foo完成了吗?作为OSGi框架,我使用Felix。

1 个答案:

答案 0 :(得分:3)

我假设bundle B在一个线程上调用该方法,然后其他人向该框架发送命令以在另一个线程上停止bundle A.

框架不会等到调用完成。它将停止捆绑包,这也意味着(即使捆绑包没有明确地这样做),该服务将被取消注册。正在进行的通话将继续进行。根据它仍然执行的操作,它可能正常完成,或者在某些时候向调用者抛出(运行时)异常(所有这些都取决于该方法的实际实现)。