You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hivemind.apache.org by ah...@apache.org on 2007/03/01 21:06:04 UTC

svn commit: r513472 - in /hivemind/hivemind2/trunk: annotations/src/java/org/apache/hivemind/annotations/internal/ examples/src/java/org/apache/examples/definition/ framework/src/java/org/apache/hivemind/definition/ framework/src/java/org/apache/hivemi...

Author: ahuegen
Date: Thu Mar  1 12:06:02 2007
New Revision: 513472

URL: http://svn.apache.org/viewvc?view=rev&rev=513472
Log:
Laziness of configurations can be configured in definition API

Modified:
    hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/internal/AnnotatedModuleProcessor.java
    hivemind/hivemind2/trunk/examples/src/java/org/apache/examples/definition/JavaDefinitionExample.java
    hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationPointDefinition.java
    hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/impl/ConfigurationPointDefinitionImpl.java
    hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/impl/ModuleDefinitionHelper.java
    hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/impl/ConfigurationPointImpl.java
    hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/impl/CoreServicesProvider.java
    hivemind/hivemind2/trunk/framework/src/test/hivemind/test/FrameworkTestCase.java
    hivemind/hivemind2/trunk/xml/src/descriptor/META-INF/hivemodule.xml
    hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/impl/XmlCoreServicesProvider.java
    hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/impl/XmlModuleDescriptorProcessor.java
    hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/parse/ConfigurationPointDescriptor.java
    hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/parse/DescriptorParser.java
    hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/parse/DescriptorParser.properties
    hivemind/hivemind2/trunk/xml/src/test/hivemind/test/config/BadAttributes.xml
    hivemind/hivemind2/trunk/xml/src/test/hivemind/test/config/Simple.xml

Modified: hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/internal/AnnotatedModuleProcessor.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/internal/AnnotatedModuleProcessor.java?view=diff&rev=513472&r1=513471&r2=513472
==============================================================================
--- hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/internal/AnnotatedModuleProcessor.java (original)
+++ hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/internal/AnnotatedModuleProcessor.java Thu Mar  1 12:06:02 2007
@@ -272,7 +272,8 @@
             visibility = Visibility.PRIVATE;
         }
         ConfigurationPointDefinitionImpl cpd = new ConfigurationPointDefinitionImpl(module, configuration.id(), 
-                location, visibility, method.getReturnType().getName(), Occurances.UNBOUNDED);
+                location, visibility, method.getReturnType().getName(), Occurances.UNBOUNDED,
+                false);
         module.addConfigurationPoint(cpd);
         
         // Add method implementation as initial contribution

Modified: hivemind/hivemind2/trunk/examples/src/java/org/apache/examples/definition/JavaDefinitionExample.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/examples/src/java/org/apache/examples/definition/JavaDefinitionExample.java?view=diff&rev=513472&r1=513471&r2=513472
==============================================================================
--- hivemind/hivemind2/trunk/examples/src/java/org/apache/examples/definition/JavaDefinitionExample.java (original)
+++ hivemind/hivemind2/trunk/examples/src/java/org/apache/examples/definition/JavaDefinitionExample.java Thu Mar  1 12:06:02 2007
@@ -23,6 +23,10 @@
 import org.apache.hivemind.impl.RegistryBuilder;
 import org.apache.hivemind.internal.AbstractServiceImplementationConstructor;
 import org.apache.hivemind.internal.ServiceModel;
+import org.apache.hivemind.service.Autowiring;
+import org.apache.hivemind.service.ClassFactory;
+import org.apache.hivemind.service.ThreadEventNotifier;
+import org.apache.hivemind.service.ThreadLocalStorage;
 import org.apache.hivemind.util.ClasspathResource;
 
 /**
@@ -40,6 +44,11 @@
         Calculator calculator = (Calculator) registry.getService(Calculator.class);
         double result = calculator.add(10, 20);
         System.out.println("Result: " + result);
+        
+        registry.getService("hivemind.ClassFactory", ClassFactory.class);
+        registry.getService("hivemind.ThreadEventNotifier", ThreadEventNotifier.class);
+        registry.getService("hivemind.ThreadLocalStorage", ThreadLocalStorage.class);
+        registry.getService("hivemind.Autowiring", Autowiring.class);
     }
     
     private Registry constructRegistry()
@@ -49,6 +58,7 @@
         registryDefinition.addModule(module);
         
         RegistryBuilder builder = new RegistryBuilder(registryDefinition);
+        builder.autoDetectModules();
         Registry registry = builder.constructRegistry();
         return registry;
     }

Modified: hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationPointDefinition.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationPointDefinition.java?view=diff&rev=513472&r1=513471&r2=513472
==============================================================================
--- hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationPointDefinition.java (original)
+++ hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationPointDefinition.java Thu Mar  1 12:06:02 2007
@@ -68,4 +68,9 @@
      * @return  returns all parsers as instances of {@link ConfigurationParserDefinition}
      */
     public Collection getParsers();
