From 3635a0ee6f59980439ec043f2251d950e4ffb8a4 Mon Sep 17 00:00:00 2001 From: rfeng Date: Wed, 27 May 2009 01:23:40 +0000 Subject: Add optional life cycle control for extension points (for example, RMI extension point needs to unexport the registry) git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@778955 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java | 13 ++++++++++++- .../java/org/apache/tuscany/sca/node/impl/NodeImpl.java | 3 --- 2 files changed, 12 insertions(+), 4 deletions(-) (limited to 'java/sca/modules/node-impl/src/main') diff --git a/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java b/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java index 6bca9fc9e7..dfdbc54f13 100644 --- a/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java +++ b/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java @@ -129,13 +129,23 @@ public class NodeFactoryImpl extends NodeFactory { private WorkScheduler workScheduler; private StAXArtifactProcessorExtensionPoint xmlProcessors; + /** + * Automatically destroy the factory when last node is stopped. Subclasses + * can set this flag. + */ + protected boolean autoDestroy = true; + @Override public Node createNode(NodeConfiguration configuration) { return new NodeImpl(this, configuration); } protected Node removeNode(NodeConfiguration configuration) { - return nodes.remove(getNodeKey(configuration)); + Node node = nodes.remove(getNodeKey(configuration)); + if (autoDestroy && nodes.isEmpty()) { + destroy(); + } + return node; } protected void addNode(NodeConfiguration configuration, Node node) { @@ -195,6 +205,7 @@ public class NodeFactoryImpl extends NodeFactory { // Stop and destroy the work manager workScheduler.destroy(); + extensionPoints.destroy(); inited = false; } } diff --git a/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java b/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java index ac53f805df..febf4033e8 100644 --- a/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java +++ b/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java @@ -114,9 +114,6 @@ public class NodeImpl implements Node, Client { manager.removeNode(configuration); this.compositeActivator = null; this.proxyFactory = null; - if (manager.getNodes().isEmpty()) { - manager.destroy(); - } } catch (ActivationException e) { throw new IllegalStateException(e); -- cgit v1.2.3