On Jan 11, 2012, at 309AM, Greg Trasuk wrote:

> 
> On Wed, 2012-01-11 at 01:01, Peter Firmstone wrote:
>> You could try Dennis Reedy's Groovy Configuration Provider, that'll give 
>> you Pojo's with Java like syntax.  We still need to add an ant task to 
>> generate the groovy javadoc too.
>> 
>> It would be nice to see that system used by default.
>> 
> 
> Just curious...What is the advantage of Groovy's syntax over
> ConfigurationFile?

You get to use *real* code in your configuration. From my experience people are 
usually very confused with configuration file syntax, and why it is java-like 
but you cannot use any logic. Just to show a simple example for reggie (I hope 
you'll be able to get the gist of it), figuring out the correct unicast 
discovery host based on a system property would be as follows (note the 
initialUnicastDiscoveryProperty is declared just as a property as well):

@Component('com.sun.jini.reggie')
class ReggieConfig {
    int initialUnicastDiscoveryPort = 10500

    String[] getInitialMemberGroups() {
        def groups = [System.getProperty(Constants.GROUPS_PROPERTY_NAME,
                                         System.getProperty('user.name'))]
        return groups as String[]
    }

    String getUnicastDiscoveryHost() {
        String host = java.net.InetAddress.getLocalHost().getHostAddress()
        String value = System.getProperty("java.rmi.server.hostname")
        if(value != null) {
            host = java.net.InetAddress.getByName(value).getHostAddress()
        }
        return host
    }

}

Inheritance is supported as well, etc.. etc ...

I also use a DynamicConfiguration (extends AbstractConfiguration) class as 
well. Its use is shown here:

DynamicConfiguration config = new DynamicConfiguration();
config.setEntry("org.rioproject.watch", "collectionSize", collectionSize);
Watch watch = construct2("watch", config);

Lastly, I recall Calum Shaw-Mackay was doing work with the Glyph project that 
was using annotations to wire up configs with annotations.

> 
> Also, I just had an interesting thought: What if a service deployer (as
> in "ServiceStarter is a service deployer") were to scan the service
> class for JSR330 @Inject annotations and plug in values taken from the
> config file?

Sure, that would be nice (just be careful not to fill up the perm-gen space 
when looking for annotations though). I'm wondering though how you would map 
the component and name to the property or method to be set. 

Dennis

Reply via email to