+    
+    /**
+     * @return  returns true if the configuration should be created on first call to one of its methods.
+     */
+    public boolean isLazy();
 }

Modified: hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/impl/ConfigurationPointDefinitionImpl.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/impl/ConfigurationPointDefinitionImpl.java?view=diff&rev=513472&r1=513471&r2=513472
==============================================================================
--- hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/impl/ConfigurationPointDefinitionImpl.java (original)
+++ hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/impl/ConfigurationPointDefinitionImpl.java Thu Mar  1 12:06:02 2007
@@ -45,6 +45,8 @@
     private Collection _contributions = new ArrayList();
     
     private Map _parsers = new HashMap();
+    
+    private boolean _lazy;
 
     public ConfigurationPointDefinitionImpl(ModuleDefinition module)
     {
@@ -52,11 +54,12 @@
     }
 
     public ConfigurationPointDefinitionImpl(ModuleDefinition module, String id, Location location, Visibility visibility,
-            String containerClassName, Occurances expectedContributions)
+            String containerClassName, Occurances expectedContributions, boolean lazy)
     {
         super(module, id, location, visibility);
         _containerClassName = containerClassName;
         _expectedContributions = expectedContributions;
+        _lazy = lazy;
     }
 
     /**
@@ -151,6 +154,24 @@
     public ConfigurationParserDefinition getParser(String inputFormat)
     {
         return (ConfigurationParserDefinition) _parsers.get(inputFormat);
+    }
+
+    /**
+     * @see org.apache.hivemind.definition.ConfigurationPointDefinition#isLazy()
+     */
+    public boolean isLazy()
+    {
+        return _lazy;
+    }
+
+    /**
+     * Sets the lazy mode of the configuration. Lazy construction is supported only if
+     * the configuration type is an interface.
+     * @param lazy  true if if the configuration should be created on first call to one of its methods.
+     */
+    protected void setLazy(boolean lazy)
+    {
+        _lazy = lazy;
     }
 
 

Modified: hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/impl/ModuleDefinitionHelper.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/impl/ModuleDefinitionHelper.java?view=diff&rev=513472&r1=513471&r2=513472
==============================================================================
--- hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/impl/ModuleDefinitionHelper.java (original)
+++ hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/impl/ModuleDefinitionHelper.java Thu Mar  1 12:06:02 2007
@@ -81,10 +81,10 @@
                 serviceModel);
     }
     
-    public ConfigurationPointDefinition addConfigurationPoint(String configurationPointId, String containerType)
+    public ConfigurationPointDefinition addConfigurationPoint(String configurationPointId, String containerType, boolean lazy)
     {
         ConfigurationPointDefinitionImpl result = new ConfigurationPointDefinitionImpl(_module, configurationPointId, _module
-                .getLocation(), Visibility.PUBLIC, containerType, Occurances.UNBOUNDED);
+                .getLocation(), Visibility.PUBLIC, containerType, Occurances.UNBOUNDED, lazy);
 
         _module.addConfigurationPoint(result);
         return result;

