• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

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

jsf 来源:felipegf 3次浏览

我有两个问题:从ApplicationScoped bean访问RequestContext是否需要同步?

  1. 是合法的访问从PrimeFaces的RequestContext@ApplicationScoped豆里面?
  2. 必须向RequestContext访问同步?

支持bean

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

的index.xhtml

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

===========解决方案如下:

是合法的从PrimeFaces访问的RequestContext的@ApplicationScoped豆里面?

是的,只要你不把它作为应用程序作用域bean的实例变量(属性)。

注意的是,同为FacesContextExternalContextHttpServletRequestHttpServletResponseHttpSesison,etc..etc ..他们都没有应用范围的,因此可能会导致重大的麻烦被分配/共享为应用程序的属性时也是如此有限的bean。

我必须承认,你所选择的bean类名MyDatabaseConnection真的让我害怕结合@ApplicationScoped注解。数据库连接绝对不适用于应用程序范围。又见其中包括:Is it safe to use a static java.sql.Connection instance in a multithreaded system?


必须向RequestContext的访问同步?

不,你不需要。它在当前代码示例中已在方法local scope中获得,并且未作为bean的属性进行分配。

  • How do servlets work? Instantiation, sessions, shared variables and multithreading
  • How to choose the right bean scope?

如下回答应该了解 “请求”, “会话” 和 “应用” 范围的含义是有帮助


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)