You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by Raymond Feng <en...@gmail.com> on 2010/02/16 00:19:34 UTC

Configuring the Tuscany NodeFactory

Hi,

The NodeFactory SPI is the entry point to Tuscany's runtime.  It's backed by 
an ExtensionPointRegistry which manages extension points, which in turn 
collect extensions.

I added the support to configure a NodeFactory with a map of attributes by 
the service types. The following test case demonstrates such usage:

        Map<String, Map<String, String>> attrs = new HashMap<String, 
Map<String, String>>();
        Map<String, String> map = new HashMap<String, String>();
        map.put("enabled", "false");
        attrs.put(ValidationSchemaExtensionPoint.class.getName(), map);

        Map<String, String> map2 = new HashMap<String, String>();
        map2.put("urn:MyDomain", "multicast://200.0.0.100:50000/MyDomain");
        attrs.put(DomainRegistryFactoryExtensionPoint.class.getName(), 
map2);

        NodeFactoryImpl factory = 
(NodeFactoryImpl)NodeFactory.newInstance(attrs);
        Assert.assertFalse(factory.getExtensionPoints().getExtensionPoint(ValidationSchemaExtensionPoint.class)
            .isEnabled());

        DomainRegistryFactoryExtensionPoint 
domainRegistryFactoryExtensionPoint =
            factory.getExtensionPoints().getExtensionPoint(DomainRegistryFactoryExtensionPoint.class);
        Map<String, String> mapping = 
domainRegistryFactoryExtensionPoint.getDomainRegistryMapping();
        Assert.assertEquals(1, mapping.size());
        Assert.assertEquals("multicast://200.0.0.100:50000/MyDomain", 
mapping.get("urn:MyDomain"));

The map of attributes for a given extension point/extension override the 
settings in META-INF/services/<SPI> file. To enable an extension 
point/extension implementation class with such configurations, we can simply 
change the constructor to take the Map<String, String>, for example:

    public DefaultValidationSchemaExtensionPoint(ExtensionPointRegistry 
registry, Map<String, String> attributes) {
        super();
        this.registry = registry;
        if (attributes != null) {
            String attr = attributes.get("enabled");
            if (attr != null) {
                enabled = Boolean.parseBoolean(attr);
            }
        }
    }

Comments?

Thanks,
Raymond
---
Raymond Feng
Apache Tuscany PMC Member: http://tuscany.apache.org
Co-author of Tuscany In Action (A book on Tuscany SCA): 
http://tuscanyinaction.com/
www.enjoyjava.com
http://twitter.com/raymondfeng