Modified: hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/impl/ConfigurationPointImpl.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/impl/ConfigurationPointImpl.java?view=diff&rev=513472&r1=513471&r2=513472
==============================================================================
--- hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/impl/ConfigurationPointImpl.java (original)
+++ hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/impl/ConfigurationPointImpl.java Thu Mar  1 12:06:02 2007
@@ -113,12 +113,13 @@
      */
     public boolean isLazy()
     {
-        // TODO annotations: make configurable
         // exclude ServiceModels, otherwise a cycle occurs because the proxy generation
         // requires the {@link ClassFactory service}
+        // non interface types are not supported because this gets just too expensive
+        // in terms of cpu and memory: 3 proxy classes would be needed
         return !getExtensionPointId().equals("hivemind.ServiceModels") && 
           getConfigurationType().isInterface() &&
-          !Modifier.isFinal(getConfigurationType().getModifiers());
+          getConfigurationPointDefinition().isLazy();
     }
 
     /**

Modified: hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/impl/CoreServicesProvider.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/impl/CoreServicesProvider.java?view=diff&rev=513472&r1=513471&r2=513472
==============================================================================
--- hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/impl/CoreServicesProvider.java (original)
+++ hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/impl/CoreServicesProvider.java Thu Mar  1 12:06:02 2007
@@ -204,7 +204,7 @@
         // Configuration to which services may be contributed. The corresponding services are instantiated eagerly, as the Registry is started. 
         // The order in which services are instantiated is not specified.
 
-        helper.addConfigurationPoint("EagerLoad", List.class.getName());
+        helper.addConfigurationPoint("EagerLoad", List.class.getName(), false);
     }
 
     /**
@@ -231,7 +231,7 @@
         // A configuration to which startup objects may be contributed (as objects or services). 
         // Startup objects must implement the java.lang.Runnable interface. Order of execution is expliclitly NOT defined.
 
-        ConfigurationPointDefinition cpd = helper.addConfigurationPoint("Startup", List.class.getName());
+        ConfigurationPointDefinition cpd = helper.addConfigurationPoint("Startup", List.class.getName(), false);
         
         final List services = getDefaultStartupServices();
         helper.addContributionDefinition(cpd, new Contribution() {
@@ -255,7 +255,7 @@
     {
 
         ConfigurationPointDefinition cpd = helper.addConfigurationPoint("ServiceModels", 
-                Map.class.getName());
+                Map.class.getName(), false);
         
         final List serviceModels = getDefaultServiceModels();
         helper.addContributionDefinition(cpd, new Contribution() {
@@ -344,7 +344,7 @@
     private void addAutowiringStrategiesConfiguration()
     {
 
-        ConfigurationPointDefinition cpd = helper.addConfigurationPoint("AutowiringStrategies", List.class.getName());
+        ConfigurationPointDefinition cpd = helper.addConfigurationPoint("AutowiringStrategies", List.class.getName(), false);
         
         final List serviceModels = getDefaultAutowiringStrategies();
         helper.addContributionDefinition(cpd, new Contribution() {

Modified: hivemind/hivemind2/trunk/framework/src/test/hivemind/test/FrameworkTestCase.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/framework/src/test/hivemind/test/FrameworkTestCase.java?view=diff&rev=513472&r1=513471&r2=513472
==============================================================================
--- hivemind/hivemind2/trunk/framework/src/test/hivemind/test/FrameworkTestCase.java (original)
+++ hivemind/hivemind2/trunk/framework/src/test/hivemind/test/FrameworkTestCase.java Thu Mar  1 12:06:02 2007
@@ -101,7 +101,7 @@
     {
         ConfigurationPointDefinitionImpl result = new ConfigurationPointDefinitionImpl(module, pointId,
                 newLocation(), Visibility.PUBLIC, ArrayList.class.getName(),
-                Occurances.UNBOUNDED);
+                Occurances.UNBOUNDED, false);
 
         return result;
     }

Modified: hivemind/hivemind2/trunk/xml/src/descriptor/META-INF/hivemodule.xml
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/xml/src/descriptor/META-INF/hivemodule.xml?view=diff&rev=513472&r1=513471&r2=513472
==============================================================================
--- hivemind/hivemind2/trunk/xml/src/descriptor/META-INF/hivemodule.xml (original)
+++ hivemind/hivemind2/trunk/xml/src/descriptor/META-INF/hivemodule.xml Thu Mar  1 12:06:02 2007
@@ -443,7 +443,7 @@
       </element>
   </schema>
   
-  <configuration-point id="Translators">
+  <configuration-point id="Translators" lazy="true">
     
     Used to define new translators that can be used in contribution conversion rules. 
     Translators must have unique names.

Modified: hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/impl/XmlCoreServicesProvider.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/impl/XmlCoreServicesProvider.java?view=diff&rev=513472&r1=513471&r2=513472
==============================================================================
--- hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/impl/XmlCoreServicesProvider.java (original)
+++ hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/impl/XmlCoreServicesProvider.java Thu Mar  1 12:06:02 2007
@@ -105,8 +105,8 @@
      */
     private void addSymbolSourcesConfiguration(ModuleDefinition md)
     {
-        ConfigurationPointDefinition cpd = helper.addConfigurationPoint("SymbolSources", List.class.getName());
-
+        ConfigurationPointDefinition cpd = helper.addConfigurationPoint("SymbolSources", List.class.getName(), true);
+        
         helper.addContributionDefinition(cpd, new Contribution()
         {
 
@@ -156,7 +156,7 @@
         
         // Configuration point for setting defaults for symbol values.
 
-        helper.addConfigurationPoint(configurationId, Map.class.getName());
+        helper.addConfigurationPoint(configurationId, Map.class.getName(), false);
     }  
     
     /**

Modified: hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/impl/XmlModuleDescriptorProcessor.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/impl/XmlModuleDescriptorProcessor.java?view=diff&rev=513472&r1=513471&r2=513472
==============================================================================
--- hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/impl/XmlModuleDescriptorProcessor.java (original)
+++ hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/impl/XmlModuleDescriptorProcessor.java Thu Mar  1 12:06:02 2007
@@ -288,7 +288,7 @@
 
             ConfigurationPointDefinitionImpl configurationPoint = new ConfigurationPointDefinitionImpl(
                     module, cpd.getId(), cpd.getLocation(), cpd.getVisibility(), 
-                    cpd.getType(), cpd.getCount());
+                    cpd.getType(), cpd.getCount(), cpd.isLazy());
             module.addConfigurationPoint(configurationPoint);
             
             // If schema is embedded we can add a parser now, otherwise it must

Modified: hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/parse/ConfigurationPointDescriptor.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/parse/ConfigurationPointDescriptor.java?view=diff&rev=513472&r1=513471&r2=513472
==============================================================================
--- hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/parse/ConfigurationPointDescriptor.java (original)
+++ hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/parse/ConfigurationPointDescriptor.java Thu Mar  1 12:06:02 2007
@@ -38,6 +38,9 @@
 
     /** @since 1.1 */
     private Visibility _visibility = Visibility.PUBLIC;
+    
+    /** @since 2.0 */
+    private boolean _lazy;
 
     /**
      * Type of the configuration
@@ -53,6 +56,7 @@
         builder.append("contributionsSchema", _contributionsSchema);
         builder.append("contributionsSchemaId", _contributionsSchemaId);
         builder.append("visibility", _visibility);
+        builder.append("lazy", _lazy);
 
         return builder.toString();
     }
@@ -123,5 +127,18 @@
     public void setType(String type)
     {
         _type = type;
+    }
+
+    public void setLazy(Boolean lazy)
+    {
+        _lazy = lazy;
+    }
+
+    /**
+     * @since 2.0
+     */
+    public boolean isLazy()
+    {
+        return _lazy;
     }
 }

Modified: hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/parse/DescriptorParser.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/parse/DescriptorParser.java?view=diff&rev=513472&r1=513471&r2=513472
==============================================================================
--- hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/parse/DescriptorParser.java (original)
+++ hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/parse/DescriptorParser.java Thu Mar  1 12:06:02 2007
@@ -783,10 +783,13 @@
         // Qualify the interface name with the defined package name (which will
         // often implicitly or explicitly match the module id).
 
-        String fullContainerTypeName = IdUtils.qualify(
+        String fullTypeName = IdUtils.qualify(
                 _moduleDescriptor.getPackageName(),
                 typeName);
-        cpd.setType(fullContainerTypeName);
+        cpd.setType(fullTypeName);
+        
+        Boolean lazy = getBooleanAttribute("lazy", false);
+        cpd.setLazy(lazy);
 
         md.addConfigurationPoint(cpd);
     }

Modified: hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/parse/DescriptorParser.properties
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/parse/DescriptorParser.properties?view=diff&rev=513472&r1=513471&r2=513472
==============================================================================
--- hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/parse/DescriptorParser.properties (original)
+++ hivemind/hivemind2/trunk/xml/src/java/org/apache/hivemind/parse/DescriptorParser.properties Thu Mar  1 12:06:02 2007
@@ -24,6 +24,7 @@
 required.configuration-point.schema-id=false
 required.configuration-point.visibility=false
 required.configuration-point.type=false
+required.configuration-point.lazy=false
 
 required.service-point.id=true
 required.service-point.interface=false

Modified: hivemind/hivemind2/trunk/xml/src/test/hivemind/test/config/BadAttributes.xml
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/xml/src/test/hivemind/test/config/BadAttributes.xml?view=diff&rev=513472&r1=513471&r2=513472
==============================================================================
--- hivemind/hivemind2/trunk/xml/src/test/hivemind/test/config/BadAttributes.xml (original)
+++ hivemind/hivemind2/trunk/xml/src/test/hivemind/test/config/BadAttributes.xml Thu Mar  1 12:06:02 2007
@@ -16,7 +16,7 @@
 -->
 
 <module id="hivemind.test.config" version="1.0.0">
-	<configuration-point id="BadAttributes" schema-id="Datum"/>
+	<configuration-point id="BadAttributes" schema-id="Datum" lazy="true"/>
 	<schema id="Datum">
 		<element name="datum">
 			<attribute name="key" required="true"/>

Modified: hivemind/hivemind2/trunk/xml/src/test/hivemind/test/config/Simple.xml
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/xml/src/test/hivemind/test/config/Simple.xml?view=diff&rev=513472&r1=513471&r2=513472
==============================================================================
--- hivemind/hivemind2/trunk/xml/src/test/hivemind/test/config/Simple.xml (original)
+++ hivemind/hivemind2/trunk/xml/src/test/hivemind/test/config/Simple.xml Thu Mar  1 12:06:02 2007
@@ -16,7 +16,7 @@
 -->
 
 <module id="hivemind.test.config" version="1.0.0">
-	<configuration-point id="Simple" schema-id="Datum"/>
+	<configuration-point id="Simple" schema-id="Datum" lazy="true"/>
 
 		<schema id="Datum">
 			<element name="datum">