You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2004/03/29 14:31:25 UTC

cvs commit: cocoon-2.1/src/blocks/eventcache/java/org/apache/cocoon/generation EventCacheGenerator.java

cziegeler    2004/03/29 04:31:25

  Modified:    src/blocks/eventcache/java/org/apache/cocoon/acting
                        CacheEventAction.java
               src/blocks/eventcache/java/org/apache/cocoon/generation
                        EventCacheGenerator.java
  Log:
  Make cache role configurable on event action
  Always release cache in action
  Use ServiceSelector and dispose selector in generator
  
  Revision  Changes    Path
  1.6       +17 -12    cocoon-2.1/src/blocks/eventcache/java/org/apache/cocoon/acting/CacheEventAction.java
  
  Index: CacheEventAction.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/eventcache/java/org/apache/cocoon/acting/CacheEventAction.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- CacheEventAction.java	5 Mar 2004 13:01:56 -0000	1.5
  +++ CacheEventAction.java	29 Mar 2004 12:31:25 -0000	1.6
  @@ -50,19 +50,24 @@
                       String src,
                       Parameters par
       ) throws Exception {
  -        Cache cache = (Cache)this.manager.lookup(Cache.ROLE + "/EventAware");
  -        if (cache instanceof EventAwareCacheImpl) {
  -            String eventName = par.getParameter("event");
  -            if (getLogger().isDebugEnabled()) {
  -                getLogger().debug("Configured for cache event named: " + eventName);
  +        final String cacheRole = par.getParameter("cache-role", Cache.ROLE + "/EventAware");
  +        Cache cache = (Cache)this.manager.lookup(cacheRole);
  +        try {
  +            // FIXME - This cast might not work with every container!
  +            if (cache instanceof EventAwareCacheImpl) {
  +                String eventName = par.getParameter("event");
  +                if (getLogger().isDebugEnabled()) {
  +                    getLogger().debug("Configured for cache event named: " + eventName);
  +                }
  +                if (eventName == null || "".equals(eventName)) {
  +                    return null;
  +                }
  +                ((EventAwareCacheImpl)cache).processEvent(
  +                                                    new NamedEvent(eventName));
               }
  -            if (eventName == null || "".equals(eventName)) {
  -                return null;
  -            }
  -            ((EventAwareCacheImpl)cache).processEvent(
  -                                                new NamedEvent(eventName));
  +        } finally {
  +            this.manager.release(cache);
           }
  -        this.manager.release(cache);
           return EMPTY_MAP;
       }
   }
  
  
  
  1.5       +39 -10    cocoon-2.1/src/blocks/eventcache/java/org/apache/cocoon/generation/EventCacheGenerator.java
  
  Index: EventCacheGenerator.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/eventcache/java/org/apache/cocoon/generation/EventCacheGenerator.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- EventCacheGenerator.java	5 Mar 2004 13:01:56 -0000	1.4
  +++ EventCacheGenerator.java	29 Mar 2004 12:31:25 -0000	1.5
  @@ -20,8 +20,6 @@
   import java.util.HashMap;
   import java.util.Map;
   
  -import org.apache.avalon.framework.component.ComponentException;
  -import org.apache.avalon.framework.component.ComponentSelector;
   import org.apache.avalon.framework.configuration.Configurable;
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.ConfigurationException;
  @@ -29,6 +27,7 @@
   import org.apache.avalon.framework.parameters.Parameters;
   import org.apache.avalon.framework.service.ServiceException;
   import org.apache.avalon.framework.service.ServiceManager;
  +import org.apache.avalon.framework.service.ServiceSelector;
   import org.apache.cocoon.ProcessingException;
   import org.apache.cocoon.caching.CacheableProcessingComponent;
   import org.apache.cocoon.caching.validity.Event;
  @@ -100,7 +99,7 @@
       
       // ---------------------------------------------------- member variables
       
  -    private ComponentSelector m_generatorSelector;
  +    private ServiceSelector m_generatorSelector;
       private Generator m_delegate;
       private Serializable m_key;
       private Event m_event;
  @@ -108,14 +107,18 @@
       private Map m_types = new HashMap();
       
       
  -    // ---------------------------------------------------- lifecycle methods
  -    
  +    /* (non-Javadoc)
  +     * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
  +     */
       public void service(ServiceManager manager)  throws ServiceException {
           super.service(manager);
  -        m_generatorSelector = (ComponentSelector) 
  +        m_generatorSelector = (ServiceSelector) 
               manager.lookup(Generator.ROLE + "Selector");
       }
   
  +    /* (non-Javadoc)
  +     * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
  +     */
       public void configure(Configuration configuration) throws ConfigurationException {
           Configuration[] factories = configuration.getChildren(FACTORY_CONF);
           for (int i = 0; i < factories.length; i++) {
  @@ -139,9 +142,12 @@
           }
       }
       
  +    /* (non-Javadoc)
  +     * @see org.apache.cocoon.sitemap.SitemapModelComponent#setup(org.apache.cocoon.environment.SourceResolver, java.util.Map, java.lang.String, org.apache.avalon.framework.parameters.Parameters)
  +     */
       public void setup(SourceResolver resolver, Map objectModel, String src,
                         Parameters par)
  -        throws ProcessingException, SAXException, IOException {
  +    throws ProcessingException, SAXException, IOException {
   
           // delegate
           String delegate = par.getParameter(DELEGATE_PARAM, null);
  @@ -152,7 +158,7 @@
           }
           try {
               m_delegate = (Generator) m_generatorSelector.select(delegate);
  -        } catch (ComponentException e) {
  +        } catch (ServiceException e) {
               final String message =
                   "Transformer '" + delegate + "' could not be found.";
               throw new ProcessingException(message); 
  @@ -176,14 +182,23 @@
           m_key = SourceUtil.appendParameters(src,par);
       }
   
  +    /* (non-Javadoc)
  +     * @see org.apache.cocoon.xml.XMLProducer#setConsumer(org.apache.cocoon.xml.XMLConsumer)
  +     */
       public void setConsumer(XMLConsumer consumer) {
           m_delegate.setConsumer(consumer);
       }
   
  +    /* (non-Javadoc)
  +     * @see org.apache.cocoon.generation.Generator#generate()
  +     */
       public void generate() throws IOException, SAXException, ProcessingException {
           m_delegate.generate();
       }
   
  +    /* (non-Javadoc)
  +     * @see org.apache.avalon.excalibur.pool.Recyclable#recycle()
  +     */
       public void recycle() {
           if ( m_delegate != null ) {
               m_generatorSelector.release(m_delegate);
  @@ -195,14 +210,28 @@
       }
   
       
  -    // ---------------------------------------------------- caching strategy
  -    
  +    /* (non-Javadoc)
  +     * @see org.apache.cocoon.caching.CacheableProcessingComponent#getKey()
  +     */
       public Serializable getKey() {
           return m_key;
       }
   
  +    /* (non-Javadoc)
  +     * @see org.apache.cocoon.caching.CacheableProcessingComponent#getValidity()
  +     */
       public SourceValidity getValidity() {
           return new EventValidity(m_event);
       }
   
  +    /* (non-Javadoc)
  +     * @see org.apache.avalon.framework.activity.Disposable#dispose()
  +     */
  +    public void dispose() {
  +        if ( this.manager != null ) {
  +            this.manager.release(m_generatorSelector);
  +            m_generatorSelector = null;
  +        }
  +        super.dispose();
  +    }
   }