Java框架用于热代码部署和调度jar文件部署。

3
使用JAVA框架,我想要实现以下任务:
  1. 热代码(jar)部署,在某个环境中执行特定任务
  2. 如果我更新了该jar文件,它应自动卸载旧代码并加载新代码
  3. 我想要安排已部署的jar文件执行任务。
目前我看到Apache karaf/Felix能够满足此要求,但提供的帮助较少且难以管理。
是否有其他可用的框架可以替代karaf/felix?

3
你可能正在寻找OSGi方法。如果是这样,请进一步了解Eclipse Equinox。阅读一些入门的优点和方法。如果你认为OSGi适合你,重新构思你的问题,将其定位为OSGi特定的问题。这只是我的两分之一建议。 - Nishant
6个回答

5
如果您不打算走OSGi的路线,那么最好的建议是考虑在LiveRebel发布时使用它。@Daniel的回答提到了JRebel,对于开发过程中的热部署非常出色,但并不适用于生产系统。相反,您应该查看由Zero Turnaround制作的LiveRebel,可能能够满足您的需求。请注意,这是一款商业产品,但它们现在正在提供私有测试版。

【编辑】

愚蠢的是,我忘记提到还有Knoplerfish,另一个具有BSD样式许可证的OSGI运行时。也许可以尝试一下?


2

试试JRebel。它是一款很棒的工具。


1

不确定您指的是哪种环境(例如 web、desktop、server-side 等),但是...

倒推:

3:定时任务 在任何 Java 容器中,您都可以使用 Quartz Scheduler library 实现此目标。这使您可以以类似于 CRON 的方式安排事件。

1-2:热部署 然后问题就是你想在哪里部署和如何处理热部署。其他答案已经提到了 JRebel 和 OSGI,它们都可以工作。如果您希望进行超快速度的部署(例如保存代码并立即可用)并将其托管在 Web 容器中,则可以使用 Play Framework。它使用 Quartz 以非常好的方式实现Scheduled Jobs

例如(来自 Play 文档):

@Every("1h")
public class Bootstrap extends Job {

    public void doJob() {
        List<User> newUsers = User.find("newAccount = true").fetch();
        for(User user : newUsers) {
            Notifier.sayWelcome(user);
        }
    }

}

0
大多数Web容器(如Tomcat或Jetty)的热部署功能允许您在Web应用程序上拥有所需的行为。
这样的应用程序可以非常简单,基本上只包含您的jar文件。
您需要应用程序做什么?

0

JBoss有你所描述的热部署功能。然而,我猜配置Karaf可能也同样复杂。不过,可能可以找出JBoss是如何实现它的,并自己使用这些库。


可能可以找出JBoss是如何实现的,然后自己使用这些库。你基本上需要以非常简单的配置运行JBoss,才能让部署程序正常工作。 - bestsss
我会在尝试后添加我的评论。 - d-man

0
简而言之,热部署/重新部署的步骤如下:
  • 使用类加载器(java.net.URLClassLoader是一个很好的起点),加载jar文件,实际上在加载之前将jar文件复制到某个地方(临时目录)
  • 您需要一些接口实现,实例化实现接口的类(jar包中的META-INF、自定义xml等),配置它(props/xml等)
  • 调用start()并执行任务。

  • 监视jar文件:每秒钟检查一次并比较最后修改时间/大小的线程
  • 如果有更改-调用stop()和undeploy,可能需要等待线程等,然后重新开始

有很多框架允许动态部署


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接