【问题标题】:running couple of jars from several versions but with the same name and same classes names运行来自多个版本但具有相同名称和相同类名的几个 jar
【发布时间】:2018-05-02 11:54:33
【问题描述】:

我在 Websphere Application Server 上有 5 个共享库。

每个都指向同名的不同 jar(例如 projectA.jar)。

所有 jar 包含相同的类名(相同的树),但是,jar 之间的类代码并不相同,因为它们中的每一个都是前身的新版本。

我这样做是因为我在应用服务器上有 5 个应用,每个应用都需要另一个版本的 projectA.jar。

是否可以将相同的 jar 放在同一个应用服务器中,具有相同的类,但内部的代码不同?

【问题讨论】:

    标签: java jar websphere shared-libraries


    【解决方案1】:

    没关系,只要您保持库和应用程序之间的分离,并且它们之间没有任何直接通信。如果您仅将每个共享库与需要它的应用程序相关联,则这些库将被添加到应用程序类加载器中,除非您正在执行一些非常非正统的操作,否则它们之间不应有任何可见性。每个应用程序将从其自己的 projectA.jar 副本加载其自己的必要类副本。如果你有跨应用程序调用的东西,那确实会增加 ClassCastExceptions 和 Verify 或 LinkageErrors 的风险,但如果这只是五个完全独立的应用程序,你应该没问题。

    我会注意到,如果您没有充分保持分离(例如,您合并库,或将多个库与一个应用程序关联,或将它们全部与服务器级共享库类加载器关联),那么您可能有麻烦。 Java 可以处理同名的多个类,但不能在单个类加载器中处理 - 如果您将它们都放在一个应用程序中,则无法实际使用 1/projectA.jar 和 2/projectA.jar 中的同一个类类加载器或共享库。由于听起来您对每个应用程序的依赖关系非常了解,希望这对您来说风险不是很高。

    【讨论】:

    • 嗨,谢谢。好吧,我每个应用程序使用的共享库不超过一个,但我想它们确实都与服务器级共享库相关联。因为我只有一台应用服务器,所有应用都在这台上运行,包括所有 5 个共享库。
    • 我在更新中提到的“服务器级共享库类加载器”是您必须明确创建的特定内容 - 服务器配置(我认为在“类加载器”子中page) 允许您在服务器上创建一个自定义类加载器,您可以将共享库与之关联。如果没有类似的东西,与多个共享库相关联,它们不应该混合在一起。
    猜你喜欢
    • 2020-03-20
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多