Modified: incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCANodeImpl.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCANodeImpl.java?rev=597163&r1=597162&r2=597163&view=diff ============================================================================== --- incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCANodeImpl.java (original) +++ incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCANodeImpl.java Wed Nov 21 09:54:04 2007 @@ -189,6 +189,8 @@ // make the node available to the model // this causes the runtime to start registering binding-sca service endpoints // with the domain proxy + // TBD - This code is due to be pulled out and combined with the register and + // resolution code that appears in this class ModelFactoryExtensionPoint factories = nodeRuntime.getExtensionPointRegistry().getExtensionPoint(ModelFactoryExtensionPoint.class); nodeFactory = new NodeFactoryImpl(this); factories.addFactory(nodeFactory); @@ -317,95 +319,76 @@ } public void addContribution(String contributionURI, URL contributionURL, ClassLoader contributionClassLoader ) throws NodeException { - try { - if (contributionURL != null) { - ModelResolver modelResolver = null; - - // if the contribution is to be resolved using a separate class loader - // then create a new model resolver - if (contributionClassLoader != null) { - modelResolver = new ModelResolverImpl(contributionClassLoader); - } - - // Add the contribution to the node - ContributionService contributionService = nodeRuntime.getContributionService(); - Contribution contribution = contributionService.contribute(contributionURI, - contributionURL, - modelResolver, - false); + + if (nodeStarted){ + throw new NodeException("Can't add contribution " + contributionURI + " when the node is running. Call stop() on the node first"); + } + + if (contributionURI == null){ + throw new NodeException("Contribution URI cannot be null"); + } + + if (contributionURL == null){ + throw new NodeException("Contribution URL cannot be null"); + } + + if (contributions.containsKey(contributionURI)) { + throw new NodeException("Contribution " + contributionURI + " has already been added"); + } + + try { + ModelResolver modelResolver = null; + + // if the contribution is to be resolved using a separate class loader + // then create a new model resolver + if (contributionClassLoader != null) { + modelResolver = new ModelResolverImpl(contributionClassLoader); + } + + // Add the contribution to the node + ContributionService contributionService = nodeRuntime.getContributionService(); + Contribution contribution = contributionService.contribute(contributionURI, + contributionURL, + modelResolver, + false); + + // remember the contribution + contributions.put(contributionURI, contribution); - // remember the contribution - contributions.put(contributionURI, contribution); - - // remember all the composites that have been found - for (DeployedArtifact artifact : contribution.getArtifacts()) { - if (artifact.getModel() instanceof Composite) { - Composite composite = (Composite)artifact.getModel(); - composites.put(composite.getName(), composite); - compositeFiles.put(composite.getURI(), composite); - } + // remember all the composites that have been found + for (DeployedArtifact artifact : contribution.getArtifacts()) { + if (artifact.getModel() instanceof Composite) { + Composite composite = (Composite)artifact.getModel(); + composites.put(composite.getName(), composite); + compositeFiles.put(composite.getURI(), composite); } - - // place all the deployable composites into the node level composite - for (Composite composite : contribution.getDeployables()) { - nodeComposite.getIncludes().add(composite); - } - - // add the contribution to the domain. It will generally already be there - // unless the contribution has been added to the node itself. - ((SCADomainProxyImpl)scaDomain).registerContribution(nodeURI, contributionURI, contributionURL.toExternalForm()); - - } else { - throw new NodeException("Contribution " + contributionURL + " not found"); - } + } + // add the contribution to the domain. It will generally already be there + // unless the contribution has been added to the node itself. + ((SCADomainProxyImpl)scaDomain).registerContribution(nodeURI, contributionURI, contributionURL.toExternalForm()); + } catch (Exception ex) { throw new NodeException(ex); } } - public void startContribution(String contributionURI) throws NodeException { - try { - - Contribution contribution = contributions.get(contributionURI); - - if (contribution != null){ - for (Composite composite : contribution.getDeployables()) { - startComposite(composite); - } - } else { - throw new NodeException("Contribution " + contributionURI + " not added"); - } - - } catch (ActivationException e) { - throw new NodeException(e); - } catch (CompositeBuilderException e) { - throw new NodeException(e); - } - } - - public void stopContribution(String contributionURI) throws NodeException { - try { - - Contribution contribution = contributions.get(contributionURI); - - if (contribution != null){ - for (Composite composite : contribution.getDeployables()) { - stopComposite(composite); - } - } else { - throw new NodeException("Contribution " + contributionURI + " not added"); - } - - } catch (ActivationException e) { - throw new NodeException(e); - } - } - public void removeContribution(String contributionURI) throws NodeException { + + if (nodeStarted){ + throw new NodeException("Can't remove contribution " + contributionURI + " when the node is running. Call stop() on the node first"); + } + + if (contributionURI == null){ + throw new NodeException("Contribution URI cannot be null"); + } + + if (!contributions.containsKey(contributionURI)) { + throw new NodeException("Contribution " + contributionURI + " has not been added"); + } + try { - stopContribution(contributionURI); - + Contribution contribution = contributions.get(contributionURI); // remove the local record of composites associated with this contribution @@ -420,14 +403,18 @@ // remove the contribution from the contribution service nodeRuntime.getContributionService().remove(contributionURI); - // remove all the deployable composites from the node level composite + // remove any deployed composites from the node level composite for (Composite composite : contribution.getDeployables()) { nodeComposite.getIncludes().remove(composite); } // remove the local record of the contribution contributions.remove(contributionURI); - + + // remove the contribution from the domain. It will generally already be remove + // unless the contribution has been remove from the node itself. + //((SCADomainProxyImpl)scaDomain).unregisterContribution(nodeURI, contributionURI); + } catch (ContributionException ex) { throw new NodeException(ex); } @@ -452,37 +439,77 @@ } } + private boolean isDeployable(Composite composite){ + boolean deployable = false; + + for (Contribution contribution : contributions.values()){ + if (contribution.getDeployables().contains(composite)) { + deployable = true; + break; + } + } + + return deployable; + } + public void addToDomainLevelComposite(QName compositeName) throws NodeException { - try { - // if the named composite is not already in the list then add it + + if (nodeStarted){ + throw new NodeException("Can't add composite " + compositeName.toString() + " when the node is running. Call stop() on the node first"); + } + + // if no composite name is specified add all deployable composites + // to the domain + if (compositeName == null){ + for (Contribution contribution : contributions.values()){ + for (Composite composite : contribution.getDeployables()) { + if (!nodeComposite.getIncludes().contains(composite)) { + nodeComposite.getIncludes().add(composite); + } + } + } + } else { Composite composite = composites.get(compositeName); + if (composite == null) { - throw new NodeException("Composite not found: " + compositeName); + throw new NodeException("Composite " + compositeName.toString() + " not found" ); } - - // include in top level domain - nodeComposite.getIncludes().add(composite); - - } catch (Exception ex) { - throw new NodeException(ex); - } + if ( !isDeployable(composite)){ + throw new NodeException("Composite " + compositeName.toString() + " is not deployable"); + } + + // if the named composite is not already in the list then deploy it + if (!nodeComposite.getIncludes().contains(composite)) { + nodeComposite.getIncludes().add(composite); + } + } } public void addToDomainLevelComposite(String compositePath) throws NodeException { - try { - // if the composite is not already in the list then add it - Composite composite = compositeFiles.get(compositePath); - if (composite == null) { - throw new NodeException("Composite file not found: " + compositePath); - } - - // include in top level domain - nodeComposite.getIncludes().add(composite); - - } catch (Exception ex) { - throw new NodeException(ex); - } + + if (nodeStarted){ + throw new NodeException("Can't add composite " + compositePath + " when the node is running. Call stop() on the node first"); + } + + if (compositePath == null){ + throw new NodeException("Composite path cannot be null"); + } + + Composite composite = compositeFiles.get(compositePath); + + if (composite == null) { + throw new NodeException("Composite file " + compositePath + " not found"); + } + + if ( !isDeployable(composite)){ + throw new NodeException("Composite " + compositePath + " is not deployable"); + } + + // if the named composite is not already in the list then deploy it + if (!nodeComposite.getIncludes().contains(composite)) { + nodeComposite.getIncludes().add(composite); + } } /**
Modified: incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainDrivenTestCase.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainDrivenTestCase.java?rev=597163&r1=597162&r2=597163&view=diff ============================================================================== --- incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainDrivenTestCase.java (original) +++ incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainDrivenTestCase.java Wed Nov 21 09:54:04 2007 @@ -73,21 +73,17 @@ domain.addContribution("nodeB", cl.getResource("nodeB/")); domain.addContribution("nodeC", cl.getResource("nodeC/")); + domain.addToDomainLevelComposite(new QName("http://sample", "CalculatorA")); + domain.addToDomainLevelComposite(new QName("http://sample", "CalculatorB")); domain.addToDomainLevelComposite(new QName("http://sample", "CalculatorC")); + domain.startComposite(new QName("http://sample", "CalculatorA")); + domain.startComposite(new QName("http://sample", "CalculatorB")); domain.startComposite(new QName("http://sample", "CalculatorC")); calculatorServiceA = domain.getService(CalculatorService.class, "CalculatorServiceComponentA"); calculatorServiceB = domain.getService(CalculatorService.class, "CalculatorServiceComponentB"); -/* - // get a reference to various services in the domain - calculatorServiceA = nodeA.getDomain().getService(CalculatorService.class, "CalculatorServiceComponentA"); - calculatorServiceB = nodeB.getDomain().getService(CalculatorService.class, "CalculatorServiceComponentB"); - - //addServiceB = domain.getService(AddService.class, "AddServiceComponentB"); - addServiceB = nodeA.getDomain().getService(AddService.class, "AddServiceComponentB"); -*/ } catch(Exception ex){ System.err.println(ex.toString()); @@ -106,7 +102,6 @@ @Test public void testCalculator() throws Exception { - /* // Calculate Assert.assertEquals(calculatorServiceA.add(3, 2), 5.0); Assert.assertEquals(calculatorServiceA.subtract(3, 2), 1.0); @@ -116,6 +111,5 @@ Assert.assertEquals(calculatorServiceB.subtract(3, 2), 1.0); Assert.assertEquals(calculatorServiceB.multiply(3, 2), 6.0); Assert.assertEquals(calculatorServiceB.divide(3, 2), 1.5); - */ } } Modified: incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeDrivenTestCase.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeDrivenTestCase.java?rev=597163&r1=597162&r2=597163&view=diff ============================================================================== --- incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeDrivenTestCase.java (original) +++ incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeDrivenTestCase.java Wed Nov 21 09:54:04 2007 @@ -66,20 +66,23 @@ SCANodeFactory nodeFactory = SCANodeFactory.newInstance(); - // rely on meta data to start composite + // sca-contribution.xml test nodeA = nodeFactory.createSCANode("http://localhost:8100/nodeA", "http://localhost:9999"); nodeA.addContribution("nodeA", cl.getResource("nodeA/")); + nodeA.addToDomainLevelComposite(new QName("http://sample", "CalculatorA")); nodeA.start(); - // rely on meta data to start composite + // sca-deployables test nodeB = nodeFactory.createSCANode("http://localhost:8200/nodeB", "http://localhost:9999"); nodeB.addContribution("nodeB", cl.getResource("nodeB/")); + nodeB.addToDomainLevelComposite(new QName("http://sample", "CalculatorB")); nodeB.start(); - // explicitly ask for composite to be started + // sca-deployables test nodeC = nodeFactory.createSCANode("http://localhost:8300/nodeC", "http://localhost:9999"); nodeC.addContribution("nodeC", cl.getResource("nodeC/")); nodeC.addToDomainLevelComposite(new QName("http://sample", "CalculatorC")); + nodeC.addToDomainLevelComposite(new QName("http://sample", "CalculatorC")); nodeC.start(); SCADomainFinder domainFinder = SCADomainFinder.newInstance(); Modified: incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/StandaloneNodeTestCase.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/StandaloneNodeTestCase.java?rev=597163&r1=597162&r2=597163&view=diff ============================================================================== --- incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/StandaloneNodeTestCase.java (original) +++ incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/StandaloneNodeTestCase.java Wed Nov 21 09:54:04 2007 @@ -110,7 +110,9 @@ @Test public void testAddOtherContributionsAndStartNode() throws Exception { node.addContribution("nodeB", cl.getResource("nodeB/")); + node.addToDomainLevelComposite(new QName("http://sample", "CalculatorB")); node.addContribution("nodeD", cl.getResource("nodeD/")); + node.addToDomainLevelComposite(new QName("http://sample", "CalculatorD")); node.start(); subtractServiceC = node.getDomain().getService(SubtractService.class, "SubtractServiceComponentC"); calculatorServiceD = node.getDomain().getService(CalculatorService.class, "CalculatorServiceComponentD"); @@ -168,6 +170,7 @@ public void testAddContributionBackAgain() throws Exception { node.addContribution("nodeD", cl.getResource("nodeD/")); + node.addToDomainLevelComposite(new QName("http://sample", "CalculatorD")); node.start(); calculatorServiceD = node.getDomain().getService(CalculatorService.class, "CalculatorServiceComponentD"); Modified: incubator/tuscany/java/sca/samples/calculator-distributed/src/test/java/calculator/DomainInMemoryTestCase.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/calculator-distributed/src/test/java/calculator/DomainInMemoryTestCase.java?rev=597163&r1=597162&r2=597163&view=diff ============================================================================== --- incubator/tuscany/java/sca/samples/calculator-distributed/src/test/java/calculator/DomainInMemoryTestCase.java (original) +++ incubator/tuscany/java/sca/samples/calculator-distributed/src/test/java/calculator/DomainInMemoryTestCase.java Wed Nov 21 09:54:04 2007 @@ -66,16 +66,19 @@ nodeA = nodeFactory.createSCANode("http://localhost:8085/nodeA", "http://localhost:9999"); nodeA.addContribution("nodeA", cl.getResource("nodeA/")); + nodeA.addToDomainLevelComposite(new QName("http://sample", "Calculator")); nodeA.start(); nodeB = nodeFactory.createSCANode("http://localhost:8086/nodeB", "http://localhost:9999"); nodeB.addContribution("nodeB", cl.getResource("nodeB/")); + nodeB.addToDomainLevelComposite(new QName("http://sample", "Calculator")); nodeB.start(); nodeC = nodeFactory.createSCANode("http://localhost:8087/nodeC", "http://localhost:9999"); nodeC.addContribution("nodeC", cl.getResource("nodeC/")); + nodeC.addToDomainLevelComposite(new QName("http://sample", "Calculator")); nodeC.start(); SCADomainFinder domainFinder = SCADomainFinder.newInstance(); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
