tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hls...@apache.org
Subject cvs commit: jakarta-tapestry/framework/src/java/org/apache/tapestry/services Infrastructure.java ApplicationGlobals.java
Date Sun, 03 Apr 2005 14:50:00 GMT
hlship      2005/04/03 07:50:00

  Modified:    framework/src/java/org/apache/tapestry/services/impl
                        ApplicationGlobalsImpl.java InfrastructureImpl.java
                        AbstractSetupApplicationGlobals.java
                        ImplStrings.properties
                        SetupServletApplicationGlobals.java
                        ImplMessages.java
               framework/src/java/org/apache/tapestry
                        TapestryConstants.java TapestryStrings.properties
               framework/src/java/org/apache/tapestry/engine
                        AbstractEngine.java
               framework/src/java/org/apache/tapestry/wml WMLEngine.java
               framework/src/java/org/apache/tapestry/services
                        Infrastructure.java ApplicationGlobals.java
  Added:       framework/src/java/org/apache/tapestry/error
                        ExceptionPresenter.java ErrorMessages.java
                        ExceptionPresenterImpl.java ErrorStrings.properties
               framework/src/java/org/apache/tapestry/services/impl
                        DeferredObject.java DeferredObjectImpl.java
                        InfrastructureContribution.java
  Log:
  Implement a more sophisticated, less code-heavy, approach to configuring the Infrastructure service's properties.
  Factor the presentation of runtime exceptions out into a new service, ExceptionPresenter.
  
  Revision  Changes    Path
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/error/ExceptionPresenter.java
  
  Index: ExceptionPresenter.java
  ===================================================================
  // Copyright 2005 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package org.apache.tapestry.error;
  
  import org.apache.tapestry.IRequestCycle;
  
  /**
   * Invoked by the {@link org.apache.tapestry.IEngine} if there's an uncaught exception
   * (checked or runtime) processing a request. The ExceptionPresenter is responsible for presenting a
   * exception message (or description) to the user. The default implementation activates the
   * "Exception" page, but it is common to override this to do something application specific
   * (typically, return to the Home page and display an error message there). This service also
   * provides a good hook for creating a server-side log of exceptions.
   * 
   * @author Howard M. Lewis Ship
   * @since 3.1
   */
  public interface ExceptionPresenter
  {
      /**
       * Report the exception and provide some response to the user in lieu of the expected result
       * page.
       * 
       * @param cycle
       *            the current request cycle
       * @param cause
       *            the exception that was caught
       */
  
      public void presentException(IRequestCycle cycle, Throwable cause);
  }
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/error/ErrorMessages.java
  
  Index: ErrorMessages.java
  ===================================================================
  // Copyright 2005 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package org.apache.tapestry.error;
  
  import org.apache.hivemind.impl.MessageFormatter;
  
  /**
   * @author Howard M. Lewis Ship
   * @since 3.1
   */
  public final class ErrorMessages
  {
      private static final MessageFormatter _formatter = new MessageFormatter(ErrorMessages.class,
              "ErrorStrings");
  
      public static String unableToProcessClientRequest(Throwable cause)
      {
          return _formatter.format("unable-to-process-client-request", cause);
      }
  
      static String unableToPresentExceptionPage(Throwable cause)
      {
          return _formatter.format("unable-to-present-exception-page", cause);
      }
  }
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/error/ExceptionPresenterImpl.java
  
  Index: ExceptionPresenterImpl.java
  ===================================================================
  // Copyright 2005 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package org.apache.tapestry.error;
  
  import org.apache.hivemind.ApplicationRuntimeException;
  import org.apache.tapestry.IPage;
  import org.apache.tapestry.IRequestCycle;
  import org.apache.tapestry.services.RequestExceptionReporter;
  import org.apache.tapestry.services.ResponseRenderer;
  
  /**
   * @author Howard M. Lewis Ship
   * @since 3.1
   */
  public class ExceptionPresenterImpl implements ExceptionPresenter
  {
      private RequestExceptionReporter _requestExceptionReporter;
  
      private ResponseRenderer _responseRenderer;
  
      private String _exceptionPageName;
  
      public void presentException(IRequestCycle cycle, Throwable cause)
      {
          try
          {
              IPage exceptionPage = cycle.getPage(_exceptionPageName);
  
              exceptionPage.setProperty("exception", cause);
  
              cycle.activate(exceptionPage);
  
              _responseRenderer.renderResponse(cycle);
          }
          catch (Throwable ex)
          {
              // Worst case scenario. The exception page itself is broken, leaving
              // us with no option but to write the cause to the output.
  
              _requestExceptionReporter.reportRequestException(ErrorMessages
                      .unableToProcessClientRequest(cause), cause);
  
              // Also, write the exception thrown when redendering the exception
              // page, so that can get fixed as well.
  
              _requestExceptionReporter.reportRequestException(ErrorMessages
                      .unableToPresentExceptionPage(ex), ex);
  
              // And throw the exception.
  
              throw new ApplicationRuntimeException(ex.getMessage(), ex);
          }
  
      }
  
      public void setExceptionPageName(String exceptionPageName)
      {
          _exceptionPageName = exceptionPageName;
      }
  
      public void setRequestExceptionReporter(RequestExceptionReporter requestExceptionReporter)
      {
          _requestExceptionReporter = requestExceptionReporter;
      }
  
      public void setResponseRenderer(ResponseRenderer responseRenderer)
      {
          _responseRenderer = responseRenderer;
      }
  }
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/error/ErrorStrings.properties
  
  Index: ErrorStrings.properties
  ===================================================================
  # Copyright 2005 The Apache Software Foundation
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  
  unable-to-process-client-request=Unable to process client request: {0}
  unable-to-present-exception-page=Unable to present exception page: {0}
  
  
  
  1.11      +0 -39     jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/ApplicationGlobalsImpl.java
  
  Index: ApplicationGlobalsImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/ApplicationGlobalsImpl.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- ApplicationGlobalsImpl.java	29 Mar 2005 22:19:55 -0000	1.10
  +++ ApplicationGlobalsImpl.java	3 Apr 2005 14:50:00 -0000	1.11
  @@ -16,10 +16,7 @@
   
   import java.util.List;
   
  -import org.apache.tapestry.describe.HTMLDescriber;
   import org.apache.tapestry.services.ApplicationGlobals;
  -import org.apache.tapestry.services.LinkFactory;
  -import org.apache.tapestry.services.ResponseRenderer;
   import org.apache.tapestry.spec.IApplicationSpecification;
   import org.apache.tapestry.web.WebActivator;
   import org.apache.tapestry.web.WebContext;
  @@ -40,12 +37,6 @@
   
       private List _factoryServices;
   
  -    private ResponseRenderer _responseRenderer;
  -
  -    private LinkFactory _linkFactory;
  -
  -    private HTMLDescriber _htmlDescriber;
  -
       public void storeActivator(WebActivator activator)
       {
           _activator = activator;
  @@ -90,34 +81,4 @@
       {
           return _factoryServices;
       }
  -
  -    public ResponseRenderer getResponseRenderer()
  -    {
  -        return _responseRenderer;
  -    }
  -
  -    public void storeResponseRenderer(ResponseRenderer responseRenderer)
  -    {
  -        _responseRenderer = responseRenderer;
  -    }
  -
  -    public LinkFactory getLinkFactory()
  -    {
  -        return _linkFactory;
  -    }
  -
  -    public void storeLinkFactory(LinkFactory linkFactory)
  -    {
  -        _linkFactory = linkFactory;
  -    }
  -
  -    public HTMLDescriber getHTMLDescriber()
  -    {
  -        return _htmlDescriber;
  -    }
  -
  -    public void storeHTMLDescriber(HTMLDescriber describer)
  -    {
  -        _htmlDescriber = describer;
  -    }
   }
  \ No newline at end of file
  
  
  
  1.26      +133 -161  jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/InfrastructureImpl.java
  
  Index: InfrastructureImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/InfrastructureImpl.java,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- InfrastructureImpl.java	29 Mar 2005 22:19:55 -0000	1.25
  +++ InfrastructureImpl.java	3 Apr 2005 14:50:00 -0000	1.26
  @@ -14,17 +14,25 @@
   
   package org.apache.tapestry.services.impl;
   
  +import java.util.HashMap;
  +import java.util.Iterator;
  +import java.util.List;
   import java.util.Locale;
  +import java.util.Map;
   
  +import org.apache.hivemind.ApplicationRuntimeException;
   import org.apache.hivemind.ClassResolver;
  +import org.apache.hivemind.ErrorLog;
   import org.apache.hivemind.Resource;
   import org.apache.hivemind.service.ThreadLocale;
  +import org.apache.hivemind.util.Defense;
   import org.apache.tapestry.describe.HTMLDescriber;
   import org.apache.tapestry.engine.IPageSource;
   import org.apache.tapestry.engine.IPropertySource;
   import org.apache.tapestry.engine.IScriptSource;
   import org.apache.tapestry.engine.ISpecificationSource;
   import org.apache.tapestry.engine.state.ApplicationStateManager;
  +import org.apache.tapestry.error.ExceptionPresenter;
   import org.apache.tapestry.markup.MarkupWriterSource;
   import org.apache.tapestry.services.ComponentMessagesSource;
   import org.apache.tapestry.services.ComponentPropertySource;
  @@ -52,77 +60,51 @@
    */
   public class InfrastructureImpl implements Infrastructure
   {
  +    /**
  +     * List of {@link org.apache.tapestry.services.impl.InfrastructureContribution}.
  +     */
  +    private List _normalContributions;
   
  -    private String _applicationId;
  +    /**
  +     * List of {@link org.apache.tapestry.services.impl.InfrastructureContribution}.
  +     */
  +    private List _overrideContributions;
   
  -    private IPropertySource _applicationPropertySource;
  +    private Map _properties = new HashMap();
   
  -    private IApplicationSpecification _applicationSpecification;
  +    private boolean _initialized;
   
  -    private ApplicationStateManager _applicationStateManager;
  +    private String _mode;
   
  -    private ClassResolver _classResolver;
  -
  -    private ComponentMessagesSource _componentMessagesSource;
  -
  -    private ComponentPropertySource _componentPropertySource;
  -
  -    private WebContext _context;
  -
  -    private DataSqueezer _dataSqueezer;
  -
  -    private IPropertySource _globalPropertySource;
  -
  -    private LinkFactory _linkFactory;
  -
  -    private ObjectPool _objectPool;
  -
  -    private IPageSource _pageSource;
  -
  -    private WebRequest _request;
  -
  -    private RequestCycleFactory _requestCycleFactory;
  -
  -    private RequestExceptionReporter _requestExceptionReporter;
  -
  -    private ResetEventCoordinator _resetEventCoordinator;
  -
  -    private WebResponse _response;
  -
  -    private ResponseRenderer _responseRenderer;
  -
  -    private IScriptSource _scriptSource;
  -
  -    private ServiceMap _serviceMap;
  -
  -    private ISpecificationSource _specificationSource;
  +    private ErrorLog _errorLog;
   
  -    private TemplateSource _templateSource;
  +    private ClassResolver _classResolver;
   
       private ThreadLocale _threadLocale;
   
  -    private MarkupWriterSource _markupWriterSource;
  -
  -    private HTMLDescriber _htmlDescriber;
  +    public void setLocale(Locale locale)
  +    {
  +        _threadLocale.setLocale(locale);
  +    }
   
       public String getApplicationId()
       {
  -        return _applicationId;
  +        return (String) getProperty("applicationId");
       }
   
       public IPropertySource getApplicationPropertySource()
       {
  -        return _applicationPropertySource;
  +        return (IPropertySource) getProperty("applicationPropertySource");
       }
   
       public IApplicationSpecification getApplicationSpecification()
       {
  -        return _applicationSpecification;
  +        return (IApplicationSpecification) getProperty("applicationSpecification");
       }
   
       public ApplicationStateManager getApplicationStateManager()
       {
  -        return _applicationStateManager;
  +        return (ApplicationStateManager) getProperty("applicationStateManager");
       }
   
       public ClassResolver getClassResolver()
  @@ -132,247 +114,237 @@
   
       public ComponentMessagesSource getComponentMessagesSource()
       {
  -        return _componentMessagesSource;
  +        return (ComponentMessagesSource) getProperty("componentMessagesSource");
       }
   
       public ComponentPropertySource getComponentPropertySource()
       {
  -        return _componentPropertySource;
  +        return (ComponentPropertySource) getProperty("componentPropertySource");
       }
   
       public String getContextPath()
       {
  -        return _request.getContextPath();
  +        return getRequest().getContextPath();
       }
   
       public Resource getContextRoot()
       {
  -        return new WebContextResource(_context, "/");
  +        WebContext context = (WebContext) getProperty("context");
  +
  +        return new WebContextResource(context, "/");
       }
   
       public DataSqueezer getDataSqueezer()
       {
  -        return _dataSqueezer;
  -
  +        return (DataSqueezer) getProperty("dataSqueezer");
       }
   
       public IPropertySource getGlobalPropertySource()
       {
  -        return _globalPropertySource;
  +        return (IPropertySource) getProperty("globalPropertySource");
       }
   
       public LinkFactory getLinkFactory()
       {
  -        return _linkFactory;
  +        return (LinkFactory) getProperty("linkFactory");
       }
   
       public ObjectPool getObjectPool()
       {
  -        return _objectPool;
  +        return (ObjectPool) getProperty("objectPool");
       }
   
       public IPageSource getPageSource()
       {
  -        return _pageSource;
  +        return (IPageSource) getProperty("pageSource");
       }
   
       public WebRequest getRequest()
       {
  -        return _request;
  +        return (WebRequest) getProperty("request");
       }
   
       public RequestCycleFactory getRequestCycleFactory()
       {
  -        return _requestCycleFactory;
  +        return (RequestCycleFactory) getProperty("requestCycleFactory");
       }
   
       public RequestExceptionReporter getRequestExceptionReporter()
       {
  -        return _requestExceptionReporter;
  +        return (RequestExceptionReporter) getProperty("requestExceptionReporter");
       }
   
       public ResetEventCoordinator getResetEventCoordinator()
       {
  -        return _resetEventCoordinator;
  +        return (ResetEventCoordinator) getProperty("resetEventCoordinator");
       }
   
       public WebResponse getResponse()
       {
  -        return _response;
  +        return (WebResponse) getProperty("response");
       }
   
       public ResponseRenderer getResponseRenderer()
       {
  -        return _responseRenderer;
  +        return (ResponseRenderer) getProperty("responseRenderer");
       }
   
       public IScriptSource getScriptSource()
       {
  -        return _scriptSource;
  +        return (IScriptSource) getProperty("scriptSource");
       }
   
       public ServiceMap getServiceMap()
       {
  -        return _serviceMap;
  +        return (ServiceMap) getProperty("serviceMap");
       }
   
       public ISpecificationSource getSpecificationSource()
       {
  -        return _specificationSource;
  +        return (ISpecificationSource) getProperty("specificationSource");
       }
   
       public TemplateSource getTemplateSource()
       {
  -        return _templateSource;
  +        return (TemplateSource) getProperty("templateSource");
       }
   
  -    public void setApplicationId(String applicationId)
  +    public String getOutputEncoding()
       {
  -        _applicationId = applicationId;
  +        return getApplicationPropertySource().getPropertyValue(
  +                "org.apache.tapestry.output-encoding");
       }
   
  -    public void setApplicationPropertySource(IPropertySource source)
  +    public MarkupWriterSource getMarkupWriterSource()
       {
  -        _applicationPropertySource = source;
  +        return (MarkupWriterSource) getProperty("markupWriterSource");
       }
   
  -    public void setApplicationSpecification(IApplicationSpecification specification)
  +    public HTMLDescriber getHTMLDescriber()
       {
  -        _applicationSpecification = specification;
  +        return (HTMLDescriber) getProperty("HTMLDescriber");
       }
   
  -    public void setApplicationStateManager(ApplicationStateManager applicationStateManager)
  +    public ExceptionPresenter getExceptionPresenter()
       {
  -        _applicationStateManager = applicationStateManager;
  +        return (ExceptionPresenter) getProperty("exceptionPresenter");
       }
   
  -    public void setClassResolver(ClassResolver resolver)
  +    public Object getProperty(String propertyName)
       {
  -        _classResolver = resolver;
  -    }
  +        Defense.notNull(propertyName, "propertyName");
   
  -    public void setComponentMessagesSource(ComponentMessagesSource source)
  -    {
  -        _componentMessagesSource = source;
  -    }
  +        if (!_initialized)
  +            throw new IllegalStateException(ImplMessages.infrastructureNotInitialized());
   
  -    public void setComponentPropertySource(ComponentPropertySource componentPropertySource)
  -    {
  -        _componentPropertySource = componentPropertySource;
  -    }
  +        Object result = _properties.get(propertyName);
   
  -    public void setContext(WebContext context)
  -    {
  -        _context = context;
  -    }
  +        if (result == null)
  +            throw new ApplicationRuntimeException(ImplMessages
  +                    .missingInfrastructureProperty(propertyName));
   
  -    public void setDataSqueezer(DataSqueezer dataSqueezer)
  -    {
  -        _dataSqueezer = dataSqueezer;
  +        return result;
       }
   
  -    public void setGlobalPropertySource(IPropertySource globalPropertySource)
  +    public synchronized void initialize(String mode)
       {
  -        _globalPropertySource = globalPropertySource;
  -    }
  +        Defense.notNull(mode, "mode");
   
  -    public void setLinkFactory(LinkFactory linkFactory)
  -    {
  -        _linkFactory = linkFactory;
  -    }
  +        if (_initialized)
  +            throw new IllegalStateException(ImplMessages.infrastructureAlreadyInitialized(
  +                    mode,
  +                    _mode));
   
  -    public void setLocale(Locale value)
  -    {
  -        _threadLocale.setLocale(value);
  -    }
  +        Map normalByMode = buildMapFromContributions(_normalContributions, mode);
  +        Map normal = buildMapFromContributions(_normalContributions, null);
  +        Map overrideByMode = buildMapFromContributions(_overrideContributions, mode);
  +        Map override = buildMapFromContributions(_overrideContributions, null);
   
  -    public void setObjectPool(ObjectPool pool)
  -    {
  -        _objectPool = pool;
  -    }
  +        addToProperties(overrideByMode);
  +        addToProperties(override);
  +        addToProperties(normalByMode);
  +        addToProperties(normal);
   
  -    public void setPageSource(IPageSource source)
  -    {
  -        _pageSource = source;
  +        _mode = mode;
  +        _initialized = true;
       }
   
  -    public void setRequest(WebRequest request)
  +    private Map buildMapFromContributions(List contributions, String mode)
       {
  -        _request = request;
  -    }
  +        Map result = new HashMap();
   
  -    public void setRequestCycleFactory(RequestCycleFactory requestCycleFactory)
  -    {
  -        _requestCycleFactory = requestCycleFactory;
  -    }
  +        Iterator i = contributions.iterator();
  +        while (i.hasNext())
  +        {
  +            InfrastructureContribution ic = (InfrastructureContribution) i.next();
   
  -    public void setRequestExceptionReporter(RequestExceptionReporter requestExceptionReporter)
  -    {
  -        _requestExceptionReporter = requestExceptionReporter;
  -    }
  +            if (!ic.matchesMode(mode))
  +                continue;
   
  -    public void setResetEventCoordinator(ResetEventCoordinator coordinator)
  -    {
  -        _resetEventCoordinator = coordinator;
  -    }
  +            String propertyName = ic.getProperty();
   
  -    public void setResponse(WebResponse response)
  -    {
  -        _response = response;
  -    }
  +            InfrastructureContribution existing = (InfrastructureContribution) result
  +                    .get(propertyName);
   
  -    public void setResponseRenderer(ResponseRenderer responseRenderer)
  -    {
  -        _responseRenderer = responseRenderer;
  -    }
  +            if (existing != null)
  +            {
  +                _errorLog.error(ImplMessages.duplicateInfrastructureContribution(ic, existing
  +                        .getLocation()), ic.getLocation(), null);
  +                continue;
  +            }
   
  -    public void setScriptSource(IScriptSource scriptSource)
  -    {
  -        _scriptSource = scriptSource;
  -    }
  +            result.put(propertyName, ic);
  +        }
   
  -    public void setServiceMap(ServiceMap serviceMap)
  -    {
  -        _serviceMap = serviceMap;
  +        return result;
       }
   
  -    public void setSpecificationSource(ISpecificationSource source)
  -    {
  -        _specificationSource = source;
  -    }
  +    /**
  +     * Adds to the master set of properties contributed objects that don't match an already existing
  +     * key.
  +     * 
  +     * @param map
  +     *            map of {@link org.apache.tapestry.services.impl.InfrastructureContribution}keyed
  +     *            on property name (String).
  +     */
   
  -    public void setTemplateSource(TemplateSource source)
  +    private void addToProperties(Map map)
       {
  -        _templateSource = source;
  -    }
  +        Iterator i = map.values().iterator();
  +        while (i.hasNext())
  +        {
  +            InfrastructureContribution ic = (InfrastructureContribution) i.next();
  +            String propertyName = ic.getProperty();
   
  -    public void setThreadLocale(ThreadLocale threadLocale)
  -    {
  -        _threadLocale = threadLocale;
  +            if (_properties.containsKey(propertyName))
  +                continue;
  +
  +            _properties.put(propertyName, ic.getObject());
  +        }
       }
   
  -    public String getOutputEncoding()
  +    public void setClassResolver(ClassResolver classResolver)
       {
  -        return _applicationPropertySource.getPropertyValue("org.apache.tapestry.output-encoding");
  +        _classResolver = classResolver;
       }
   
  -    public MarkupWriterSource getMarkupWriterSource()
  +    public void setThreadLocale(ThreadLocale threadLocale)
       {
  -        return _markupWriterSource;
  +        _threadLocale = threadLocale;
       }
   
  -    public void setMarkupWriterSource(MarkupWriterSource markupWriterSource)
  +    public void setNormalContributions(List normalContributions)
       {
  -        _markupWriterSource = markupWriterSource;
  +        _normalContributions = normalContributions;
       }
   
  -    public HTMLDescriber getHTMLDescriber()
  +    public void setOverrideContributions(List overrideContributions)
       {
  -        return _htmlDescriber;
  +        _overrideContributions = overrideContributions;
       }
   
  -    public void setHTMLDescriber(HTMLDescriber htmlDescriber)
  +    public void setErrorLog(ErrorLog errorLog)
       {
  -        _htmlDescriber = htmlDescriber;
  +        _errorLog = errorLog;
       }
   }
  \ No newline at end of file
  
  
  
  1.3       +7 -21     jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/AbstractSetupApplicationGlobals.java
  
  Index: AbstractSetupApplicationGlobals.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/AbstractSetupApplicationGlobals.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AbstractSetupApplicationGlobals.java	29 Mar 2005 22:19:55 -0000	1.2
  +++ AbstractSetupApplicationGlobals.java	3 Apr 2005 14:50:00 -0000	1.3
  @@ -18,6 +18,7 @@
   
   import org.apache.tapestry.describe.HTMLDescriber;
   import org.apache.tapestry.services.ApplicationGlobals;
  +import org.apache.tapestry.services.Infrastructure;
   import org.apache.tapestry.services.LinkFactory;
   import org.apache.tapestry.services.ResponseRenderer;
   
  @@ -35,18 +36,13 @@
   
       private List _factoryServices;
   
  -    private ResponseRenderer _responseRenderer;
  +    private Infrastructure _infrastructure;
   
  -    private LinkFactory _linkFactory;
  -
  -    private HTMLDescriber _HTMLDescriber;
  -
  -    protected void initialize()
  +    protected void initialize(String mode)
       {
           _globals.storeFactoryServices(_factoryServices);
  -        _globals.storeResponseRenderer(_responseRenderer);
  -        _globals.storeLinkFactory(_linkFactory);
  -        _globals.storeHTMLDescriber(_HTMLDescriber);
  +
  +        _infrastructure.initialize(mode);
       }
   
       public void setGlobals(ApplicationGlobals globals)
  @@ -59,18 +55,8 @@
           _factoryServices = factoryServices;
       }
   
  -    public void setResponseRenderer(ResponseRenderer responseRenderer)
  -    {
  -        _responseRenderer = responseRenderer;
  -    }
  -
  -    public void setLinkFactory(LinkFactory linkFactory)
  -    {
  -        _linkFactory = linkFactory;
  -    }
  -
  -    public void setHTMLDescriber(HTMLDescriber describer)
  +    public void setInfrastructure(Infrastructure infrastructure)
       {
  -        _HTMLDescriber = describer;
  +        _infrastructure = infrastructure;
       }
   }
  \ No newline at end of file
  
  
  
  1.13      +5 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/ImplStrings.properties
  
  Index: ImplStrings.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/ImplStrings.properties,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- ImplStrings.properties	25 Mar 2005 20:36:58 -0000	1.12
  +++ ImplStrings.properties	3 Apr 2005 14:50:00 -0000	1.13
  @@ -54,4 +54,8 @@
   error-resetting=Error resetting cached data at end of request: {0}
   engine-service-outer-proxy-to-string=<OuterProxy for engine service ''{0}''>
   engine-service-inner-proxy-to-string=<InnerProxy for engine service ''{0}''>
  -service-name-mismatch=Engine service {0} is mapped to name ''{1}'' but indicates a name of ''{2}''.
  \ No newline at end of file
  +service-name-mismatch=Engine service {0} is mapped to name ''{1}'' but indicates a name of ''{2}''.
  +infrastructure-already-initialized=The Infrastructure service can not be initialized for mode ''{0}'', it has already been initialized for mode ''{1}''.  The Infrastructure may only be initialized once.
  +infrastructure-not-initialized=The Infrastructure service has not yet been initialized.
  +duplicate-infrastructure-contribution=Infrastructure contribution for property ''{0}'' (mode ''{1}'') conflicts with a prior contribution (at {2}) and has been ignored.
  +missing-infrastructure-property=Infrastructure property ''{0}'' is not defined.
  \ No newline at end of file
  
  
  
  1.2       +1 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/SetupServletApplicationGlobals.java
  
  Index: SetupServletApplicationGlobals.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/SetupServletApplicationGlobals.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SetupServletApplicationGlobals.java	22 Mar 2005 21:54:39 -0000	1.1
  +++ SetupServletApplicationGlobals.java	3 Apr 2005 14:50:00 -0000	1.2
  @@ -32,6 +32,6 @@
   {
       public void initialize(HttpServlet servlet)
       {
  -        initialize();
  +        initialize("servlet");
       }
   }
  \ No newline at end of file
  
  
  
  1.14      +28 -0     jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/ImplMessages.java
  
  Index: ImplMessages.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/ImplMessages.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- ImplMessages.java	25 Mar 2005 20:36:58 -0000	1.13
  +++ ImplMessages.java	3 Apr 2005 14:50:00 -0000	1.14
  @@ -23,6 +23,7 @@
   import javax.servlet.http.HttpServlet;
   
   import org.apache.hivemind.HiveMind;
  +import org.apache.hivemind.Location;
   import org.apache.hivemind.Resource;
   import org.apache.hivemind.impl.MessageFormatter;
   import org.apache.tapestry.IComponent;
  @@ -236,4 +237,31 @@
       {
           return _formatter.format("service-name-mismatch", service, expectedName, actualName);
       }
  +
  +
  +
  +    static String infrastructureAlreadyInitialized(String newMode, String initializedMode)
  +    {
  +        return _formatter.format("infrastructure-already-initialized", newMode, initializedMode);
  +    }
  +
  +    static String duplicateInfrastructureContribution(InfrastructureContribution conflict,
  +            Location existingLocation)
  +    {
  +        return _formatter.format(
  +                "duplicate-infrastructure-contribution",
  +                conflict.getProperty(),
  +                conflict.getMode(),
  +                existingLocation);
  +    }
  +
  +    static String infrastructureNotInitialized()
  +    {
  +        return _formatter.getMessage("infrastructure-not-initialized");
  +    }
  +
  +    static String missingInfrastructureProperty(String propertyName)
  +    {
  +        return _formatter.format("missing-infrastructure-property", propertyName);
  +    }
   }
  \ No newline at end of file
  
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/DeferredObject.java
  
  Index: DeferredObject.java
  ===================================================================
  // Copyright 2005 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package org.apache.tapestry.services.impl;
  
  import org.apache.hivemind.Locatable;
  
  /**
   * Interface for an object that can provide a second, target object. This encapsulates the process
   * of obtaining the target object (which is presumably expensive) so that the operation can be
   * deferred or even avoided.
   * 
   * @author Howard M. Lewis Ship
   * @since 3.1
   * @see org.apache.tapestry.services.impl.DeferredObjectTranslator
   */
  public interface DeferredObject extends Locatable
  {
      /**
       * Returns the target object. The caller is expected to cache the result, if appropriate.
       */
      public Object getObject();
  
  }
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/DeferredObjectImpl.java
  
  Index: DeferredObjectImpl.java
  ===================================================================
  // Copyright 2005 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package org.apache.tapestry.services.impl;
  
  import org.apache.hivemind.Location;
  import org.apache.hivemind.internal.Module;
  import org.apache.hivemind.schema.Translator;
  
  /**
   * An encapsulation of an invocation of
   * {@link org.apache.hivemind.schema.Translator#translate(org.apache.hivemind.internal.Module, java.lang.Class, java.lang.String, org.apache.hivemind.Location)},
   * allowing the actual invocation (and all the object creation, etc., that entails) to be deferred,
   * or even avoided all together.
   * 
   * @author Howard M. Lewis Ship
   * @since 3.1
   */
  public class DeferredObjectImpl implements DeferredObject
  {
      private final Module _module;
  
      private final Translator _objectTranslator;
  
      private final String _objectReference;
  
      private final Location _location;
  
      private Object _object;
  
      public DeferredObjectImpl(final Translator objectTranslator, final Module module,
              final String objectReference, final Location location)
      {
          _objectTranslator = objectTranslator;
          _module = module;
          _objectReference = objectReference;
          _location = location;
      }
  
      public synchronized Object getObject()
      {
          if (_object == null)
              _object = _objectTranslator.translate(
                      _module,
                      Object.class,
                      _objectReference,
                      _location);
  
          return _object;
      }
  
      public Location getLocation()
      {
          return _location;
      }
  }
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/InfrastructureContribution.java
  
  Index: InfrastructureContribution.java
  ===================================================================
  // Copyright 2005 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package org.apache.tapestry.services.impl;
  
  import org.apache.hivemind.impl.BaseLocatable;
  
  /**
   * A contribution to the {@link org.apache.tapestry.services.Infrastructure}&nbsp;service. Defines
   * a property of Infrastructure and the value for that property. The infrastructure is setup in a
   * <em>mode</em> (currently, either "servlet" or "portlet"). Contributions that define a non-null
   * mode are ignored unless their mode matches the Infrastructure mode.
   * <p>
   * There are two configuration points that control Infrastructure:
   * <code>tapestry.Infrastructure</code> and <code>tapestry.InfrastructureOverride</code>.
   * 
   * @author Howard M. Lewis Ship
   * @since 3.1
   */
  public class InfrastructureContribution extends BaseLocatable
  {
      private String _property;
  
      private String _mode;
  
      private DeferredObject _deferredObject;
  
      public void setDeferredObject(DeferredObject deferredObject)
      {
          _deferredObject = deferredObject;
      }
  
      /**
       * The object which should be exposed as the given Infrastructure property.
       */
      public Object getObject()
      {
          return _deferredObject.getObject();
      }
  
      /**
       * The mode for which this contribution applies, or null if the contribution applies to all
       * modes.
       */
  
      public String getMode()
      {
          return _mode;
      }
  
      public void setMode(String mode)
      {
          _mode = mode;
      }
  
      /**
       * The property of the {@link org.apache.tapestry.services.Infrastructure}for which a value is
       * to be provided.
       */
  
      public String getProperty()
      {
          return _property;
      }
  
      public void setProperty(String property)
      {
          _property = property;
      }
  
      public boolean matchesMode(String mode)
      {
          // If our mode is null, then we only match null.
  
          if (_mode == mode)
              return true;
  
          // Otherwise, match our non-null model against their possibly-null mode.
  
          return _mode != null && _mode.equals(mode);
      }
  }
  
  
  1.4       +3 -0      jakarta-tapestry/framework/src/java/org/apache/tapestry/TapestryConstants.java
  
  Index: TapestryConstants.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/TapestryConstants.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TapestryConstants.java	28 Feb 2005 18:44:51 -0000	1.3
  +++ TapestryConstants.java	3 Apr 2005 14:50:00 -0000	1.4
  @@ -24,6 +24,7 @@
        * The name ("Home") of the default page presented when a user first accesses the application.
        * 
        * @see org.apache.tapestry.engine.HomeService
  +     * @deprecated To be removed in 3.2.
        */
   
       public static final String HOME_PAGE = "Home";
  @@ -33,6 +34,8 @@
        * <p>
        * Such a page must have a writable JavaBeans property named 'exception' of type
        * <code>java.lang.Throwable</code>.
  +     * 
  +     * @deprecated To be removed in 3.2.
        */
   
       public static final String EXCEPTION_PAGE = "Exception";
  
  
  
  1.19      +0 -2      jakarta-tapestry/framework/src/java/org/apache/tapestry/TapestryStrings.properties
  
  Index: TapestryStrings.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/TapestryStrings.properties,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- TapestryStrings.properties	22 Mar 2005 13:40:54 -0000	1.18
  +++ TapestryStrings.properties	3 Apr 2005 14:50:00 -0000	1.19
  @@ -106,8 +106,6 @@
   
   # org.apache.tapestry.engine
   
  -AbstractEngine.unable-to-process-client-request=Unable to process client request.
  -AbstractEngine.unable-to-present-exception-page=Unable to present exception page.
   AbstractEngine.unable-to-begin-request=Tapestry unable to begin processing request.
   AbstractEngine.unable-to-cleanup-page=Unable to cleanup page {0}.
   AbstractEngine.unable-to-create-cleanup-context=Unable to create an instance of RequestContext to process end-of-session page cleanups.
  
  
  
  1.28      +5 -35     jakarta-tapestry/framework/src/java/org/apache/tapestry/engine/AbstractEngine.java
  
  Index: AbstractEngine.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/engine/AbstractEngine.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- AbstractEngine.java	24 Mar 2005 16:50:16 -0000	1.27
  +++ AbstractEngine.java	3 Apr 2005 14:50:00 -0000	1.28
  @@ -42,6 +42,7 @@
   import org.apache.tapestry.Tapestry;
   import org.apache.tapestry.TapestryConstants;
   import org.apache.tapestry.listener.ListenerMap;
  +import org.apache.tapestry.request.RequestContext;
   import org.apache.tapestry.services.DataSqueezer;
   import org.apache.tapestry.services.Infrastructure;
   import org.apache.tapestry.spec.IApplicationSpecification;
  @@ -121,49 +122,18 @@
       public static final String VISIT_CLASS_PROPERTY_NAME = "org.apache.tapestry.visit-class";
   
       /**
  -     * Sets the Exception page's exception property, then renders the Exception page.
  -     * <p>
  -     * If the render throws an exception, then copious output is sent to <code>System.err</code>
  -     * and a {@link ServletException}is thrown.
  +     * @see org.apache.tapestry.error.ExceptionPresenter
        */
   
       protected void activateExceptionPage(IRequestCycle cycle, Throwable cause)
       {
  -        try
  -        {
  -            IPage exceptionPage = cycle.getPage(getExceptionPageName());
  -
  -            exceptionPage.setProperty("exception", cause);
  -
  -            cycle.activate(exceptionPage);
  -
  -            renderResponse(cycle);
  -
  -        }
  -        catch (Throwable ex)
  -        {
  -            // Worst case scenario. The exception page itself is broken, leaving
  -            // us with no option but to write the cause to the output.
  -
  -            reportException(
  -                    Tapestry.getMessage("AbstractEngine.unable-to-process-client-request"),
  -                    cause);
  -
  -            // Also, write the exception thrown when redendering the exception
  -            // page, so that can get fixed as well.
  -
  -            reportException(
  -                    Tapestry.getMessage("AbstractEngine.unable-to-present-exception-page"),
  -                    ex);
  -
  -            // And throw the exception.
  -
  -            throw new ApplicationRuntimeException(ex.getMessage(), ex);
  -        }
  +        _infrastructure.getExceptionPresenter().presentException(cycle, cause);
       }
   
       /**
        * Writes a detailed report of the exception to <code>System.err</code>.
  +     * 
  +     * @see org.apache.tapestry.services.RequestExceptionReporter
        */
   
       public void reportException(String reportTitle, Throwable ex)
  
  
  
  1.7       +4 -5      jakarta-tapestry/framework/src/java/org/apache/tapestry/wml/WMLEngine.java
  
  Index: WMLEngine.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/wml/WMLEngine.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- WMLEngine.java	1 Apr 2005 19:07:57 -0000	1.6
  +++ WMLEngine.java	3 Apr 2005 14:50:00 -0000	1.7
  @@ -17,6 +17,7 @@
   import org.apache.tapestry.IRequestCycle;
   import org.apache.tapestry.Tapestry;
   import org.apache.tapestry.engine.BaseEngine;
  +import org.apache.tapestry.error.ErrorMessages;
   
   /**
    * Subclass of {@link BaseEngine}used for WML applications to change the Exception, StaleLink and
  @@ -28,14 +29,12 @@
   
   public class WMLEngine extends BaseEngine
   {
  -    protected void activateExceptionPage(IRequestCycle cycle,
  -            Throwable cause)
  +    protected void activateExceptionPage(IRequestCycle cycle, Throwable cause)
       {
           super.activateExceptionPage(cycle, cause);
  +
           // Sometimes the exception page isn't enough
  -        reportException(
  -                Tapestry.getMessage("AbstractEngine.unable-to-process-client-request"),
  -                cause);
  +        reportException(ErrorMessages.unableToProcessClientRequest(cause), cause);
       }
   
       /** @since 3.0 * */
  
  
  
  1.27      +39 -12    jakarta-tapestry/framework/src/java/org/apache/tapestry/services/Infrastructure.java
  
  Index: Infrastructure.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/Infrastructure.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- Infrastructure.java	1 Apr 2005 19:07:56 -0000	1.26
  +++ Infrastructure.java	3 Apr 2005 14:50:00 -0000	1.27
  @@ -24,6 +24,7 @@
   import org.apache.tapestry.engine.IScriptSource;
   import org.apache.tapestry.engine.ISpecificationSource;
   import org.apache.tapestry.engine.state.ApplicationStateManager;
  +import org.apache.tapestry.error.ExceptionPresenter;
   import org.apache.tapestry.markup.MarkupWriterSource;
   import org.apache.tapestry.spec.IApplicationSpecification;
   import org.apache.tapestry.web.WebRequest;
  @@ -39,28 +40,48 @@
   public interface Infrastructure
   {
       /**
  -     * Returns the {@link org.apache.tapestry.spec.IApplicationSpecification}for the current
  +     * Initializes the Infrastructure for a particular mode.
  +     * 
  +     * @throws IllegalStateException
  +     *             if the Infrastructure has already been initialized.
  +     */
  +
  +    public void initialize(String mode);
  +
  +    /**
  +     * Returns a named property.
  +     * 
  +     * @throws IllegalStateException
  +     *             if the Infrastructure has not yet been initialized.
  +     * @throws org.apache.hivemind.ApplicationRuntimeException
  +     *             if no value has been contributed for specified property name.
  +     */
  +
  +    public Object getProperty(String propertyName);
  +
  +    /**
  +     * Returns the {@link org.apache.tapestry.spec.IApplicationSpecification}&nbsp;for the current
        * application.
        */
   
       public IApplicationSpecification getApplicationSpecification();
   
       /**
  -     * Returns an {@link IPropertySource}configured to search the application specification, etc.
  -     * See <code>tapestry.ApplicationPropertySource</code>.
  +     * Returns an {@link IPropertySource}&nbsp;configured to search the application specification,
  +     * etc. See <code>tapestry.ApplicationPropertySource</code>.
        */
       public IPropertySource getApplicationPropertySource();
   
       /**
  -     * Returns an {@link IPropertySource}configured to search the servlet, servlet context, and
  -     * factory defaults.
  +     * Returns an {@link IPropertySource}&nbsp;configured to search the servlet, servlet context,
  +     * and factory defaults.
        */
   
       public IPropertySource getGlobalPropertySource();
   
       /**
        * Returns the coordinator to be notified of reset events (which will, in turn, notify other
  -     * services).
  +     * services that they should discard cached data).
        */
   
       public ResetEventCoordinator getResetEventCoordinator();
  @@ -110,7 +131,7 @@
       public DataSqueezer getDataSqueezer();
   
       /**
  -     * The source for read-to-execute versions of Tapestry script templates.
  +     * The source for ready-to-execute versions of Tapestry script templates.
        */
   
       public IScriptSource getScriptSource();
  @@ -134,14 +155,14 @@
       public ResponseRenderer getResponseRenderer();
   
       /**
  -     * Constructs {@link org.apache.tapestry.engine.ILink}instances for
  +     * Constructs {@link org.apache.tapestry.engine.ILink}&nbsp;instances for
        * {@link org.apache.tapestry.engine.IEngineService}s.
        */
   
       public LinkFactory getLinkFactory();
   
       /**
  -     * Used by the {@link org.apache.tapestry.IEngine}to create instances of
  +     * Used by the {@link org.apache.tapestry.IEngine}&nbsp;to create instances of
        * {@link org.apache.tapestry.IRequestCycle}.
        */
   
  @@ -155,13 +176,13 @@
       public ApplicationStateManager getApplicationStateManager();
   
       /**
  -     * Returns the container request for the current request cycle.
  +     * Returns the request for the current request cycle.
        */
   
       public WebRequest getRequest();
   
       /**
  -     * Returns the container response for the current request cycle.
  +     * Returns the response for the current request cycle.
        */
   
       public WebResponse getResponse();
  @@ -206,6 +227,12 @@
       public String getOutputEncoding();
   
       public MarkupWriterSource getMarkupWriterSource();
  -    
  +
       public HTMLDescriber getHTMLDescriber();
  +
  +    /**
  +     * Responsible for presenting an exception error report to the user.
  +     */
  +
  +    public ExceptionPresenter getExceptionPresenter();
   }
  \ No newline at end of file
  
  
  
  1.12      +0 -20     jakarta-tapestry/framework/src/java/org/apache/tapestry/services/ApplicationGlobals.java
  
  Index: ApplicationGlobals.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/ApplicationGlobals.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- ApplicationGlobals.java	29 Mar 2005 22:19:54 -0000	1.11
  +++ ApplicationGlobals.java	3 Apr 2005 14:50:00 -0000	1.12
  @@ -16,7 +16,6 @@
   
   import java.util.List;
   
  -import org.apache.tapestry.describe.HTMLDescriber;
   import org.apache.tapestry.spec.IApplicationSpecification;
   import org.apache.tapestry.web.WebActivator;
   import org.apache.tapestry.web.WebContext;
  @@ -75,23 +74,4 @@
        */
   
       public List getFactoryServices();
  -
  -    /**
  -     * Stores the {@link org.apache.tapestry.services.ResponseRenderer}.
  -     * <p>
  -     * TODO: Perhaps we should just override the default implementation from within the portlet
  -     * hivemodule.xml.
  -     */
  -
  -    public void storeResponseRenderer(ResponseRenderer renderer);
  -
  -    public ResponseRenderer getResponseRenderer();
  -
  -    public void storeLinkFactory(LinkFactory linkFactory);
  -
  -    public LinkFactory getLinkFactory();
  -    
  -    public void storeHTMLDescriber(HTMLDescriber describer );
  -    
  -    public HTMLDescriber getHTMLDescriber();
   }
  \ No newline at end of file
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org


Mime
View raw message