【问题标题】:OSGi: What happens to existing instances when its source (class) bundle is updated?OSGi:当其源(类)包更新时,现有实例会发生什么情况?
【发布时间】:2015-11-29 22:35:32
【问题描述】:

一般问题:更新源(类)包(并刷新框架)时,现有实例会发生什么情况?

例如,假设我有一个类的实例(Class A,instance-a),然后我在其包(Bundle A)中更改 Class A 的源,然后我更新 bundle-A 并刷新框架.在更新之前创建的 instance-a 是否“神奇地”具有新 A 类的更新功能?

同样,如果我有 B 类实例-b(来自包 B),并且 B 类扩展了 A 类(来自包 A),那么我如上所述更改/更新/刷新包 A,已经创建的实例-b有新 A 类的功能吗?

这两个问题的答案似乎都是“否”。似乎,作为一般规则,对于现存的实例,它们必须被重新实例化(丢弃并创建新实例)才能获得新功能。这是真的吗?

谢谢。

【问题讨论】:

  • “重新实例化”是错误的术语。我的意思是,必须丢弃以前的实例,并创建新实例以获得更新的功能。

标签: java osgi classloader osgi-bundle


【解决方案1】:

没有魔法。如果您持有来自捆绑包的某个类型的实例并且该捆绑包已更新,则您持有的实例不会改变。

这就是为什么您应该使用服务来使用另一个包的实例。捆绑包注册了一个服务,你得到了这个服务。如果捆绑包停止,它的服务将被取消注册,并且您会收到通知。使用声明式服务及其注释使这一切变得非常容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多