具体来说,如果我们在应用服务器中部署了一个原始的.war文件,那么可以部署一个.war,它在原始文件中提供不同的类实现,而不必修改基本代码来支持它吗? /击>
编辑。我错误地提出了这个问题,我认为它实际上更简单。我们希望在同一个基本路径中公开来自两个不同WAR的动作,而不是每个WAR的不同路径。可以在容器配置级别完成吗?或者您是否建议使用URL重写等内容?
答案 0 :(得分:1)
不容易。通常,部署的WAR会成为Java EE服务器中的离散Web应用程序,并且它会获得自己的类加载器。你的第二次部署将获得另一个类加载器,虽然他们肯定会分享一些祖先,但是不可能从另一个WAR重新实现东西 - 你的第二次部署将无法“看到”它,因为它的方式类加载器被链接在一起。
可以使用Java agent重写正在运行的类,尽管这非常重要。您可以转换(重写传入)类,并且您应该能够重写实时(实例化)类,尽管问题是堆上可能存在使用旧代码和新代码的对象。
类重写是Eclipse的Hot Code Replace如何工作,以及JRebel's快速重新部署解决方案的功能。
如果你真的想要追究这个问题,你可以使用像AOP这样的AspectJ系统 - 但这听起来好像是在试图解决构建或部署问题,而不是问题AOP是一个更合适的解决方案。