diff options
author | antelder <antelder@13f79535-47bb-0310-9956-ffa450edef68> | 2011-06-19 07:25:03 +0000 |
---|---|---|
committer | antelder <antelder@13f79535-47bb-0310-9956-ffa450edef68> | 2011-06-19 07:25:03 +0000 |
commit | 82d2e8d40f5b562b13faba064cf2b5323343e2ae (patch) | |
tree | d94a99ff6061f47eced60e55ddcbb6cefc437c8f /sca-java-2.x/trunk/modules | |
parent | f78a216e05c75a2e708c26efb7c616b6f1bdf2ba (diff) |
Add an impl to the update contribution method and a testcase
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1137308 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x/trunk/modules')
3 files changed, 76 insertions, 3 deletions
diff --git a/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/NodeImpl.java b/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/NodeImpl.java index 2d7c371975..619ec985ab 100644 --- a/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/NodeImpl.java +++ b/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/NodeImpl.java @@ -103,22 +103,40 @@ public class NodeImpl implements Node { return installContribution(uri, contributionURL, null, null); } - public boolean updateContribution(String uri, String contributionURL, String metaDataURL, List<String> dependentContributionURIs) throws ContributionReadException, ValidationException { + public boolean updateContribution(String uri, String contributionURL, String metaDataURL, List<String> dependentContributionURIs) throws ContributionReadException, ValidationException, ActivationException { ContributionDescription ic = getInstalledContribution(uri); if (ic == null) { installContribution(uri, contributionURL, metaDataURL, dependentContributionURIs); return true; } + // do this if only updating if the contribution has been modified: // if url equal and a file and last modified not changed // if metadata url equal and a file and laqst modified not changed // if (dependent contributions uris not changed) // return false - // uninstall contribution - // install contribution + uninstallContribution(uri); + + installContribution(uri, contributionURL, metaDataURL, dependentContributionURIs); + // stop/start all started composites using the contribution + for (DeployedComposite dc : new ArrayList<DeployedComposite>(startedComposites.values())) { + if (dc.getContributionURIs().contains(uri)) { + String dcCompositeURI = dc.getURI(); + stopComposite(uri, dcCompositeURI); + String key = uri + "/" + dcCompositeURI; + stoppedComposites.remove(key); + startComposite(uri, dcCompositeURI); + } + } + // remove all stopped composites using the contribution + for (DeployedComposite dc : new ArrayList<DeployedComposite>(stoppedComposites.values())) { + if (dc.getContributionURIs().contains(uri)) { + stoppedComposites.remove(uri + "/" + dc.getURI()); + } + } return true; } diff --git a/sca-java-2.x/trunk/modules/domain-node/src/test/java/org/apache/tuscany/sca/impl/ContributionUpdateTestCase.java b/sca-java-2.x/trunk/modules/domain-node/src/test/java/org/apache/tuscany/sca/impl/ContributionUpdateTestCase.java new file mode 100644 index 0000000000..105f9c71c8 --- /dev/null +++ b/sca-java-2.x/trunk/modules/domain-node/src/test/java/org/apache/tuscany/sca/impl/ContributionUpdateTestCase.java @@ -0,0 +1,55 @@ +/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.impl;
+
+import java.io.FileNotFoundException;
+import java.util.Collection;
+
+import javax.xml.stream.XMLStreamException;
+
+import org.apache.tuscany.sca.Node;
+import org.apache.tuscany.sca.TuscanyRuntime;
+import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
+import org.apache.tuscany.sca.monitor.ValidationException;
+import org.apache.tuscany.sca.runtime.ActivationException;
+import org.junit.Assert;
+import org.junit.Test;
+import org.oasisopen.sca.NoSuchDomainException;
+import org.oasisopen.sca.NoSuchServiceException;
+
+public class ContributionUpdateTestCase {
+
+ @Test
+ public void updateTest1() throws NoSuchServiceException, NoSuchDomainException, ContributionReadException, ActivationException, ValidationException, XMLStreamException, FileNotFoundException {
+ Node node = TuscanyRuntime.newInstance().createNode("updateTest1");
+ String curi = node.installContribution("src/test/resources/sample-helloworld.jar");
+ node.startDeployables(curi);
+
+ Collection<Endpoint> eps = ((NodeImpl)node).getEndpointRegistry().getEndpoints();
+ Assert.assertEquals(1, eps.size());
+ Assert.assertEquals("HelloworldComponent#service-binding(Helloworld/Helloworld)", eps.iterator().next().getURI());
+
+ ((NodeImpl)node).updateContribution(curi, "src/test/resources/sample-helloworld2.jar", null, null);
+
+ eps = ((NodeImpl)node).getEndpointRegistry().getEndpoints();
+ Assert.assertEquals(1, eps.size());
+ Assert.assertEquals("Helloworld2Component#service-binding(Helloworld/Helloworld)", eps.iterator().next().getURI());
+ }
+}
diff --git a/sca-java-2.x/trunk/modules/domain-node/src/test/resources/sample-helloworld2.jar b/sca-java-2.x/trunk/modules/domain-node/src/test/resources/sample-helloworld2.jar Binary files differnew file mode 100644 index 0000000000..80b8b2315f --- /dev/null +++ b/sca-java-2.x/trunk/modules/domain-node/src/test/resources/sample-helloworld2.jar |