0

具体来说,如果我们在应用服务器中部署了一个原始的 .war 文件,是否可以部署一个 .war,它在原始文件中提供不同的类实现,而无需修改基础代码来支持这一点?

编辑。我错误地表述了这个问题,我认为它实际上更简单。我们希望在同一基本路径中公开来自两个不同 WAR 的操作,而不是为每个 WAR 使用不同的路径。可以在容器配置级别完成吗?或者您是否建议使用 URL 重写之类的方法?

4

1 回答 1

1

不容易。通常,已部署的 WAR 会成为 Java EE 服务器中的离散 Web 应用程序,并拥有自己的类加载器。您的第二次部署将获得另一个类加载器,尽管它们肯定会共享一些祖先,但无法从另一个 WAR 重新实现事物 - 您的第二次部署将无法“看到”它,因为类加载器链接在一起。

可以使用Java 代理重写正在运行的类,尽管这很重要。您可以转换(重写传入)类,并且应该能够重写实时(实例化)类,尽管问题在于堆上可能存在使用旧代码和新代码的对象。

类重写是 Eclipse 的Hot Code Replace的工作方式,也是JRebel 的快速重新部署解决方案的工作方式。

如果您真的想追求这一点,您可能可以使用像AspectJ这样的AOP系统- 但听起来您正在尝试解决构建或部署问题,而不是 AOP 更适合解决方案的问题。

于 2012-09-24T15:47:19.573 回答