Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javaweb应用中的异步任务_Java_Asynchronous_Quartz Scheduler_Jms_Mdb_Spring_Ejb_Ajax_Comet - Fatal编程技术网

javaweb应用中的异步任务

javaweb应用中的异步任务,java,asynchronous,quartz-scheduler,jms,mdb,spring,ejb,ajax,comet,Java,Asynchronous,Quartz Scheduler,Jms,Mdb,Spring,Ejb,Ajax,Comet,异步作业,如从网站下载分数,或在完成某些关键任务后发送电子邮件。 现在,当我们下载一些分数时,我们必须在当前页面上等待以获得响应页面或下载文件。 有没有可能,我可以点击下载分数,它发生在后台,以便我可以导航到其他部分 同时检查工作状态。或者在以后安排一些作业,并获得其执行结果 通过电子邮件 我们的是一个带有Hibernate 3.5 ORM的struts 2 Web应用程序。在浏览了一些java调度库之后,获得了一些关于Quartz的信息。 但是Quartz是满足上述要求的正确库还是我可以尝试的

异步作业,如从网站下载分数,或在完成某些关键任务后发送电子邮件。 现在,当我们下载一些分数时,我们必须在当前页面上等待以获得响应页面或下载文件。 有没有可能,我可以点击下载分数,它发生在后台,以便我可以导航到其他部分 同时检查工作状态。或者在以后安排一些作业,并获得其执行结果 通过电子邮件

我们的是一个带有Hibernate 3.5 ORM的struts 2 Web应用程序。在浏览了一些java调度库之后,获得了一些关于Quartz的信息。 但是Quartz是满足上述要求的正确库还是我可以尝试的任何其他库?
请为我指明正确的方向。

Quartz无疑是实现这一点的一种方法,如果您希望将作业安排在特定时间或特定频率运行,它将非常有效

如果您只是想在后台启动某个操作以响应用户操作,并检查其状态,那么有几种其他方法可以更好地适合此模式:

  • java.util.concurrent包:您可以设置ThreadPoolExecutor,并向其提交实现可调用的任务。您将返回一个
    Future
    对象,您可以检查该对象的完成情况(
    isDone
    ),并在完成时获取其结果(
    get

  • 对于EJB或Spring,还有一个(会话)bean方法的概念是
    @Async
    @Asynchronous
    ,它也返回
    未来的
    ,其行为如上所述。基本上,这只是从代码中抽象出线程池的创建和管理,并将其移动到容器或框架中


石英无疑是实现这一点的一种方法,如果您希望将作业安排在特定时间或特定频率运行,那么石英效果很好

如果您只是想在后台启动某个操作以响应用户操作,并检查其状态,那么有几种其他方法可以更好地适合此模式:

  • java.util.concurrent包:您可以设置ThreadPoolExecutor,并向其提交实现可调用的任务。您将返回一个
    Future
    对象,您可以检查该对象的完成情况(
    isDone
    ),并在完成时获取其结果(
    get

  • 对于EJB或Spring,还有一个(会话)bean方法的概念是
    @Async
    @Asynchronous
    ,它也返回
    未来的
    ,其行为如上所述。基本上,这只是从代码中抽象出线程池的创建和管理,并将其移动到容器或框架中


    • 您需要某种异步处理支持。您可以使用:

      • -此库非常全面,允许您安排各种作业。如果您只想在后台调度作业并立即运行它们,那么这可能是一种过分的做法

      • 使用线程池,请参见类

      • 队列可以侦听请求并以异步方式处理它们

      • 最后,您可以利用或中的
        @Async
        /
        @Asynchronous
        支持

      然后你必须以某种方式恢复结果。取决于您是想直接在浏览器中传递还是通过电子邮件传递:

      • 每次呈现页面时,请检查是否没有任何已完成/正在进行的作业。如果有一些已完成的作业,请在页面的某个位置显示一个额外的链接(类似于通知)。如果作业正在进行,请启动请求并每隔一秒钟询问一次,或使用长轮询/立即接收结果

      • 如果要通过电子邮件发送结果,只需在作业完成后发送即可。更简单但不那么友好的IMHO


        • 您需要某种异步处理支持。您可以使用:

          • -此库非常全面,允许您安排各种作业。如果您只想在后台调度作业并立即运行它们,那么这可能是一种过分的做法

          • 使用线程池,请参见类

          • 队列可以侦听请求并以异步方式处理它们

          • 最后,您可以利用或中的
            @Async
            /
            @Asynchronous
            支持

          然后你必须以某种方式恢复结果。取决于您是想直接在浏览器中传递还是通过电子邮件传递:

          • 每次呈现页面时,请检查是否没有任何已完成/正在进行的作业。如果有一些已完成的作业,请在页面的某个位置显示一个额外的链接(类似于通知)。如果作业正在进行,请启动请求并每隔一秒钟询问一次,或使用长轮询/立即接收结果

          • 如果要通过电子邮件发送结果,只需在作业完成后发送即可。更简单但不那么友好的IMHO


          感谢您的详细回复。正如关于Quart Scheduler所提到的,该库是关于在后台运行计划作业的,它是否允许在用户交互(按钮单击或链接)关闭的情况下运行作业?Threadpool(executors)也是一种替代解决方案吗?通过用户交互运行作业是什么意思?您可以在用户操作时启动作业,如单击按钮,但作业在后台运行,您无法控制它。Quartz在下面使用线程池,所以如果您需要一些轻量级的东西,可以直接使用线程池。所以直接使用线程池就足以添加作业并在后台执行,并且可以中间获得作业状态。并在工作完成后在网站上发送电子邮件或弹出窗口。@SangramAnand:如果这是一个问题,那么是的