2010-05-12 181 views
1

我有一个要求,我打算运行后台进程。 一旦用户登录到应用程序中,我需要完成两个过程。 1.验证用户并转到主页 2.获取一些数据并将其放入会话中。运行后台进程

如果我同时做两个10分钟去主页。相反,我希望第二个进程在处理身份验证时在后台运行。

我不需要从第二个进程的数据在主页。我需要一些其他页面,我可以从会话中访问。

有人能让我朝正确的方向吗?

感谢

+0

我会问,如果在会话中存储此数据是非常合适的。一般来说,在会话中存储大型数据结构并不明智,因为性能方面的原因:http://www.ibm.com/developerworks/websphere/library/bestpractices/store_objects_in_httpsession.html – pkaeding 2010-05-12 14:25:37

+0

我不认为这是一个多线程问题;我认为这是一个设计问题。您不需要在会话中投入太多数据,以至于10分钟内就会陷入停滞状态。此外,您还可以在加载数据时使用会话10分钟吗? – 2010-05-12 15:39:30

回答

1

创建一个类extends Threadimplements Runnable并运行它。您可以通过Sun tutorial了解如何操作。在会话范围的托管bean中引用它,以便可以从其他页面访问它。


这就是说,它听起来好像你拖一些数据库表完全到Java的内存这将持续10分钟。我强烈建议不要这样做。这是非常低效的内存,只要多个用户同时访问您的应用程序,它可能会爆炸。添加一些搜索/过滤器/分页逻辑,并相应地编写代码,以便根据当前请求查询只有感兴趣的数据。 Google也不会查询大量记录以将其存储在会话中,并且在当前请求中仅显示其中的10个记录。不要让Java接管数据库的角色,也不要低估数据库的权力。正确建模和编制索引时速度非常快。

+0

感谢您的回复Balusc, 我的要求是当用户从父级下拉列表中选择一个值而不提交时,在页面上填充子菜单。我们的工程师不希望页面在父菜单上每次更改时都刷新。我首先想到了通过添加一个被引用到托管bean中的映射的隐藏变量来实现这一点。但是现在,这需要至少30个Web服务调用父级下拉菜单中的每个值。所以我打算在应用程序启动时将这个web服务调用移动并存储到会话中。但我不希望用户等待10分钟才能进入主页。 – Mahi 2010-05-12 17:51:31

+0

所以我想这是在后台完成,而用户仍然可以浏览我的网站。 我采用不同的方式来做到这一点,并通过这个(http://www.coderanch.com/t/488860/JSF/java/best-way-do-background-processing),这表明我们不应该使用线程在Web应用程序开发中,这使得它不可管理 – Mahi 2010-05-12 17:51:57

+0

如果它不是用户特定的数据,只需将其存储在应用程序范围的托管bean中,该应用程序范围的托管bean将在webapp启动期间加载。 – BalusC 2010-05-12 18:08:07