【问题标题】:How to dynamically update (hot swap) jars in a web-app?如何在网络应用程序中动态更新(热插拔)jar?
【发布时间】:2013-02-27 19:03:25
【问题描述】:

我在一个部署在 cloudfoundry 上的战争档案中有一个 webapp。 该应用使用的其中一个库(“somelib.jar”)是由另一位开发人员制作的。

我想让他上传几个不同版本的somelib.jar 并测试应用程序的行为。 我已设法将 jar 上传到部署的 WEB-INF/lib 目录。我还设法将罐子解压到WEB-INF/classes。但是,我还没有设法获得要使用的新版本的 jar。我尝试了各种 hack,例如 this question 和 this question 中描述的那些,但没有任何运气。

每次都使用第一次加载的类/jar,即使我们替换上述目录中的实际 .class 或 .jar 文件。

有什么简单的方法可以实现我想要的吗?

注意:由于我无法控制 Tomcat(它在哪里运行),我无法配置 Tomcat 或对服务器进行任何更改。我只是控制我的战争文件,所以一切都需要以编程方式完成。

编辑:我想要这个的原因是为了减少我们的测试时间。目前有人给了我一个新版本的somelib.jar,我将它重新打包到我的应用程序中,上传到CF,给他发送通知,然后他测试新jar的行为。我更希望他直接将他的 jar 上传到 CF,并在他有新版本时进行测试,而不会造成不必要的中间延迟。

【问题讨论】:

  • 您可以删除一个全新的war 文件,因为webapp 目录通常会进行热部署,除非在tomcat 中关闭该配置。这只允许您一次运行一个版本,但它会在不重新启动的情况下进行“热部署”。这有问题,没有人会认真考虑在生产环境中这样做。
  • 我不敢相信没有简单的解决方案。随着 PaaS 的出现,客户越来越可能不喜欢被打扰或控制服务器配置。
  • 您遇到的是流程问题,而不是技术问题。如果您想要一个简单的解决方案,请为每个团队成员提供一个测试环境,并让他们能够构建自己的可部署 WAR。
  • 我设法使用标准的 java 反射 API 让它工作。当我有时间时,我会把解决方案放在这里。如果有人有兴趣,请在这里评论。

标签: java tomcat cloud-foundry hotswap web-inf


【解决方案1】:

在 tomcat 7 中,你可以对你的 WAR 文件进行版本控制,新版本会逐渐生效。

http://www.tomcatexpert.com/blog/2011/05/31/parallel-deployment-tomcat-7

【讨论】:

  • 就像我说的,我在 cloudfoundry 上运行应用程序,我无法控制或对他们使用的 Tomcat 的配置或版本有任何发言权。
  • 正如阿里上面所说的,你可以控制Tomcat的版本和配置。除了他的链接,这个还有一些很好的信息:blog.cloudfoundry.org/2012/06/18/…
  • 此外,这目前对您没有帮助,但 Cloud Foundry 正在实施构建包来替换现有的暂存应用程序方法。修改现有的 buildpack 将是一种自定义应用程序的暂存和配置方式的简单方法。在此处观看详细信息:cloudfoundry.github.com/docs/roadmap.html 和此处:groups.google.com/a/cloudfoundry.org/forum/#!forum/vcap-dev
【解决方案2】:

为了让您自己控制应用程序服务器,您需要将独立应用程序部署到 Cloud Foundry。

这个博客应该可以帮助你:

http://blog.cloudfoundry.com/2012/05/11/running-standalone-web-applications-on-cloud-foundry/

这样您就可以自定义配置您的 tomcat。

【讨论】:

    【解决方案3】:

    每次都使用第一次加载的类/jar,即使我们替换了上述目录中的实际 .class 或 .jar 文件

    这就是普通 Tomcat (Java EE) classloading 的工作方式。您的类在首次部署时被加载,任何更改都将被忽略(JSP 的管理方式略有不同,但仅在开发环境中)。

    您应该能够使用 Equinox OSGi bridge servlet 解决此问题。我自己没有这样做,但是here's 一个我尊敬的人的文章。

    【讨论】:

    • 开发环境可以配置不同的类加载器吗?
    猜你喜欢
    • 2014-09-30
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2013-01-18
    • 1970-01-01
    • 2012-01-20
    相关资源
    最近更新 更多