hlship      2003/08/23 20:28:30

  Modified:    hivemind/src/java/org/apache/commons/hivemind/parse
                        ServiceDescriptor.java DescriptorParser.java
               hivemind/src/java/org/apache/commons/hivemind
                        HiveMindMessages.properties
               hivemind/xdocs descriptor.xml extension-points.xml
                        services.xml
               hivemind/src/test/hivemind/test/parse
                        TestDescriptorParser.java
               hivemind/src/java/org/apache/commons/hivemind/impl
                        ServiceExtensionPointImpl.java RegistryBuilder.java
               hivemind/src/xsl hivemind.xsl
  Log:
  Remove the required attribute from the <service> element; all services are now 
required.
  
  Revision  Changes    Path
  1.10      +1 -13     
jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/parse/ServiceDescriptor.java
  
  Index: ServiceDescriptor.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/parse/ServiceDescriptor.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ServiceDescriptor.java    23 Aug 2003 22:46:03 -0000      1.9
  +++ ServiceDescriptor.java    24 Aug 2003 03:28:29 -0000      1.10
  @@ -72,7 +72,6 @@
   {
       private String _id;
       private String _interfaceClassName;
  -    private boolean _required = true;
       private Schema _parametersSchema;
       private ServiceModel _model = ServiceModel.DEFERRED;
   
  @@ -86,11 +85,6 @@
           return _interfaceClassName;
       }
   
  -    public boolean isRequired()
  -    {
  -        return _required;
  -    }
  -
       public void setId(String string)
       {
           _id = string;
  @@ -101,16 +95,10 @@
           _interfaceClassName = string;
       }
   
  -    public void setRequired(boolean b)
  -    {
  -        _required = b;
  -    }
  -
       protected void extendDescription(ToStringBuilder builder)
       {
           builder.append("id", _id);
           builder.append("interfaceClassName", _interfaceClassName);
  -        builder.append("required", _required);
           builder.append("model", _model);
           builder.append("parametersSchema", _parametersSchema);
       }
  
  
  
  1.28      +1 -3      
jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/parse/DescriptorParser.java
  
  Index: DescriptorParser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/parse/DescriptorParser.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- DescriptorParser.java     23 Aug 2003 22:46:03 -0000      1.27
  +++ DescriptorParser.java     24 Aug 2003 03:28:29 -0000      1.28
  @@ -211,7 +211,6 @@
       static {
           SERVICE_ATTRIBUTES.put("id", Boolean.TRUE);
           SERVICE_ATTRIBUTES.put("interface", Boolean.TRUE);
  -        SERVICE_ATTRIBUTES.put("required", Boolean.FALSE);
           SERVICE_ATTRIBUTES.put("model", Boolean.FALSE);
       }
   
  @@ -895,7 +894,6 @@
   
               sd.setId(getAttribute("id"));
               sd.setInterfaceClassName(getAttribute("interface"));
  -            sd.setRequired(getBooleanAttribute("required", true));
   
               ServiceModel model = (ServiceModel) getEnumAttribute("model", 
MODEL_MAP);
   
  
  
  
  1.25      +2 -3      
jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/HiveMindMessages.properties
  
  Index: HiveMindMessages.properties
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/HiveMindMessages.properties,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- HiveMindMessages.properties       21 Aug 2003 20:07:47 -0000      1.24
  +++ HiveMindMessages.properties       24 Aug 2003 03:28:29 -0000      1.25
  @@ -28,7 +28,6 @@
   ExtensionPointImpl.element-is-null=Module {0} has contributed a null element to 
configuration extension point {1} (at {2}).  The contribution has been ignored.
   ExtensionPointImpl.recursive-configuration=A recursive call to construct 
configuration {0} has occured.  This indicates a cycle between one or more 
configurations or services.
   
  -ServiceExtensionPoint.request-for-missing-service=Unable to provide required 
service {0} because no module contributed a factory.
   ServiceExtensionPoint.unable-to-construct-service=Unable to construct service {0}: 
{1}
   ServiceExtensionPoint.factory-returned-null=Instance factory for service {0} 
returned null.
   ServiceExtensionPoint.factory-wrong-interface=Instance factory for service {0} 
returned {1} which does not implement the {2} interface declared by the extension 
point.
  @@ -57,7 +56,7 @@
   RegistryBuilder.duplicate-module-id=Module {0} is duplicated!  Definition in {2} 
has been ignored in favor of existing definition from {1}.
   RegistryBuilder.unknown-service-extension-point=Module {0} contributes to unknown 
service extension point {1} (at {2}).  The contribution has been ignored.
   RegistryBuilder.duplicate-factory=Module {0} has contributed a instance builder to 
service extension point {1}, which conflicts with an existing contribution by module 
{2}. The duplicate contribution has been ignored.  
  -RegistryBuilder.missing-service=No module has contributed a factory for service 
