gpt4 book ai didi

java - OSGI环境下单例的迁移方案

转载 作者:行者123 更新时间:2023-11-30 07:38:55 26 4
gpt4 key购买 nike

我在 Java EE 环境中工作,其中每个应用程序都在自己的 war 文件中。在每个应用程序 war 文件的 WEB-INF/lib 中,有一个由所有应用程序共享的公共(public) jar。这个公共(public) jar 包含几个单例,可以从代码中的许多点访问它们。由于 war 文件边界,每个应用程序都有自己的单例实例。这就是我们今天的运作方式,因为我们希望在每个应用程序中以不同方式配置一些单例。

现在我们正在转向一个 OSGi 环境,这个解决方案将不再有效,因为每个 bundle 都有自己的类加载器,所以如果我尝试从 bundle "appA.jar"访问位于 bundle "common.jar"中的 MySingleton "或从包 "appB.jar"我将获得相同的实例。

请记住,我“想要”每个 bundle 的不同实例。 (听起来很讽刺)

现在我意识到理想的解决方案是修复代码以不依赖那些单例,但是由于时间紧迫,我想知道你们是否可以建议某种迁移解决方案,让我可以使用 bundle-宽单例,所以他们每个人都可以按捆绑配置。

最佳答案

您的单例将成为 OSGi 中的一项服务。

然后您需要创建一个 ManagedServiceFactory(例如参见此 article)负责注册该服务的不同实例;每个服务都将注册不同的属性(例如 application="appA"和 application="appB")

之后,您将从执行指定正确属性的正常服务查找的任何应用程序访问正确的服务。

关于java - OSGI环境下单例的迁移方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1318856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com