diff options
author | lresende <lresende@13f79535-47bb-0310-9956-ffa450edef68> | 2011-03-29 18:25:37 +0000 |
---|---|---|
committer | lresende <lresende@13f79535-47bb-0310-9956-ffa450edef68> | 2011-03-29 18:25:37 +0000 |
commit | b2c79131670c993537ecb55f7628190c85a959b8 (patch) | |
tree | 99e4baebc518a3e9d6e84665c7a8f446b582ab9d /sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java | |
parent | 56b8d0862d1eb3b241bda34c6969ecb2f80426eb (diff) |
TUSCANY-3496 - Adding extensibility to node api to allow other applications to tap to it and provide services that require introspecting node metadata
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1086667 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to '')
-rw-r--r-- | sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java | 85 |
1 files changed, 51 insertions, 34 deletions
diff --git a/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java b/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java index c32c1e0271..b41237b5ea 100644 --- a/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java +++ b/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java @@ -44,6 +44,9 @@ import org.apache.tuscany.sca.core.invocation.ProxyFactory; import org.apache.tuscany.sca.monitor.Monitor; import org.apache.tuscany.sca.node.Node; import org.apache.tuscany.sca.node.configuration.NodeConfiguration; +import org.apache.tuscany.sca.node.extensibility.NodeActivator; +import org.apache.tuscany.sca.node.extensibility.NodeActivatorExtensionPoint; +import org.apache.tuscany.sca.node.extensibility.NodeExtension; import org.apache.tuscany.sca.runtime.ActivationException; import org.apache.tuscany.sca.runtime.CompositeActivator; import org.apache.tuscany.sca.runtime.DomainRegistryFactory; @@ -58,7 +61,7 @@ import org.oasisopen.sca.ServiceUnavailableException; /** * An SCA Node that is managed by the NodeManager */ -public class NodeImpl implements Node { +public class NodeImpl implements Node, NodeExtension { private static final Logger logger = Logger.getLogger(NodeImpl.class.getName()); private ProxyFactory proxyFactory; private CompositeActivator compositeActivator; @@ -67,6 +70,7 @@ public class NodeImpl implements Node { private NodeConfiguration configuration; private NodeFactoryImpl nodeFactory; private List<Contribution> contributions; + private NodeActivatorExtensionPoint nodeActivators; // private NodeManager mbean; /** @@ -78,8 +82,9 @@ public class NodeImpl implements Node { super(); this.configuration = configuration; this.nodeFactory = nodeFactory; + this.nodeActivators = nodeFactory.getExtensionPointRegistry().getExtensionPoint(NodeActivatorExtensionPoint.class); } - + /** * Create a node from the configuration and loaded contributions * @param manager @@ -90,6 +95,7 @@ public class NodeImpl implements Node { super(); this.configuration = configuration; this.nodeFactory = manager; + this.nodeActivators = nodeFactory.getExtensionPointRegistry().getExtensionPoint(NodeActivatorExtensionPoint.class); this.contributions = new ArrayList<Contribution>(contributions); } @@ -97,54 +103,58 @@ public class NodeImpl implements Node { return getConfiguration().getURI(); } + public String getDomainURI() { + return getConfiguration().getDomainURI(); + } + public Node start() { logger.log(nodeFactory.quietLogging? Level.FINE : Level.INFO, "Starting node: " + configuration.getURI() + " domain: " + configuration.getDomainURI()); nodeFactory.init(); nodeFactory.addNode(configuration, this); this.proxyFactory = nodeFactory.proxyFactory; - + try { Monitor monitor = nodeFactory.monitorFactory.createMonitor(); ProcessorContext context = new ProcessorContext(monitor); - + // Set up the thead context monitor Monitor tcm = nodeFactory.monitorFactory.setContextMonitor(monitor); try { // Use the lack of the contributions collection as an indicator for when the node - // is being started for the first time. If it is the first time do all the work + // is being started for the first time. If it is the first time do all the work // to read the contributions and create the domain composite if (contributions == null) { contributions = nodeFactory.loadContributions(configuration, context); } - - if (domainComposite == null) { - + + if (domainComposite == null) { + UtilityExtensionPoint utilities = nodeFactory.registry.getExtensionPoint(UtilityExtensionPoint.class); this.compositeActivator = utilities.getUtility(CompositeActivator.class); domainComposite = nodeFactory.configureNode(configuration, contributions, context); - + DomainRegistryFactory domainRegistryFactory = ExtensibleDomainRegistryFactory.getInstance(nodeFactory.registry); EndpointRegistry endpointRegistry = domainRegistryFactory.getEndpointRegistry(configuration.getDomainRegistryURI(), configuration.getDomainURI()); this.compositeContext = - new CompositeContext(nodeFactory.registry, - endpointRegistry, - domainComposite, - configuration.getDomainURI(), + new CompositeContext(nodeFactory.registry, + endpointRegistry, + domainComposite, + configuration.getDomainURI(), configuration.getURI(), nodeFactory.getDeployer().getSystemDefinitions()); // Pass down the context attributes compositeContext.getAttributes().putAll(configuration.getAttributes()); } - + } finally { // Reset the thread context monitor nodeFactory.monitorFactory.setContextMonitor(tcm); } - + // Activate the composite compositeActivator.activate(compositeContext, domainComposite); @@ -172,6 +182,9 @@ public class NodeImpl implements Node { logger.log(Level.SEVERE, e.getMessage(), e); } + for(NodeActivator activator : nodeActivators.getNodeActivators()) { + activator.nodeStarted(this); + } return this; } catch (Throwable e) { @@ -212,13 +225,17 @@ public class NodeImpl implements Node { } // end if nodeFactory.removeNode(configuration); -/* +/* this.compositeActivator = null; this.proxyFactory = null; this.domainComposite = null; this.compositeContext = null; -*/ - +*/ + + for(NodeActivator activator : nodeActivators.getNodeActivators()) { + activator.nodeStopped(this); + } + ThreadMessageContext.removeMessageContext(); } catch (ActivationException e) { @@ -269,7 +286,7 @@ public class NodeImpl implements Node { if (component == null) { throw new ServiceUnavailableException("The service " + name + " has not been contributed to the domain"); } - + return ((RuntimeComponent)component).getServiceReference(businessInterface, serviceName); } @@ -303,47 +320,47 @@ public class NodeImpl implements Node { } return endpoints; } - + public Composite getDomainComposite() { return domainComposite; - } - + } + public String dumpDomainComposite() { - - StAXArtifactProcessorExtensionPoint xmlProcessors = + + StAXArtifactProcessorExtensionPoint xmlProcessors = getExtensionPointRegistry().getExtensionPoint(StAXArtifactProcessorExtensionPoint.class); - StAXArtifactProcessor<Composite> compositeProcessor = - xmlProcessors.getProcessor(Composite.class); - + StAXArtifactProcessor<Composite> compositeProcessor = + xmlProcessors.getProcessor(Composite.class); + return writeComposite(getDomainComposite(), compositeProcessor); } - + private String writeComposite(Composite composite, StAXArtifactProcessor<Composite> compositeProcessor){ ByteArrayOutputStream bos = new ByteArrayOutputStream(); XMLOutputFactory outputFactory = nodeFactory.getExtensionPointRegistry().getExtensionPoint(FactoryExtensionPoint.class) .getFactory(XMLOutputFactory.class); - + try { compositeProcessor.write(composite, outputFactory.createXMLStreamWriter(bos), new ProcessorContext(nodeFactory.registry)); } catch(Exception ex) { return ex.toString(); } - + String result = bos.toString(); - + // write out and nested composites for (Component component : composite.getComponents()) { if (component.getImplementation() instanceof Composite) { - result += "\n<!-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -->\n" + + result += "\n<!-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -->\n" + writeComposite((Composite)component.getImplementation(), compositeProcessor); } } - + return result; } - + public List<Contribution> getContributions() { return contributions; } |