是否有可能在不修改/重新部署WAR的情况下向已部署的WAR添加依赖关系

时间:2012-01-18 07:42:59

标签: deployment war weblogic-10.x dependency-management circular-dependency

我们有一个向用户显示表单的应用程序XYZ。我们希望分发此应用程序并允许外部开发人员创建自己的表单(扩展应用程序XYZ提供的接口),并以应用程序XYZ可以显示它们的方式部署这些表单,而无需自行修改。应用程序XYZ通过查找配置文件来了解它可以显示哪些表单,该配置文件列出了所有可用的表单类(然后反复实例化)。

我们使用Weblogic 10.3作为应用程序服务器,而应用程序是GWT / Java应用程序。

据我所知,我所描述的场景是不可能的,因为应用程序XYZ需要重新编译并重新部署,并将新的依赖项添加到类路径中。我希望别人可以告诉我。

1 个答案:

答案 0 :(得分:1)

Servlet规范声明每个WAR文件都部署在它自己的独立类加载器上。这样就可以隔离在同一个servlet容器实例上运行的多个Web应用程序。

tomcat documentation很好地描述了各种类加载器的关系。 (考虑到Tomcat是servlet的参考实现,Weblogic应该以类似的方式执行)

因此,重新编译WAR的另一种方法是将这些额外的自定义jar放入“$ CATALINA_BASE / lib”目录(或Weblogic的等价物)中。

但是我看到了一些需要注意的实现问题:

  1. 您的申请需要针对固定版本进行编译 接口。这将使用户能够替换运行时实现 那些课程。
  2. 自定义罐子将在所有人之间共享 您的申请的实例。这可能会排除在同一个应用服务器实例上运行旧版本的应用。
  3. 预计部署问题...考虑一下您的应用程序如何对缺少的依赖项做出反应。用户不会理解Java堆栈跟踪: - )