cocoon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From blorit...@apache.org
Subject cvs commit: xml-cocoon/webapp/docs/samples/forms employee.xsp
Date Thu, 18 Jan 2001 21:34:37 GMT
bloritsch    01/01/18 13:34:37

  Modified:    src/org/apache/cocoon Tag: xml-cocoon2
                        CocoonComponentSelector.java
                        DefaultComponentManager.java
               webapp/docs/samples/forms Tag: xml-cocoon2 employee.xsp
  Log:
  Fixed many ills in the Component Management scheme
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.12  +38 -53    xml-cocoon/src/org/apache/cocoon/Attic/CocoonComponentSelector.java
  
  Index: CocoonComponentSelector.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/Attic/CocoonComponentSelector.java,v
  retrieving revision 1.1.2.11
  retrieving revision 1.1.2.12
  diff -u -r1.1.2.11 -r1.1.2.12
  --- CocoonComponentSelector.java	2001/01/17 18:33:35	1.1.2.11
  +++ CocoonComponentSelector.java	2001/01/18 21:34:28	1.1.2.12
  @@ -40,7 +40,7 @@
   /** Default component manager for Cocoon's non sitemap components.
    * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
    * @author <a href="mailto:paul@luminas.co.uk">Paul Russell</a>
  - * @version CVS $Revision: 1.1.2.11 $ $Date: 2001/01/17 18:33:35 $
  + * @version CVS $Revision: 1.1.2.12 $ $Date: 2001/01/18 21:34:28 $
    */
   public class CocoonComponentSelector implements ComponentSelector, Composer, Configurable,
