2011-09-23 85 views
0

我在网络应用开发面临的一个技术问题浏览别处:保持运行的SQL程序,而在应用程序

这里是我们的目标: 通过点击一个按钮,用户启动一个SQL/Oracle的程序大约需要5到10分钟才能成功结束。该过程是由4个步骤:

  1. 删除用户...
  2. 删除数据...
  3. 复制用户...
  4. 复制DATAS ...

虽然程序正在运行,用户不能启动第二个程序,但可以完成其他任何事情(浏览应用程序中的其他地方,甚至关闭浏览器)。在任何情况下,程序都会在后台完成。

这里是我的技术挑战:

点击后,如果任何用户访问停留在启动页,我希望用户看到执行的监控进展(4个步骤)。 因此,当用户停留在页面上时,我必须考虑刷新页面。在web-app的

技术:

  • 的Java/Java EE中,Struts的,春天,甲骨文SQL9i
  • NO AJAX

你有关于如何使任何建议这行得通 ?

谢谢。

+0

可能在应用程序端的后台/工作线程中启动。将后台启动的过程记录到表中,并且您的前端可以查询日志表以获取最新状态。 – tbone

回答

2

最简单的方法是让您的应用程序使用在独立会话中运行四个步骤的DBMS_JOB包提交作业。您可以使用DBMS_APPLICATION_INFO软件包来测试代码,以便前端可以报告当前状态,也可以写入单独的日志表并从前端查询该日志表。您可以通过让作业通过使用DBMS_LOCK程序包获取用户定义的锁(这将更加健壮)或通过前端检查来查看是否存在已提交的作业DBA_JOBS表。然后,您的前端可以自动刷新页面并显示当前状态。

+0

是否有什么特别的理由推荐'DBMS_JOB'而不是'DBMS_SCHEDULER'?我认为后者会更适合这种事情,因为您可以创建一个通用作业,然后根据需要运行它,而不是每次都创建一个新作业。 – Allan

+0

@Allan - 原始海报说他使用的是“Oracle SQL9i”,我假设它的意思是“Oracle 9i”,它没有DBMS_SCHEDULER包。如果他使用的是更新版本的Oracle,我同意'DBMS_SCHEDULER'包是首选。 –

+0

非常感谢!我正在寻找关于这些Oracle可能性的文档,并且会在之后回来查看更多详细信息! – Clem

相关问题