我在Websphere Application Server上有5个共享库。
他们中的每一个都指向一个具有相同名称的不同jar(例如projectA.jar)。
所有罐子都包含相同的类名(相同的树),但是,罐子之间的类代码并不相同,因为它们中的每一个都是前一个版本的新版本。
我这样做是因为我在应用服务器上有5个应用,每个应用都需要另一个版本的projectA.jar。
是否可以将相同的jar放在同一个应用服务器中,使用相同的类,但内部的代码不一样?
答案 0 :(得分:1)
没关系,只要您保持库和应用程序之间的分离,并且它们之间没有任何直接通信。如果您只将每个共享库与需要它的应用程序相关联,那么这些库将被添加到应用程序类加载器中,除非您执行一些非常非正统的操作,否则这些加载器不应该彼此具有任何可见性。每个应用程序将从其自己的projectA.jar副本加载自己的必要类的副本。如果你有跨越应用程序调用的东西,那确实会增加ClassCastExceptions和Verify或LinkageErrors的风险,但如果这只是五个完全独立的应用程序,你应该没问题。
我会注意到,如果你没有充分保持分离(例如,你组合了库,或者将多个库与应用程序关联起来,或者将它们全部与服务器级共享库类加载器相关联),那么你可能遇到麻烦了。 Java可以使用相同的名称处理多个类,但不能在单个类加载器中处理 - 如果在单个应用程序中同时使用它们,则无法实际使用1 / projectA.jar和2 / projectA.jar中的相同类类加载器或共享库。因为您对每个应用程序的依赖关系都非常了解,所以希望这对您来说不是一个高风险。