- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在许多文章中读到,有必要一旦使用服务就取消服务。我的意思是
//1. get service
ServiceReference reference = bundleContext.getServiceReference(Foo.class.getName());
Foo foo=(Foo) bundleContext.getService(reference);
//2. use service
foo.foo();
//3. unget service
bunldeContext.ungetService(reference)
除了 here
The OSGi framework maintains a use count of each service for your bundle.
这是从一方面来看的。另一方面,osgi 服务来来去去,因此在动态世界中,保留对 osgi 服务的引用是不好的做法,但在需要时获取服务是好的做法。
如果这个说法正确,那么 ServiceTracker 又如何呢?据我了解,它会在服务到来时保留对服务的引用和 ServiceReference ,并保留它们直到服务消失。但是,当使用服务时,ServiceReference 必须被删除怎么办?或者在 ServiceTracker 的情况下,我们的意思是使用时间=跟踪器打开的时间的服务?
所以主要问题是 - ServiceTracker 何时取消获取 ServiceReference 以及为什么?
最佳答案
您确实应该使用 OSGi 的声明式服务,而不是使用原始服务 API 甚至服务跟踪器。也就是说,服务跟踪器会监听它正在跟踪的服务的服务事件。因此,当服务取消注册或跟踪器关闭时,它将取消获取服务。
关于java - ServiceTracker何时取消获取ServiceReference?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43557369/
我正在使用 ServiceTracker 来定位我们 OSGi 环境中的注册服务。我在 Bundle Activator 启动方法中得到了这段代码: logger.debug("looking
假设我们有两个 bundle - BundleA 和 BundleB。 BundleA 包含一项服务。 BundleB 包含 ServiceTracker。 在我看来,只有当bundleB先于Bund
我是 OSGi 的新手,并且已经研究它一段时间了。 我想了解 ServiceTracker、ServiceReference 和 ServiceReferences 在使用上的主要区别以及优势。 我使
OSGi 企业规范定义了两种跟踪方式:按服务或按捆绑。 这两种方式有什么区别?在什么情况下,应该使用一种方法而不是另一种方法? 谢谢 最佳答案 取决于您愿意跟踪的内容。 BundleTracker 跟
我需要使用漂亮的 URL 向 ServiceTracker 注册 servlet,如 api/item/5。 在寻找方法时,我发现了 SO answer看起来它应该完全符合我想要做的,但它对我不起作用
假设我有一个 OSGi 服务 A,使用 DS 和元类型配置进行声明。 然后让我们调用 B 另一个服务,该服务正在基于属性过滤器跟踪任何不属于 A 配置的对象。 在 A 中是否有可能访问服务属性并在运行
我正在使用 OSGi 服务跟踪器,我注意到方法 ServiceTracker.modifiedService(...)永远不会被调用。 我曾尝试使用不同的属性注册服务两次,取消注册等等...,但框架从
我试图了解为服务事件提供了哪些保证。 OSGi 规范说 ServiceEvents 是同步的,我认为这意味着 ServiceListener 将不会收到带有 UNREGISTERING Service
我刚刚开始使用 OSGi 编程,并且遇到了两种监听服务被激活的方法。 第一种方式,来自 EclipseRCP 书籍,使用 ServiceReference: String filter="(objec
在 ServiceTracker 中使用 OSGi BundleActivator 的最佳实践是什么?我在网上看到过一些例子,它们在 start 方法中打开一个跟踪器,将它存储在一个实例变量中,然后在
我正在学习 OSGi 按照这个 Apache Felix Tutorial ,一切都在轮子上进行,直到这个示例 5,我被告知 felix 无法找到该类 org.osgi.util.tracker.Se
我需要在 OSGI 包中使用这个包 import org.osgi.util.tracker.ServiceTracker; 当我尝试使用 Netbeans 编译代码时,找不到此包。你知道我需要添加什
我正在创建一些 OSGi 包。他们注册服务并获取(当然还有使用)彼此的服务。 我决定使用 ServiceTracker 而不是声明式服务。 当我搜索相关信息时,我发现了两种跟踪服务方法。 第一个是为每
我是一名优秀的程序员,十分优秀!