您的位置:首页 > 运维架构 > 网站架构

B/S架构开发hive客户端程序:后台执行时间长,页面过期问题

2014-01-07 14:15 253 查看
        在公司开发了一套hiveAdmin系统,此系统的主要功能类似于PLSQL Developer,pgAdmin等软件,为的是给熟悉sql语句,但是不熟悉hive的数据分析师等人员方便操作hive。在实际工作中确实有些查询语句执行时间比较长,但是IE等浏览器默认等待响应的时间是5分钟,也就是说如果一个http请求超过5分钟还没有响应,那么页面就会出现超时的情形,见下图。



解决方法:

  主要描述:本系统使用的是struts框架,所以可以在action中启动一个子线程执行查询,主线程则判断子线程的查询结果,在结果未返回之前,主线程则reponse查询状态之类的信息给客户端,以确保上图的问题不发生,可response一些友好而字节比较少的提示信息给前台页面,并且查询结果页面在此action方法中生成,不能用mapping.findForward("****")方法到一个jsp页面。

实际代码(下面代码截取与action方法中):

final PrintWriter out = resp.getWriter();

  out.write("查询正在进行中...");

   out.flush();

   new Thread()//启动一个子线程异步查询

  {

   @Override

   public void run() {

   

    logger.info("查询数据的子线程开始运行。。。。。。");

//下面的result是实际的结果集。

     result = hiveExecuteAO.execute(hq, user, hr, flag );

     logger.info("查询数据的子线程运行结束。。。。。。");

     synchronized(this)

     {

      this.notify();

     }

   };

  }.start();

  

  while(result==null)

  {

   Thread.sleep(1000);

   out.write(".");

   out.flush();

  }

  out.write("查询结束");

     out.flush();

//结果查询处理后

//动态生成jsp页面--------参照sql-result.jsp页面生成-----begin

  logger.info("开始生成页面.......................");

out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");

out.write("<html>");

out.write("<body>");

out.write("实际的结果代码,此处省略n个字");

out.write("</body>");

out.write("</html>");

 out.flush();

  logger.info("生成页面结束.......................");

  return null;

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hive struts 线程 浏览器