【问题标题】:Does Apache Karaf handle hot deployments of any JAR or WAR?Apache Karaf 是否处理任何 JAR 或 WAR 的热部署?
【发布时间】:2013-03-29 21:08:44
【问题描述】:

我正在尝试查看是否可以重构我继承的项目的架构,并且对 Apache Karaf 作为可能的解决方案感兴趣。

目前,我们为我们拥有的每个(非盈利)客户构建一个可执行 JAR,并 cron 让 JAR 在不同时间运行。每个“客户端 JAR”在其中使用多个“公共” JAR,并在其中包含特定于客户端的逻辑。总共有数百个客户端 JAR 和大约十几个常见 JAR。

这种架构的问题很多:

  1. 由于公共 JAR 只是作为库,因此没有供客户端 JAR 运行的公共平台。他们中的许多人使用 Apache Camel 并使用这些 JAR 本地的路由,并且在所有 JAR 中复制了大量的 Camel 代码。如果有一个解决方案,所有客户端 JAR 可以共享相同的 Camel 路由,那就太好了。
  2. 它将何时运行每个客户端 JAR 的业务逻辑置于 cron 手中,这很好,但这是 Java,我更希望有一个主 Quartz“调度程序”来控制所有 JAR 何时运行。李>
  3. 每次我需要向其中一个公共 JAR 中添加依赖项时,我都需要检查每个客户端 JAR 的每个 crontab 条目并修改类路径参数以获取额外的依赖项。
  4. 名单还在继续……
  5. 我只是不喜欢 cronning 可执行客户端 JAR 的想法,因为如果将它们部署到同一个容器中,它们可以更加紧密地工作。

所以基本上,我需要一个解决方案:

  • 允许我随时部署/取消部署和重新部署新版本的客户端 JAR,而不会中断系统的其余部分
  • 部署/取消部署任何公用 JAR,以便任何新的客户端 JAR 开始使用新版本的公用 JAR
  • 允许我部署/取消部署 Quartz 调度程序(WAR 或 JAR),该调度程序可以 cron/调度每个客户端 JAR 以在一周的不同时间运行
  • 允许我部署/取消部署一个消息代理,也许还有一个 ESB,例如 Camel 或 Mule,这样我的每个客户端 JAR 都可以使用相同的队列和路由
  • 允许我部署/取消部署单个日志记录 JAR(log4j、commons 日志记录等)和单个 JPA 实现 JAR(Hibernate、MyBatis 等),并使其对所有客户端 JAR 通用/可用李>

是否可以使用 Karaf 完成以上所有操作?如果不能,我是否有任何选择(Felix、Equinox 等)?还是我在追逐梦想?鉴于我的问题域,是否有任何警告或理由让我坚持当前的解决方案?提前致谢!

请注意:如果有人认为 EJB3 对我来说是一个比 OSGi 更好的解决方案,我当然愿意听听你的论点,但是我的项目经理讨厌 EJB(他口中的坏品味从繁重的 EJB2 天剩下的)并且不太可能批准这样的解决方案。

【问题讨论】:

    标签: java osgi containers executable-jar apache-karaf


    【解决方案1】:

    是的,Karaf 确实有 JAR 文件和 WAR 文件的部署器。它甚至能够自动增强它们以获得所需的 OSGi Manifest 条目。 我认为随着进入 OSGi 模块化,你是一个很好的公司,而 Karaf 可能是 Camel 的最佳运行时。

    我只是想稍微考虑一下您的部署方案。可以做到,但我不会那样做。使用功能文件是 Karaf 为您提供的将一组包部署为功能的东西,结合使用 Maven 作为您的存储库,您可以为您的应用程序提供一个非常好的运行时。

    【讨论】:

      猜你喜欢
      • 2015-06-14
      • 2018-07-24
      • 2014-05-30
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      相关资源
      最近更新 更多