我需要在jax-ws应用服务器glassfish 3上部署多个Web服务。这些Web服务需要具有共享库,这意味着同一类的共享实例。
我知道我可以通过在“〜/ glassfish3 / glassfish / domains / domain1 / lib”目录中放一个jar来做到这一点。但我想知道这是否可能以更优雅的方式实现:我想将共享库jar置于我部署的Web服务战中,然后从我在同一应用服务器上部署的另一场战争中访问该库。
我该怎么做?
答案 0 :(得分:0)
我自己找到了Glassfish的解决方案:基本上我只是部署了一个类(SharedClassLoader
),它继承自URLClassLoader
作为上述目录中的共享库jar。然后我使用这个类加载器作为引导程序:在调用Web服务时,类加载器层次结构扩展如下:如果URL尚未存在,则实例化SharedClassLoader
并将其作为委托添加到{ {1}}在类加载器树中。通过为具有相同DelegatingClassLoader
实例的每个Web服务执行此操作,它充当引导程序以引入更多类加载。 SharedClassLoader
引用的jar也可以与其中一个Web服务一起部署,因为Glassfish将容器解压缩到SharedClassLoader
。
我希望这可以帮助任何有同样问题的人。我为我的学士论文解决了这个问题。如果有人需要更多信息,请问,我可以把你的论文发给你。