extension point {0}.
  +RegistryBuilder.missing-service=No module has contributed a service constructor for 
service extension point {0}.
   RegistryBuilder.unknown-configuration-extension-point=Module {0} has contributed to 
unknown configuration extension point {1} (at {2}).  The contribution has been ignored.
   RegistryBuilder.wrong-number-of-contributions=Configuration extension point {0} 
contains {1,choice,0#no contributions|1#one contribution|1<{1,number,integer} 
contributions} but expects {2} contribution.
   RegistryBuilder.one-or-more=at least one
  
  
  
  1.22      +2 -9      jakarta-commons-sandbox/hivemind/xdocs/descriptor.xml
  
  Index: descriptor.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/xdocs/descriptor.xml,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- descriptor.xml    23 Aug 2003 22:46:03 -0000      1.21
  +++ descriptor.xml    24 Aug 2003 03:28:29 -0000      1.22
  @@ -402,14 +402,7 @@
                                        <td>The fully qualified name of the Java 
interface supplied by this
                                                service extension point.</td>
                                </tr>
  -                             <tr>
  -                                     <td>required</td>
  -                                     <td>boolean</td>
  -                                     <td>no</td>
  -                                     <td>If true (the default), then a factory 
contribution must be made to
  -                                             the extension point. If false, then 
the service provided by the
  -                                             extension point is optional.</td>
  -                             </tr>                           
  +                                                     
                                <tr>
                                        <td>model</td>  
                                        <td><code>deferred | singleton | 
threaded</code></td>
  
  
  
  1.6       +4 -2      jakarta-commons-sandbox/hivemind/xdocs/extension-points.xml
  
  Index: extension-points.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/xdocs/extension-points.xml,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- extension-points.xml      20 Aug 2003 20:40:45 -0000      1.5
  +++ extension-points.xml      24 Aug 2003 03:28:30 -0000      1.6
  @@ -249,8 +249,10 @@
        <li><strong>Are the any default implementations of SymbolSource?</strong>
                
                <p>
  -     There is now an extension point for setting "factory defaults":
  +     There is now an extension point for setting factory defaults:
        <a 
href="base-registry/hivemind.html#extension-point:hivemind.FactoryDefaults">hivemind.FactoryDefaults</a>.
  +     A second extension point, for application defaults, overrides the factory 
defaults:
  +     <a 
href="base-registry/hivemind.html#extension-point:hivemind.ApplicationDefaults">hivemind.ApplicationDefaults</a>.
        </p>
        
        <p>
  
  
  
  1.19      +41 -24    jakarta-commons-sandbox/hivemind/xdocs/services.xml
  
  Index: services.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/xdocs/services.xml,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- services.xml      23 Aug 2003 22:46:03 -0000      1.18
  +++ services.xml      24 Aug 2003 03:28:30 -0000      1.19
  @@ -15,9 +15,10 @@
                                interface. You supply the interface (in a module). You 
supply the core
                                implementation of the interface (in the same module, 
or in a different
                                module). At runtime, HiveMind puts it all together.</p>
  -                     <p>HiveMind uses two service models: singleton and pooled.  In 
the singleton model,
  -                             each service will ultimately be just a single object 
instance.  In the pooled model,
  -                             there may be many instances simulataneously.</p>
  +                     <p>HiveMind uses three service models: singleton, deferred and 
threaded.  In the singleton and
  +                             deferred models,
  +                             each service will ultimately be just a single object 
instance.  In the threaded model,
  +                             there may be many instances simultaneously, one for 
each thread.</p>
                </section>
                <section name="Defining Services">
                        <p>A service definition begins with a Java interface. Any 
interface will
  @@ -28,8 +29,7 @@
                        
                        <p>Each &_service;
                         establishes an
  -                             id for the service, defines the interface for the 
service, and indicates
  -                             whether the service is optional or required (required 
is the default).
  +                             id for the service and defines the interface for the 
service.
                                An example is provided later in this document.</p>
                                
                        <p>
  @@ -57,7 +57,7 @@
                                Contributions take three forms: 
                                        
                                                <ul> 
  -                                                     <li>Implementation 
constructors:
  +                                                     <li>Service constructors:
                                                        <ul>
                                                                        
<li>&create-instance; to instantiate an instance of a Java class</li>
                                                                        
<li>&invoke-factory; to have another service create the implementation</li>
  @@ -68,10 +68,10 @@
                                                
                                                </p>
                                                
  -                     <subsection name="Implementation Constructors">
  -                             <p>An implementation constructor is used to 
instantiate a Java class as the
  +                     <subsection name="Service Constructors">
  +                             <p>An service constructor is used to instantiate a 
Java class as the
                                        core implementation instance for the service. 
