控制 Servlet 何时终止
我有一些配置存储在 servlet 上下文中,在 servlet 之间共享。当前的方法是在调用任何 servlet 的 init() 方法时将配置加载到 servlet 共享的静态哈希图的单个副本中。但问题是 servlet 不会消失,因此即使我更改了 servlet 上下文中的配置,配置也不会重置。因为 servlet 永远不会再次调用 init(),所以它们不会将配置重新加载到 hashmap 中。
我使用的是 websphere 7,有什么地方可以配置 servlet 何时终止以及新的 servlet 何时诞生?
我认为当有新请求时从 servlet 上下文重新加载配置太笨拙了。
编辑: 我有一个调度程序,它将创建一个新线程来检查特定数据文件,如果数据文件是新的,它将创建一个哈希图(包含数据文件的内容)作为 servlet 上下文中的属性。
现在,servlet 将检查 hashmap 的 servlet 上下文,并将其复制到静态 hashmap,以便在刚刚创建并调用 init() 时在 servlet 之间共享使用。但问题是servlet在执行过程中不会死掉,它只会使预定的动作不起作用。
I have some configuration stored in the servlet context, sharing among servlets. The current approach is to load the config into a single copy of static hashmap shared by the servlets when the init() method of any servlet is called. But the problem is the servlets just won't die, so the configuration just won't reset even if I changed the configuration in the servlet context. Because the servlet never call init() again, they will not reload the configuration into the hashmap.
I am using websphere 7, is there any place I can configure when does a servlet die, and a new servlet is born?
I think it is too clumsy to reload the configuration from the servlet context when there is a new request.
Edit:
I have a scheduler which will create a new thread to check for a specific data file, if the data file was new, it will create a hashmap(with content of the data file) as an attribute in the servlet context.
Now the servlets will check for the servlet context for the hashmap and copy it to a static hashmap for shared use among servlets when they are just created and call init(). But the problem is that the servlet won't die during the execution, it just make the scheduled action not working.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不。
将设置重构为单独的数据对象(而不是 HashMap 或 servlet 实例字段)以供 servlet 实例共享。更改调度程序/警报以直接更新共享数据对象。
No.
Refactor the settings into a separate data object (rather than a HashMap or servlet instance fields) to be shared by servlet instances. Change the scheduler/alarm to update the shared data object directly.
为什么不将这些数据存储在 JNDI 中,以便 servlet 可以在需要时获取它?这样,您就可以完全控制数据; Servlet 生命周期将不再重要。
Why not store this data in JNDI, where the servlets can get it whenever they need it? That way, you have complete control of the data; the servlet lifecycle would no longer matter.