Apache Karaf是否处理任何JAR或WAR的热部署?

时间:2013-03-29 21:08:44

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

我试图看看我是否可以重构我继承的项目的架构,并且对Apache Karaf感兴趣是一种可能的解决方案。

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

这种架构的问题很多:

  1. 由于公共JAR只是库,因此没有常用的平台来运行客户端JAR。他们中的许多人使用Apache Camel并使用那些JAR本地的路由,并且在所有JAR中都有大量的Camel代码被复制。如果有一个解决方案,所有客户端JAR可以共享相同的Camel路由,那将是一件好事。
  2. 它将运行每个客户端JAR的业务逻辑放在cron手中,这很好,但这是Java,我更喜欢有一个主Quartz“Scheduler”控制所有JAR运行时。
  3. 每次我需要向其中一个公共JAR添加依赖项时,我需要遍历每个客户端JAR的每个crontab条目,并修改classpath参数以获取额外的依赖项。
  4. 列表继续......
  5. 我只是不喜欢cronning可执行客户端JAR的想法,如果将它们部署到同一个容器中它们可以更加凝聚地工作。
  6. 基本上,我需要一个解决方案:

    • 允许我随时部署/取消部署和重新部署新版本的客户端JAR,而不会中断系统的其他部分
    • 部署/取消部署任何公共JAR,以便任何新的客户端JAR可以获取公共JAR的新版本
    • 允许我部署/取消部署Quartz Scheduler(WAR或JAR),它可以cron /安排每个客户端JAR在一周中的不同时间运行
    • 允许我部署/取消部署消息代理以及可能是一个ESB,例如Camel或Mule,以便我的每个客户端JAR都可以使用相同的队列和路由
    • 允许我部署/取消部署单个日志记录JAR(log4j,公共日志记录等)和单个JPA实现JAR(Hibernate,MyBatis等),并使其普遍用于所有客户端JAR

    以上所有可以用Karaf完成吗?如果没有,我在这里有任何选择吗(Felix,Equinox等)?还是我在追逐梦想?鉴于我的问题域,是否有任何警告或原因我应该坚持使用当前的解决方案?提前谢谢!

    请注意:如果有人认为EJB3对我来说是一个很好的解决方案而不是OSGi,我肯定愿意听取你的论点,但我的项目经理厌恶 EJB(他口中的味道不好)从沉重的EJB2天中遗留下来并且不太可能批准这样的解决方案。

1 个答案:

答案 0 :(得分:0)

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

我会考虑你的部署szenario。它可以做到,但我不这样做。使用功能文件,这是Karaf为您提供的一组捆绑包作为一项功能,结合使用Maven作为您的存储库,您的应用程序具有非常好的运行时。