从ApplicationScoped bean访问RequestContext是否需要同步?

时间:2013-11-22 19:07:01

标签: jsf jsf-2 primefaces

我有两个问题:

  1. RequestContext bean中的PrimeFaces访问@ApplicationScoped是否合法?
  2. 是否必须同步RequestContext的访问权限?
  3. 支持bean

    @ApplicationScoped
    public class MyDatabaseConnection
    {
      public void do()
      {
        RequestContext ctx = RequestContext.getCurrentInstance();
        // ...
      }
    }
    

    的index.xhtml

    <p:commandButton actionListener="#{myDatabaseConnection.do}"/>
    

1 个答案:

答案 0 :(得分:4)

  

从@ApplicationScoped bean中的PrimeFaces访问RequestContext是否合法?

是的,只要您不将其指定为应用程序作用域bean的实例变量(属性)。

请注意,同样适用于FacesContextExternalContextHttpServletRequestHttpServletResponseHttpSesison等等。它们都不是应用程序作用域,因此在被指定/共享为应用程序作用域bean的属性时会导致重大麻烦。

我必须承认,您选择的bean类名MyDatabaseConnection确实让我与@ApplicationScoped注释相结合。数据库连接绝对不是应用程序作用域。另请参阅:Is it safe to use a static java.sql.Connection instance in a multithreaded system?


  

是否必须同步对RequestContext的访问?

不,你不需要。它在当前的代码示例中是在方法本地范围内获得的,而不是作为bean的属性赋值。

以下答案应有助于理解“请求”,“会话”和“应用程序”范围的含义: