0

我的用例是:

  1. 一些用户发出获取请求并创建一个运行命令提示符的对象。
  2. 另一个用户想要通过发出另一个 get 请求来终止在步骤 1 中创建的进程。

所以我想在第二个获取请求中访问在第一个获取请求中创建的对象,即我想让对象在应用程序范围内可用。

在Java SE中,我会在main方法中创建一个对象列表,并将其作为参数传递给创建新对象的方法。它将在给定的列表中添加新创建的对象。另一个方法,它必须终止进程,将从该列表中选择对象。但在 EE 中我没有 main 方法,因此在哪里存储应用程序范围内可用的对象。

4

2 回答 2

3

如果您绝对确定使用全局范围(已解决例如同步问题),那么您可以:

  1. 在 Web 应用程序上下文中,使用ServletContext( Javadocs ):

    • 从 JSP 使用application隐式变量。
    • 从 servlet 使用getServletConfig().getServletContext()

    ServletContext行为就像您需要的地图,带有方法setAttribute(String, Object)和. 您可以将您谈论的 Java SE 案例列表放在那里。getAttribute(String)removeAttribute(String)

  2. 在 EJB 上下文中:

    • 使用 JNDI(有点尴尬且特定于应用程序服务器)
    • 将您的列表包装在@Singleton会话 EJB 中(更好)
  3. 从 Web 或 EJB,使用 CDI:

    • 将您的列表包装在一个@ApplicationScopedbean 中(CDI 术语中的单例)
于 2013-09-17T11:19:32.607 回答
1

我认为带有同步列表的单例对象将按预期工作

于 2013-09-17T10:59:08.413 回答