</p>
  -                             <p>There are two forms of implementation constructors:
  +                             <p>There are two forms of service constructors:
                                         instance creators and
                                        implementation factories.</p>
                                <p>An instance creator is represented by a 
&create-instance; element. It
  @@ -141,8 +141,6 @@
                                        whatever interface is defined by the service 
extension point it will
                                        create an instance for.</p>
                                        
  -                             <p>Interceptor factories can be implemented using 
dynamic proxies (a
  -                                     feature introduced in JDK 1.3), or by dynamic 
bytecode enhancement.</p>
                                        
                                <p>A service extension point may have any number of 
interceptor
                                        contributions. If the order in which 
interceptors are applied is
  @@ -265,6 +263,21 @@
                                knows nor cares about this.</p>
                </section>
                        
  +             <section name="Singleton Service Model">
  +             
  +             <p>
  +             The simplest service model is the singleton service model; in this 
model        
  +             the service is constructed on first reference.  This is appropriate for
  +             services such as service factories and interceptor factories, and for
  +             several of the basic services provided in the
  +             <a href="base-registry/hivemind.html">hivemind module</a>.
  +             </p>    
  +             
  +             
  +                     
  +             </section>
  +                     
  +                     
                <section name="Deferred Service Model">
                        
                <p>
  @@ -277,7 +290,7 @@
                </p>
                
                <p>
  -             To resolve this, HiveMind defers the actual creation of services by 
default This
  +             To resolve this, HiveMind defers the actual creation of services by 
default. This
                is controled by the <code>model</code> attribute of the &service; 
element; the default model
                is <b>deferred</b>.  
                </p>
  @@ -321,7 +334,7 @@
   <p>
   The service implementation is discarded when notified to cleanup; this is 
controlled by the
   <a 
href="base-registry/hivemind.html#service:hivemind.ThreadEventNotifier">hivemind.ThreadEventNotifier</a>
   service.
  -If your application has any threaded service, you are responsible for invoking the 
<code>fireThreadCleanup()</code>
  +If your application has any threaded services, you are responsible for invoking the 
<code>fireThreadCleanup()</code>
   method of the service.
   </p>
   
  @@ -329,7 +342,7 @@
   For example, a servlet application may want to add the following:    
   </p>
   
  -<code>
  +<source>
   public void service(ServletRequest request, ServletResponse response)
   throws ServletException, IOException
   {
  @@ -343,7 +356,13 @@
     } 
   }
        
  -</code>
  +</source>
  +
  +<p>
  +You'll, of course, have to fill in the details, such as the implementation of
  +<code>getThreadEventNotifier()</code>. Presumably, your servlet constructs
  +a HiveMind registry from its <code>init()</code> method.
  +</p>
                
                        
                </section>
  @@ -361,14 +380,12 @@
                                <li>
                                        <strong>What if no module provides a core 
implementation of the
                                                service?</strong>
  -                                     <p>If the service is optional, then 
getService() will return null. For
  -                                             optional services, you are required to 
check for null.</p>
  -                                     <p>For required services, HiveMind checks for 
an implementation constructor
  -                                             when the registry itself is assembled. 
If a required service extension
  -                                             point has no implementation 
constructor, an error is logged (identifying the
  -                                             extension point id). In addition, 
getService() will throw an
  -                                             ApplicationRuntimeException. So, if a 
service is required, you don't
  -                                             have to check for null.</p>
  +
  +                                     <p>HiveMind checks for a service constructor
  +                                             when the registry itself is assembled. 
If a  service extension
  +                                             point has no service constructor, an 
error is logged (identifying the
  +                                             extension point id). In addition, 
<code>getService()</code> will throw an
  +                                             ApplicationRuntimeException.</p>
                                </li>
                                
                                <li>
  
  
  
  1.22      +1 -2      
jakarta-commons-sandbox/hivemind/src/test/hivemind/test/parse/TestDescriptorParser.java
  
  Index: TestDescriptorParser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/hivemind/src/test/hivemind/test/parse/TestDescriptorParser.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- TestDescriptorParser.java 21 Aug 2003 20:07:47 -0000      1.21
  +++ TestDescriptorParser.java 24 Aug 2003 03:28:30 -0000      1.22
  @@ -205,7 +205,6 @@
   
           assertEquals("MyService1", sd.getId());
           assertEquals("package.MyService", sd.getInterfaceClassName());
  -        assertEquals(true, sd.isRequired());
   
           CreateInstanceDescriptor cid = (CreateInstanceDescriptor) 
sd.getInstanceBuilder();
           assertEquals("package.impl.MyServiceImpl", cid.getInstanceClassName());
  
  
  
  1.12      +1 -28     
jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/impl/ServiceExtensionPointImpl.java
  
  Index: ServiceExtensionPointImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/impl/ServiceExtensionPointImpl.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- ServiceExtensionPointImpl.java    23 Aug 2003 22:46:03 -0000      1.11
  +++ ServiceExtensionPointImpl.java    24 Aug 2003 03:28:30 -0000      1.12
  @@ -88,7 +88,6 @@
       private Class _serviceInterface;
       private ServiceImplementationConstructor _serviceConstructor;
       private List _interceptorContributions;
  -    private boolean _required;
       private boolean _building;
       private Schema _parametersSchema;
       private Object _constructedService;
  @@ -97,7 +96,6 @@
       protected void extendDescription(ToStringBuilder builder)
       {
           builder.append("serviceInterfaceName", _serviceInterfaceName);
  -        builder.append("required", _required);
           builder.append("factoryContribution", _serviceConstructor);
           builder.append("interceptorContributions", _interceptorContributions);
           builder.append("parametersSchema", _parametersSchema);
  @@ -163,16 +161,6 @@
           _serviceInterfaceName = string;
       }
   
  -    public boolean isRequired()
  -    {
  -        return _required;
  -    }
  -
  -    public void setRequired(boolean b)
  -    {
  -        _required = b;
  -    }
  -
       public synchronized void 
addInterceptorContribution(ServiceInterceptorContribution contribution)
       {
           if (_interceptorContributions == null)
  @@ -236,21 +224,6 @@
         */
       protected Object constructNewServiceImplementation()
       {
  -        if (_serviceConstructor == null)
  -        {
  -            // If the service is required but there's no factory, then throw
  -            // an exception.  The calling code probably doesn't check for null 
(since
  -            // the service is required), so better an ARE here than an NPE there.
  -
  -            if (_required)
  -                throw new ApplicationRuntimeException(
  -                    HiveMind.format(
  -                        "ServiceExtensionPoint.request-for-missing-service",
  -                        getExtensionPointId()));
  -
  -            return null;
  -        }
  -
           try
           {
               Class serviceType = getServiceInterface();
  
  
  
  1.25      +5 -15     
jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/impl/RegistryBuilder.java
  
  Index: RegistryBuilder.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/impl/RegistryBuilder.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- RegistryBuilder.java      23 Aug 2003 22:46:03 -0000      1.24
  +++ RegistryBuilder.java      24 Aug 2003 03:28:30 -0000      1.25
  @@ -138,12 +138,6 @@
       private Map _servicePoints = new HashMap();
   
       /**
  -     * List of [EMAIL PROTECTED] ServiceExtensionPointImpl} of just the required 
points.
  -     */
  -
  -    private List _requiredServices = new ArrayList();
  -
  -    /**
        * Map of [EMAIL PROTECTED] ExtensionPointImpl} keyed on fully qualified id.
        */
   
  @@ -347,7 +341,6 @@
               point.setExtensionPointId(pointId);
               point.setLocation(sd.getLocation());
               point.setModule(module);
  -            point.setRequired(sd.isRequired());
   
               point.setServiceInterfaceName(sd.getInterfaceClassName());
               point.setParametersSchema(sd.getParametersSchema());
  @@ -359,9 +352,6 @@
   
               _servicePoints.put(pointId, point);
   
  -            if (point.isRequired())
  -                _requiredServices.add(point);
  -
               addInternalServiceContributions(module, pointId, sd);
           }
       }
  @@ -655,14 +645,14 @@
       }
   
       /**
  -     * Checks that each required service has at factory contribution.
  +     * Checks that each service has at service constructor.
        */
       private void checkForMissingServices()
       {
  -        int count = _requiredServices.size();
  -        for (int i = 0; i < count; i++)
  +        Iterator i = _servicePoints.values().iterator();
  +        while (i.hasNext())
           {
  -            ServiceExtensionPointImpl point = (ServiceExtensionPointImpl) 
_requiredServices.get(i);
  +            ServiceExtensionPointImpl point = (ServiceExtensionPointImpl) i.next();
   
               if (point.getServiceConstructor() != null)
                   continue;
  
  
  
  1.17      +1 -8      jakarta-commons-sandbox/hivemind/src/xsl/hivemind.xsl
  
  Index: hivemind.xsl
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/xsl/hivemind.xsl,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- hivemind.xsl      23 Aug 2003 22:46:04 -0000      1.16
  +++ hivemind.xsl      24 Aug 2003 03:28:30 -0000      1.17
  @@ -377,13 +377,6 @@
                                        </td>
                                </tr>
                                <tr>
  -                                     <th>Required</th>
  -                                     <td>
  -                                             <xsl:if 
test="not(@required)">true</xsl:if>
  -                                             <xsl:value-of select="@required"/>
  -                                     </td>
  -                             </tr>
  -                             <tr>
                                        <th>Service Model</th>
                                        <td>
                                                <xsl:if 
test="not(@model)">singleton</xsl:if>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to