2010-09-20 12 views
2

Je souhaite utiliser le filtre suivant pour ouvrir et fermer les gestionnaires de persistance.Depuis un servlet, comment accéder à un ensemble de variables à l'intérieur d'un filtre de servlet correspondant?

public final class PersistenceFilter implements Filter { 
    private static final PersistenceManagerFactory persistenceManagerFactory 
     = JDOHelper.getPersistenceManagerFactory("transactions-optional"); 

    private static PersistenceManagerFactory factory() { 
     return persistenceManagerFactory; 
    } 

    private static ThreadLocal currentManager = new ThreadLocal(); 

    public static PersistenceManager getManager() { 
     if (currentManager.get() == null) { 
      currentManager.set(factory().getPersistenceManager()); 
     } 
     return currentManager.get(); 
    } 
    @Override 
    public void doFilter(ServletRequest req, ServletResponse res, 
      FilterChain chain) throws IOException, ServletException { 
     PersistenceManager manager = null; 
     try { 
      manager = getManager(); 
      //Optional: allow all persistent objects implementing a custom interface 
      //to be notified of when they are saved and loaded. 
      manager.addInstanceLifecycleListener(new PersistHookListener(), PersistHooks.class); 
      chain.doFilter(req, res); 
     } finally { 
      if (manager != null) { 
       manager.flush(); 
       manager.close(); 
      } 
     } 
    } 
    @Override 
    public void init(FilterConfig arg0) throws ServletException {} 
    @Override 
    public void destroy() {} 
} 

Ce que je ne sais pas comment accéder à la variable manager à l'intérieur du servlet correspondant qui est appelé après ce filtre.

Répondre

3

Dans le filtre, mettez le gestionnaire comme attribut de requête:

request.setAttribute("persistenceManager", manager); 

Ensuite, dans le servlet, il est accessible avec:

PersistenceManager manager = 
    (PersistenceManager) request.getAttribute("persistenceManager"); 
Questions connexes