Java EE 6: Comment injecter ServletContext dans managed bean

(Java EE 6 avec Glassfish 3.1)

J'ai un fichier de propriété que je veux processus une seule fois, au démarrage, j'ai donc fait cela

public class Config implements ServletContextListener{

    private static final String CONFIG_FILE_PATH = "C:\\dev\\harry\\core.cfg";

    private static final String CONFIG_ATTRIBUTE_NAME = "config";

    private long startupTime;

    private ConfigRecord config;

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        this.startupTime = System.currentTimeMillis() / 1000;
        this.config = new ConfigRecord(CONFIG_FILE_PATH); //Parse the property file
        sce.getServletContext().setAttribute(CONFIG_ATTRIBUTE_NAME, this);
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        //Nothing to do here
    }

    public ConfigRecord getConfig() {
        return config;
    }

    public long getStartupTime() {
        return startupTime;
    }
}

et dans web.xml, je m'inscrire comme suit

<listener>
    <listener-class>com.wf.docsys.core.servlet.Config</listener-class>
</listener>

Maintenant, comment puis-je accéder à la ConfigRecord config du managed bean. J'ai essayer cette

@ManagedBean
@RequestScoped 
public class DisplayInbound {

    @EJB
    private CoreMainEJBLocal coreMainEJBLocal;

    @javax.ws.rs.core.Context
    private ServletContext servletContext;

    public void test(){
        Config config = (Config) servletContext.getAttribute("config")
        ConfigRecord configRecord = config.getConfig();
    }
}

Je ne pense pas que cela fonctionne. Obtenu NullPointerException.

OriginalL'auteur Thang Pham | 2011-06-27