ThreadSafe {
       protected Logger log = LogKit.getLoggerFor("cocoon");
  @@ -48,10 +48,6 @@
        */
       private Map components;
   
  -    /** Thread safe instances.
  -     */
  -    private Map threadSafeInstances;
  -
       /** Static component instances.
        */
       private Map instances;
  @@ -72,7 +68,6 @@
       public CocoonComponentSelector() {
           // Setup the maps.
           components = Collections.synchronizedMap(new HashMap());
  -        threadSafeInstances = Collections.synchronizedMap(new HashMap());
           configurations = Collections.synchronizedMap(new HashMap());
           pools = Collections.synchronizedMap(new HashMap());
           instances = Collections.synchronizedMap(new HashMap());
  @@ -99,18 +94,18 @@
               throw new ComponentNotFoundException("Attempted to retrieve component with
null hint.");
           }
   
  +        // Retrieve the instance of the requested component
  +        component = (Component) this.instances.get(hint);
  +
  +        if ( component != null ) {
  +            return component;
  +        }
  +
           // Retrieve the class of the requested component.
           Class componentClass = (Class)this.components.get(hint);
  -
  -        if ( componentClass == null ) {
  -            component = (Component)this.instances.get(hint);
  -            if ( component == null ) {
  -                log.error("CocoonComponentSelector Could not find component for hint '"
+ hint.toString() + "'.");
  -                throw new ComponentNotFoundException("Could not find component for hint
'" + hint.toString() + "'.");
  -            } else {
  -                // we found an individual instance of a component.
  -                return component;
  -            }
  +        if (componentClass == null) {
  +            log.error("CocoonComponentSelector Could not find component for hint '" + hint.toString()
+ "'.");
  +            throw new ComponentNotFoundException("Could not find component for hint '"
+ hint.toString() + "'.");
           }
   
           if ( !Component.class.isAssignableFrom(componentClass) ) {
  @@ -142,7 +137,7 @@
                       e
                   );
               }
  -            setupComponent(component);
  +            setupComponent(hint, component);
           } else {
               /* The component doesn't implement any of the Avalon marker
                * classes, treat as normal.
  @@ -162,12 +157,32 @@
                       e
                   );
               }
  -            setupComponent(component);
  +            setupComponent(hint, component);
           }
   
           return component;
       }
   
  +    private Component getThreadsafeComponent(Object hint, Class component)
  +    throws ComponentManagerException {
  +
  +        Component retVal = (Component) this.instances.get(hint);
  +
  +        if (retVal == null) {
  +            try {
  +                retVal = (Component) component.newInstance();
  +
  +                this.setupComponent(hint, retVal);
  +                this.instances.put(hint, retVal);
  +            } catch (Exception e) {
  +                log.error("Could not set up the Component for hint: " + String.valueOf(hint),
e);
  +                throw new ComponentNotAccessibleException("Could not set up the Component
for hint: " + String.valueOf(hint), e);
  +            }
  +        }
  +
  +        return retVal;
  +    }
  +
       public void configure(Configuration conf) throws ConfigurationException {
           log.debug("CocoonComponentSelector setting up with root element: " + conf.getName());
           Iterator instances = conf.getChildren("component-instance");
  @@ -186,36 +201,6 @@
           }
       }
   
  -    /** Retrieve an instance of a threadsafe component.
  -     * @param componentClass the class to retrieve an instance of.
  -     * @return and instance of the component.
  -     */
  -    private Component getThreadsafeComponent(Object hint, Class componentClass)
  -    throws ComponentManagerException {
  -        Component component = (Component)threadSafeInstances.get(componentClass);
  -
  -        if ( component == null ) {
  -            try {
  -                component = (Component)componentClass.newInstance();
  -            } catch ( InstantiationException e ) {
  -                log.error("Could not access component", e);
  -                throw new ComponentNotAccessibleException(
  -                    "Failed to instantiate component " + componentClass.getName() + ":
" + e.getMessage(),
  -                    e
  -                );
  -            } catch ( IllegalAccessException e ) {
  -                log.error("Could not access component", e);
  -                throw new ComponentNotAccessibleException(
  -                    "Could not access component " + componentClass.getName() + ": " + e.getMessage(),
  -                    e
  -                );
  -            }
  -            setupComponent(component);
  -            threadSafeInstances.put(hint,component);
  -        }
  -        return component;
  -    }
  -
       /** Return an instance of a component from its associated pool.
        * @param componentClass the class of the component of which we need an instance.
        */
  @@ -226,7 +211,7 @@
           if ( pool == null ) {
               try {
                   pool = new ComponentPool(
  -                    new ComponentFactory(componentClass, (Configuration)configurations.get(componentClass),
this.manager),
  +                    new ComponentFactory(componentClass, (Configuration)configurations.get(hint),
this.manager),
                       new ComponentPoolController()
                       );
               } catch (Exception e) {
  @@ -257,12 +242,12 @@
       /** Configure a new component.
        * @param c the component to configure.
        */
  -    private void setupComponent(Component c)
  +    private void setupComponent(Object hint, Component c)
       throws ComponentManagerException {
           if ( c instanceof Configurable ) {
               try {
                   ((Configurable)c).configure(
  -                    (Configuration)this.configurations.get(c.getClass())
  +                    (Configuration)this.configurations.get(hint)
                   );
               } catch (ConfigurationException e) {
                   log.error("CocoonComponentSelector Could not configure component " + c.getClass().getName(),
e);
  @@ -286,7 +271,7 @@
       private void addComponent(Object hint, Class component, Configuration config) {
           this.components.put(hint,component);
           if ( config != null ) {
  -            this.configurations.put(component,config);
  +            this.configurations.put(hint, config);
           }
       }
   
  @@ -294,7 +279,7 @@
        * @param hint the hint name for the component.
        * @param instance the instance of the component.
        */
  -    public void addComponentInstance(Object hint, Object instance) {
  +    public void addComponentInstance(Object hint, Component instance) {
           this.instances.put(hint,instance);
       }
   }
  
  
  
  1.1.2.11  +41 -70    xml-cocoon/src/org/apache/cocoon/Attic/DefaultComponentManager.java
  
  Index: DefaultComponentManager.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/Attic/DefaultComponentManager.java,v
  retrieving revision 1.1.2.10
  retrieving revision 1.1.2.11
  diff -u -r1.1.2.10 -r1.1.2.11
  --- DefaultComponentManager.java	2001/01/17 18:33:35	1.1.2.10
  +++ DefaultComponentManager.java	2001/01/18 21:34:30	1.1.2.11
  @@ -38,7 +38,7 @@
   
   /** Default component manager for Cocoon's non sitemap components.
    * @author <a href="mailto:paul@luminas.co.uk">Paul Russell</a>
  - * @version CVS $Revision: 1.1.2.10 $ $Date: 2001/01/17 18:33:35 $
  + * @version CVS $Revision: 1.1.2.11 $ $Date: 2001/01/18 21:34:30 $
    */
   public class DefaultComponentManager implements ComponentManager, Configurable {
   
  @@ -48,10 +48,6 @@
        */
       private Map components;
   
  -    /** Thread safe instances.
  -     */
  -    private Map threadSafeInstances;
  -
       /** Static component instances.
        */
       private Map instances;
  @@ -69,7 +65,6 @@
       public DefaultComponentManager() {
           // Setup the maps.
           components = Collections.synchronizedMap(new HashMap());
  -        threadSafeInstances = Collections.synchronizedMap(new HashMap());
           configurations = Collections.synchronizedMap(new HashMap());
           pools = Collections.synchronizedMap(new HashMap());
           instances = Collections.synchronizedMap(new HashMap());
  @@ -77,45 +72,39 @@
   
       /** Return an instance of a component.
        */
  -    public Component lookup( String role ) throws
  -        ComponentManagerException {
  +    public Component lookup( String role )
  +    throws ComponentManagerException {
   
           Component component;
   
           if ( role == null ) {
  -            log.error("Attempted to retrieve a component with a null Role");
  -            throw new ComponentNotFoundException("Attempted to retrieve component will
null roll.");
  +            log.error("DefaultComponentManager Attempted to retrieve component with null
role.");
  +            throw new ComponentNotFoundException("Attempted to retrieve component with
null role.");
  +        }
  +
  +        // Retrieve the instance of the requested component
  +        component = (Component) this.instances.get(role);
  +
  +        if ( component != null ) {
  +            return component;
           }
   
           // Retrieve the class of the requested component.
           Class componentClass = (Class)this.components.get(role);
   
  -        if ( componentClass == null ) {
  -            component = (Component)this.instances.get(role);
  -            if ( component == null ) {
  -                String className = RoleUtils.defaultClass(role);
  -                if (className == null) {
  -                    log.error(role + " could not be found");
  -                    throw new ComponentNotFoundException("Could not find component for
role '" + role + "'.");
  -                }
  -                try {
  -                    componentClass = ClassUtils.loadClass(className);
  -                } catch (Exception e) {
  -                    throw new ComponentNotAccessibleException("Could not load component
for role '" + role + "'.", e);
  -                }
  -                this.components.put(role, componentClass);
  -                if (Configurable.class.isAssignableFrom(componentClass)) {
  -                    this.configurations.put(role, new DefaultConfiguration("", "-"));
  -                }
  -            } else {
  -                // we found an individual instance of a component.
  -                log.debug("DefaultComponentManager returned instance for role " + role
+ ".");
  -                return component;
  +        if (componentClass == null) {
  +            try {
  +                componentClass = ClassUtils.loadClass(RoleUtils.defaultClass(role));
  +            } catch (Exception e) {
  +                log.error("DefaultComponentManager Could not find component for role '"
+ role + "'.", e);
  +                throw new ComponentNotFoundException("Could not find component for role
'" + role + "'.", e);
               }
  +
  +            this.components.put(role, componentClass);
           }
   
           if ( !Component.class.isAssignableFrom(componentClass) ) {
  -            log.error("The object found is not a Component");
  +            log.error("DefaultComponentManager Component with role '" + role + "' (" +
componentClass.getName() + ")does not implement Component.");
               throw new ComponentNotAccessibleException(
                   "Component with role '" + role + "' (" + componentClass.getName() + ")does
not implement Component.",
                   null
  @@ -123,28 +112,21 @@
           }
   
           // Work out what class of component we're dealing with.
  -        if ( ThreadSafe.class.isAssignableFrom(componentClass) ) {
  -            log.debug("DefaultComponentManager using threadsafe instance of " + componentClass.getName()
+ " for role " + role + ".");
  +        if ( ThreadSafe.class.isAssignableFrom(componentClass)) {
               component = getThreadsafeComponent(role, componentClass);
           } else if ( Poolable.class.isAssignableFrom(componentClass) ) {
  -            log.debug("DefaultComponentManager using poolable instance of "
  -                + componentClass.getName() + " for role " + role + "."
  -            );
  -            component = getPooledComponent(componentClass);
  +            component = getPooledComponent(role, componentClass);
           } else if ( SingleThreaded.class.isAssignableFrom(componentClass) ) {
               try {
  -                log.debug("DefaultComponentManager using new instance of single threaded
component "
  -                    + componentClass.getName() + "for role " + role + "."
  -                );
                   component = (Component)componentClass.newInstance();
               } catch ( InstantiationException e ) {
  -                log.error("Could not create new instance of SingleThreaded " + role, e);
  +                log.error("DefaultComponentManager Could not access class " + componentClass.getName(),
e);
                   throw new ComponentNotAccessibleException(
                       "Could not instantiate component " + componentClass.getName() + ":
" + e.getMessage(),
                       e
                   );
               } catch ( IllegalAccessException e ) {
  -                log.error("Could not access class " + componentClass.getName(), e);
  +                log.error("DefaultComponentManager Could not access class " + componentClass.getName(),
e);
                   throw new ComponentNotAccessibleException(
                       "Could not access class " + componentClass.getName() + ": " + e.getMessage(),
                       e
  @@ -156,18 +138,15 @@
                * classes, treat as normal.
                */
               try {
  -                log.debug("DefaultComponentManager using new instance of unmarked component
"
  -                    + componentClass.getName() + " for role " + role + "."
  -                );
                   component = (Component)componentClass.newInstance();
               } catch ( InstantiationException e ) {
  -                log.error("Could not create new instance of class " + componentClass.getName(),
e);
  +                log.error("DefaultComponentManager Could not instantiate component " +
componentClass.getName(), e);
                   throw new ComponentNotAccessibleException(
                       "Could not instantiate component " + componentClass.getName() + ":
" + e.getMessage(),
                       e
                   );
               } catch ( IllegalAccessException e ) {
  -                log.error("Could not access class " + componentClass.getName(), e);
  +                log.error("DefaultComponentManager Could not access class " + componentClass.getName(),
e);
                   throw new ComponentNotAccessibleException(
                       "Could not access class " + componentClass.getName() + ": " + e.getMessage(),
                       e
  @@ -235,34 +214,26 @@
        */
       private Component getThreadsafeComponent(String role, Class componentClass)
       throws ComponentManagerException {
  -        Component component = (Component)threadSafeInstances.get(role);
   
  -        if ( component == null ) {
  -            try {
  -                component = (Component)componentClass.newInstance();
  -            } catch ( InstantiationException e ) {
  -                log.error("Failed to instantiate component " + componentClass.getName(),
e);
  -                throw new ComponentNotAccessibleException(
  -                    "Failed to instantiate component " + componentClass.getName() + ":
" + e.getMessage(),
  -                    e
  -                );
  -            } catch ( IllegalAccessException e ) {
  -                log.error("Could not access component " + componentClass.getName(), e);
  -                throw new ComponentNotAccessibleException(
  -                    "Could not access component " + componentClass.getName() + ": " + e.getMessage(),
  -                    e
  -                );
  -            }
  -            setupComponent(role, component);
  -            threadSafeInstances.put(role, component);
  +        Component retVal;
  +
  +        try {
  +            retVal = (Component) componentClass.newInstance();
  +
  +            this.setupComponent(role, retVal);
  +            this.instances.put(role, retVal);
  +        } catch (Exception e) {
  +            log.error("Could not set up the Component for role: " + role, e);
  +            throw new ComponentNotAccessibleException("Could not set up the Component for
role: " + role, e);
           }
  -        return component;
  +
  +        return retVal;
       }
   
       /** Return an instance of a component from its associated pool.
        * @param componentClass the class of the component of which we need an instance.
        */
  -    private Component getPooledComponent(Class componentClass)
  +    private Component getPooledComponent(String role, Class componentClass)
       throws ComponentManagerException {
           ComponentPool pool = (ComponentPool)pools.get(componentClass);
   
  @@ -270,7 +241,7 @@
               try {
                   log.debug("Creating new component pool for " + componentClass.getName()
+ ".");
                   pool = new ComponentPool(
  -                    new ComponentFactory(componentClass, (Configuration)configurations.get(componentClass),
this),
  +                    new ComponentFactory(componentClass, (Configuration)configurations.get(role),
this),
                       new ComponentPoolController()
                       );
               } catch (Exception e) {
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.7   +2 -1      xml-cocoon/webapp/docs/samples/forms/Attic/employee.xsp
  
  Index: employee.xsp
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/webapp/docs/samples/forms/Attic/employee.xsp,v
  retrieving revision 1.1.2.6
  retrieving revision 1.1.2.7
  diff -u -r1.1.2.6 -r1.1.2.7
  --- employee.xsp	2001/01/16 21:44:20	1.1.2.6
  +++ employee.xsp	2001/01/18 21:34:34	1.1.2.7
  @@ -48,11 +48,12 @@
           <input type="hidden" name="employee"/>
           <para>Employee Name:
   	  <input name="name" type="text">
  -	   <xsp:attribute name="value"><xsp:expr>name</xsp:expr></xsp:attribute>
  +	   <xsp:attribute name="value"><xsp:expr>((name != null) ? name : "")</xsp:expr></xsp:attribute>
   	  </input>
   	</para>
           <para>Department:
             <select name="department">
  +            <option value="-1">-- Select department --</option>
               <esql:connection>
                 <esql:pool>personnel</esql:pool>
                 <esql:execute-query>
  
  
  

Mime
View raw message