我正在 Java EE 环境中工作,其中每个应用程序都位于其自己的 war 文件中。
在每个应用程序 war 文件的 WEB-INF/lib 中,有一个由所有应用程序共享的公共 jar。
这个公共 jar 包含几个可以从代码中的许多点访问的单例。
由于 war 文件边界,每个应用程序都有自己的单例实例。
这就是我们今天的操作方式,因为我们希望在每个应用程序中以不同的方式配置一些单例。
现在我们正在转向 OSGi 环境,在该环境中,该解决方案将不再起作用,因为每个包都有自己的类加载器,因此如果我尝试从包“appA.jar”或从包访问驻留在包“common.jar”中的 MySingleton捆绑“appB.jar”我将得到相同的实例。
请记住,我“想要”每个包有一个不同的单例实例。 (听起来很讽刺)
现在我意识到理想的解决方案是修复代码以不依赖于这些单例,但是由于时间紧迫,我想知道你们是否可以建议某种迁移解决方案,该解决方案允许我使用捆绑范围的单例,这样他们每个人都可以
按捆绑包进行配置。
您的单例将成为 OSGi 中的一项服务。
然后您需要创建一个 ManagedServiceFactory (例如,请参阅此article http://www.osgilook.com/2009/08/04/factory-pattern-on-steroids-the-managedservicefactory/) 负责注册该服务的不同实例;每个服务将使用不同的属性进行注册(例如 application="appA" 和 application="appB")
之后,您将从任何执行正常服务查找并指定正确属性的应用程序访问正确的服务。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)