You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sl...@apache.org on 2007/11/26 14:29:14 UTC
svn commit: r598264 - in /incubator/tuscany/java/sca/modules:
domain-api/src/main/java/org/apache/tuscany/sca/domain/
domain-impl/src/main/java/org/apache/tuscany/sca/domain/impl/
domain-impl/src/main/java/org/apache/tuscany/sca/domain/model/impl/ doma...
Author: slaws
Date: Mon Nov 26 05:29:09 2007
New Revision: 598264
URL: http://svn.apache.org/viewvc?rev=598264&view=rev
Log:
Implement more domain features including UpdateContribution and the automatic assignment of dependent contributions to nodes. Fix the node and domain exceptions so that they work across web services. Fix the domain destruction code so that it destroys all registered nodes.
Added:
incubator/tuscany/java/sca/modules/domain-impl/src/test/java/org/apache/tuscany/sca/domain/impl/TestCallableReferenceImpl.java
incubator/tuscany/java/sca/modules/domain-impl/src/test/java/org/apache/tuscany/sca/domain/impl/TestNodeManagerServiceImpl.java
incubator/tuscany/java/sca/modules/node-impl/src/test/java/calculator/AddServiceUpdateImpl.java
incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainAPITestCase.java
incubator/tuscany/java/sca/modules/node-impl/src/test/resources/calculatordependent/
incubator/tuscany/java/sca/modules/node-impl/src/test/resources/calculatordependent/Calculator.composite
incubator/tuscany/java/sca/modules/node-impl/src/test/resources/calculatorprimary/
incubator/tuscany/java/sca/modules/node-impl/src/test/resources/calculatorprimary/Calculator.composite
incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeBupdate/
Modified:
incubator/tuscany/java/sca/modules/domain-api/src/main/java/org/apache/tuscany/sca/domain/DomainException.java
incubator/tuscany/java/sca/modules/domain-impl/src/main/java/org/apache/tuscany/sca/domain/impl/SCADomainImpl.java
incubator/tuscany/java/sca/modules/domain-impl/src/main/java/org/apache/tuscany/sca/domain/model/impl/NodeModelImpl.java
incubator/tuscany/java/sca/modules/domain-impl/src/test/java/org/apache/tuscany/sca/domain/impl/DomainImplTestCase.java
incubator/tuscany/java/sca/modules/domain/src/main/java/org/apache/tuscany/sca/domain/model/NodeModel.java
incubator/tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeException.java
incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCADomainProxyImpl.java
incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCANodeImpl.java
incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/management/impl/SCANodeManagerServiceImpl.java
incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/StandaloneNodeTestCase.java
incubator/tuscany/java/sca/modules/node/src/main/java/org/apache/tuscany/sca/node/management/SCANodeManagerService.java
Modified: incubator/tuscany/java/sca/modules/domain-api/src/main/java/org/apache/tuscany/sca/domain/DomainException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/domain-api/src/main/java/org/apache/tuscany/sca/domain/DomainException.java?rev=598264&r1=598263&r2=598264&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/domain-api/src/main/java/org/apache/tuscany/sca/domain/DomainException.java (original)
+++ incubator/tuscany/java/sca/modules/domain-api/src/main/java/org/apache/tuscany/sca/domain/DomainException.java Mon Nov 26 05:29:09 2007
@@ -30,12 +30,17 @@
private String message;
+ public DomainException() {
+ }
+
public DomainException(String message) {
super(message);
+ setMessage(message);
}
public DomainException(Throwable cause) {
super(cause);
+ setMessage(cause.getMessage());
}
public String getMessage() {
Modified: incubator/tuscany/java/sca/modules/domain-impl/src/main/java/org/apache/tuscany/sca/domain/impl/SCADomainImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/domain-impl/src/main/java/org/apache/tuscany/sca/domain/impl/SCADomainImpl.java?rev=598264&r1=598263&r2=598264&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/domain-impl/src/main/java/org/apache/tuscany/sca/domain/impl/SCADomainImpl.java (original)
+++ incubator/tuscany/java/sca/modules/domain-impl/src/main/java/org/apache/tuscany/sca/domain/impl/SCADomainImpl.java Mon Nov 26 05:29:09 2007
@@ -1,4 +1,4 @@
- /*
+/*
* 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
@@ -22,7 +22,9 @@
import java.io.Externalizable;
import java.net.URI;
import java.net.URL;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -38,6 +40,8 @@
import org.apache.tuscany.sca.assembly.xml.Constants;
import org.apache.tuscany.sca.contribution.Contribution;
import org.apache.tuscany.sca.contribution.DeployedArtifact;
+import org.apache.tuscany.sca.contribution.Export;
+import org.apache.tuscany.sca.contribution.Import;
import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
import org.apache.tuscany.sca.contribution.service.ContributionService;
import org.apache.tuscany.sca.core.assembly.ActivationException;
@@ -54,6 +58,7 @@
import org.apache.tuscany.sca.domain.model.NodeModel;
import org.apache.tuscany.sca.domain.model.ServiceModel;
import org.apache.tuscany.sca.domain.model.impl.DomainModelFactoryImpl;
+import org.apache.tuscany.sca.domain.model.impl.NodeModelImpl;
import org.apache.tuscany.sca.host.embedded.impl.ReallySmallRuntime;
import org.apache.tuscany.sca.host.http.ServletHost;
import org.apache.tuscany.sca.host.http.ServletHostExtensionPoint;
@@ -83,11 +88,15 @@
// class loader used to get the runtime going
protected ClassLoader domainClassLoader;
- // management runtime
+ // domain management application runtime
protected ReallySmallRuntime domainManagementRuntime;
protected ContributionService domainManagementContributionService;
protected Contribution domainManagementContribution;
protected Composite domainManagementComposite;
+
+ // Used to pipe dummy node information into the domain management runtime
+ // primarily so that the sca binding can resolve endpoints.
+ protected NodeFactoryImpl nodeFactory;
// The domain model
protected DomainModelFactory domainModelFactory = new DomainModelFactoryImpl();
@@ -152,7 +161,7 @@
// service out there in the domain
SCADummyNodeImpl node = new SCADummyNodeImpl(this);
ModelFactoryExtensionPoint factories = domainManagementRuntime.getExtensionPointRegistry().getExtensionPoint(ModelFactoryExtensionPoint.class);
- NodeFactoryImpl nodeFactory = new NodeFactoryImpl(node);
+ nodeFactory = new NodeFactoryImpl(node);
factories.addFactory(nodeFactory);
// Find the composite that will configure the domain
@@ -165,7 +174,6 @@
// add node composite to the management domain
domainManagementContributionService = domainManagementRuntime.getContributionService();
Contribution contribution = null;
-
contribution = domainManagementContributionService.contribute(domainModel.getDomainURI(),
contributionURL,
false);
@@ -382,20 +390,83 @@
// SCADomain API methods
public void start() throws DomainException {
- // call start on all nodes
-
+ // call start on all nodes with deployed composites
+ for(NodeModel node : domainModel.getNodes().values()) {
+ if ( !node.getDeployedComposites().isEmpty()){
+ try {
+ if (!node.getIsRunning()) {
+ ((NodeModelImpl)node).getSCANodeManagerService().start();
+ node.setIsRunning(true);
+ }
+ } catch (Exception ex) {
+ // TODO - collate errors and report
+ ex.printStackTrace();
+ }
+ }
+ }
}
public void stop() throws DomainException {
-
+ // call stop on all nodes
+ for(NodeModel node : domainModel.getNodes().values()) {
+ try {
+ if (node.getIsRunning()) {
+ ((NodeModelImpl)node).getSCANodeManagerService().stop();
+ node.setIsRunning(false);
+ }
+ } catch (Exception ex) {
+ // TODO - collate errors and report
+ ex.printStackTrace();
+ }
+ }
}
public void destroy() throws DomainException {
try {
+ // Stop and destroy all nodes
+ // this should unregister all nodes
+
+ //Get all nodes out of the domain. Destroying them will cause them to
+ //call back to the domain to unregister so we need to avoid concurrent updates
+ List<NodeModel> nodes = new ArrayList<NodeModel>();
+ for(NodeModel node : domainModel.getNodes().values()) {
+ nodes.add(node);
+ }
+
+ for(NodeModel node : nodes) {
+ try {
+ ((NodeModelImpl)node).getSCANodeManagerService().destroyNode();
+ } catch (Exception ex) {
+ // TODO - collate errors and report
+ ex.printStackTrace();
+ }
+ }
+
+ // Wait for all the nodes to de-register themselves
+ int loopCount = 10;
+ while((!domainModel.getNodes().isEmpty()) && (loopCount > 0)){
+ logger.log(Level.INFO, "Waiting for nodes to close down");
+ try {
+ Thread.sleep(1000);
+ } catch (Exception ex){
+ // Do nothing
+ }
+ loopCount--;
+ }
+
+ // remove all management components
+ Composite composite = domainManagementComposite.getIncludes().get(0);
+
+ domainManagementRuntime.getCompositeActivator().stop(composite);
+ domainManagementRuntime.getCompositeActivator().deactivate(composite);
+
+ // remove the node factory
+ ModelFactoryExtensionPoint factories = domainManagementRuntime.getExtensionPointRegistry().getExtensionPoint(ModelFactoryExtensionPoint.class);
+ factories.removeFactory(nodeFactory);
+ nodeFactory.setNode(null);
+
// Stop the node
domainManagementRuntime.stop();
-
- // TODO - remove all components first
} catch(ActivationException ex) {
throw new DomainException(ex);
@@ -417,7 +488,41 @@
}
public void updateContribution(String contributionURI, URL contributionURL) throws DomainException {
- // TODO
+ if ( domainModel.getContributions().containsKey(contributionURI) == true ){
+
+ List<QName> deployedCompositeNames = new ArrayList<QName>();
+
+ // record the names of composites that must be restarted after the
+ // contribution has been removed
+ for ( NodeModel node : domainModel.getNodes().values()){
+ if ((node.getIsRunning()) && (node.getContributions().containsKey(contributionURI))) {
+ for (CompositeModel tmpCompositeModel : node.getDeployedComposites().values()){
+ deployedCompositeNames.add(tmpCompositeModel.getCompositeQName());
+ }
+ }
+ }
+
+ // remove the old version of the contribution
+ removeContribution(contributionURI);
+
+ // Add the updated contribution back into the domain model
+ // TODO - there is a problem here with dependent contributions
+ // as it doesn't look like the contribution listeners
+ // are working quite right
+ addContribution(contributionURI, contributionURL);
+
+ // automatically add the domain level composites back into the domain
+ // from the updated composite
+ ContributionModel contributionModel = domainModel.getContributions().get(contributionURI);
+ for (CompositeModel compositeModel : contributionModel.getDeployableComposites().values()){
+ addToDomainLevelComposite(compositeModel.getCompositeQName());
+ }
+
+ // automatically start all the composites
+ for (QName compositeName : deployedCompositeNames) {
+ startComposite(compositeName);
+ }
+ }
}
public void removeContribution(String contributionURI) throws DomainException {
@@ -431,12 +536,36 @@
domainModel.getDeployedComposites().remove(compositeQName);
}
+ // remove contribution from the domain model
domainModel.getContributions().remove(contributionURI);
+ // remove contribution from the contribution processor
+ try {
+ domainManagementContributionService.remove(contributionURI);
+ } catch (Exception ex){
+ throw new DomainException(ex);
+ }
+
+ // stop and tidy any nodes running this contribution
for ( NodeModel node : domainModel.getNodes().values()){
if (node.getContributions().containsKey(contributionURI)) {
- // TODO remove composite info
- node.getContributions().remove(contributionURI);
+ try {
+ if (node.getIsRunning()) {
+ ((NodeModelImpl)node).getSCANodeManagerService().stop();
+ node.setIsRunning(false);
+ }
+
+ // remove all contributions from this node including the
+ // one that is specifically being removed.
+ for (ContributionModel tmpContributionModel : node.getContributions().values()){
+ ((NodeModelImpl)node).getSCANodeManagerService().removeContribution(contributionURI);
+ }
+
+ node.getContributions().clear();
+ } catch (Exception ex) {
+ // TODO - collate errors and report
+ ex.printStackTrace();
+ }
}
}
}
@@ -447,7 +576,7 @@
}
public void updateDeploymentComposite(String contributionURI, String compositeXML) throws DomainException {
-
+ // TODO
}
public void addToDomainLevelComposite(QName compositeName) throws DomainException {
@@ -462,76 +591,100 @@
}
public void removeFromDomainLevelComposite(QName compositeName) throws DomainException {
- // TODO
- // remove from node
- // remove from deployed list
- // if the node has only one composite remove contribution from node
+
domainModel.getDeployedComposites().remove(compositeName);
+
+ for(NodeModel node : domainModel.getNodes().values()) {
+ if ( node.getDeployedComposites().containsValue(compositeName)){
+ try {
+ if (node.getIsRunning()) {
+ ((NodeModelImpl)node).getSCANodeManagerService().stop();
+ node.setIsRunning(false);
+ }
+ // TODO - how to remove it from the node???
+
+ node.getDeployedComposites().remove(compositeName);
+ } catch (Exception ex) {
+ // TODO - collate errors and report
+ ex.printStackTrace();
+ }
+ }
+ }
}
public String getDomainLevelComposite() throws DomainException {
+ // TODO
return null;
}
public String getQNameDefinition(QName artifact) throws DomainException {
+ // TODO
return null;
}
public void startComposite(QName compositeName) throws DomainException {
// find the composite object from the list of deployed composites
- CompositeModel composite = domainModel.getDeployedComposites().get(compositeName);
+ CompositeModel compositeModel = domainModel.getDeployedComposites().get(compositeName);
- if (composite == null){
+ if (compositeModel == null){
throw new DomainException("Can't start composite " + compositeName.toString() +
" as it hasn't been added to the domain level composite");
}
- ContributionModel contribution = null;
+ ContributionModel contributionModel = null;
// find the contribution that has this composite
- for (ContributionModel tmpContribution : domainModel.getContributions().values()){
- if (tmpContribution.getDeployableComposites().containsKey(compositeName)){
- contribution = tmpContribution;
+ for (ContributionModel tmpContributionModel : domainModel.getContributions().values()){
+ if (tmpContributionModel.getDeployableComposites().containsKey(compositeName)){
+ contributionModel = tmpContributionModel;
}
}
- if (contribution == null){
+ if (contributionModel == null){
throw new DomainException("Can't find contribution for composite " + compositeName.toString());
}
-
- // assign the composite to a node
+
+ List<Contribution> dependentContributions = new ArrayList<Contribution>();
+ findDependentContributions(contributionModel.getContribution(), dependentContributions);
+
+ // assign the set of composites to a node
NodeModel node = null;
for(NodeModel tmpNode : domainModel.getNodes().values()) {
if ( tmpNode.getContributions().isEmpty()){
node = tmpNode;
- node.getContributions().put(contribution.getContributionURI(), contribution);
+
+ for (Contribution tmpContribution : dependentContributions){
+ node.getContributions().put(tmpContribution.getURI(),
+ domainModel.getContributions().get(tmpContribution.getURI()));
+ }
+
+ node.getDeployedComposites().put(compositeName, compositeModel);
break;
}
}
if (node == null){
- throw new DomainException("No free node available for to run composite " + compositeName.toString());
+ throw new DomainException("No free node available to run composite " + compositeName.toString());
}
- // get the node manager for the node in question
- CallableReference<SCANodeManagerService> nodeManagerReference =
- (CallableReference<SCANodeManagerService>)node.getNodeManagerReference();
- SCANodeManagerService nodeManagerService = nodeManagerReference.getService();
-
try {
- // add contributions
- for (ContributionModel tmpContribution : node.getContributions().values()){
- nodeManagerService.addContribution(contribution.getContributionURI(),
- contribution.getContributionURL().toString());
+
+ // add contributions. Use the dependent contribution list here rather than the
+ // one build up in the mode to ensure that contributions are added in the correct order
+ // I.e. the top most in the dependency tree last.
+ for (Contribution tmpContribution : dependentContributions){
+ ((NodeModelImpl)node).getSCANodeManagerService().addContribution(tmpContribution.getURI(),
+ domainModel.getContributions().get(tmpContribution.getURI()).getContributionURL());
}
// deploy composite
- nodeManagerService.addToDomainLevelComposite(compositeName.toString());
+ ((NodeModelImpl)node).getSCANodeManagerService().addToDomainLevelComposite(compositeName.toString());
// start node
- nodeManagerService.start();
+ ((NodeModelImpl)node).getSCANodeManagerService().start();
+ node.setIsRunning(true);
// TODO
// somewhere we need to add the deployed composites into the node model
@@ -542,8 +695,50 @@
}
- public void stopComposite(QName qname) throws DomainException {
- // stop the node running the composite.
+ public void stopComposite(QName compositeName) throws DomainException {
+ // find the composite object from the list of deployed composites
+ CompositeModel composite = domainModel.getDeployedComposites().get(compositeName);
+
+ if (composite == null){
+ throw new DomainException("Can't stop composite " + compositeName.toString() +
+ " as it hasn't been added to the domain level composite");
+ }
+
+ // stop all the nodes running this composite
+ for(NodeModel node : domainModel.getNodes().values()) {
+ if ( node.getDeployedComposites().containsValue(compositeName)){
+ try {
+ if (node.getIsRunning()) {
+ ((NodeModelImpl)node).getSCANodeManagerService().stop();
+ node.setIsRunning(false);
+ }
+ } catch (Exception ex) {
+ // TODO - how to report this?
+ }
+ }
+ }
+ }
+
+ // Recursively look for contributions that contain included artifacts. Deepest dependencies
+ // appear first in the list
+ // This function should be moved to the contribution package.
+ private void findDependentContributions(Contribution contribution, List<Contribution> dependentContributions){
+
+ for (Import contribImport : contribution.getImports()) {
+ for (Contribution tmpContribution : contribImport.getExportContributions()) {
+ for (Export export : tmpContribution.getExports()) {
+ if (contribImport.match(export)) {
+ if (tmpContribution.getImports().isEmpty()) {
+ dependentContributions.add(tmpContribution);
+ } else {
+ findDependentContributions(tmpContribution, dependentContributions);
+ }
+ }
+ }
+ }
+ }
+
+ dependentContributions.add(contribution);
}
private ContributionModel parseContribution(String contributionURI, String contributionURL) throws DomainException {
Modified: incubator/tuscany/java/sca/modules/domain-impl/src/main/java/org/apache/tuscany/sca/domain/model/impl/NodeModelImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/domain-impl/src/main/java/org/apache/tuscany/sca/domain/model/impl/NodeModelImpl.java?rev=598264&r1=598263&r2=598264&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/domain-impl/src/main/java/org/apache/tuscany/sca/domain/model/impl/NodeModelImpl.java (original)
+++ incubator/tuscany/java/sca/modules/domain-impl/src/main/java/org/apache/tuscany/sca/domain/model/impl/NodeModelImpl.java Mon Nov 26 05:29:09 2007
@@ -29,6 +29,8 @@
import org.apache.tuscany.sca.domain.model.ContributionModel;
import org.apache.tuscany.sca.domain.model.NodeModel;
import org.apache.tuscany.sca.domain.model.ServiceModel;
+import org.apache.tuscany.sca.node.management.SCANodeManagerService;
+import org.osoa.sca.CallableReference;
/**
@@ -40,6 +42,7 @@
private String nodeURI;
private String nodeURL;
+ private boolean isRunning = false;
private Externalizable nodeManagerReference;
private Map<String, ContributionModel> contributions = new HashMap<String, ContributionModel>();
private Map<QName, CompositeModel> composites = new HashMap<QName, CompositeModel>();
@@ -82,6 +85,24 @@
}
/**
+ * Returns true if the node has been started
+ *
+ * @return tru if the node is running
+ */
+ public boolean getIsRunning() {
+ return isRunning;
+ }
+
+ /**
+ * Set the running status of the node
+ *
+ * @param isRunning
+ */
+ public void setIsRunning(boolean isRunning) {
+ this.isRunning = isRunning;
+ }
+
+ /**
* Retrieve the node manager reference
*
* @return node manager reference
@@ -97,6 +118,15 @@
*/
public void setNodeManagerReference(Externalizable nodeManagerReference){
this.nodeManagerReference = nodeManagerReference;
+ }
+
+ /**
+ * Get the service proxy for the node mamager
+ *
+ * @return node manager service proxy
+ */
+ public SCANodeManagerService getSCANodeManagerService(){
+ return ((CallableReference<SCANodeManagerService>)nodeManagerReference).getService();
}
public Map<String, ContributionModel> getContributions(){
Modified: incubator/tuscany/java/sca/modules/domain-impl/src/test/java/org/apache/tuscany/sca/domain/impl/DomainImplTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/domain-impl/src/test/java/org/apache/tuscany/sca/domain/impl/DomainImplTestCase.java?rev=598264&r1=598263&r2=598264&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/domain-impl/src/test/java/org/apache/tuscany/sca/domain/impl/DomainImplTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/domain-impl/src/test/java/org/apache/tuscany/sca/domain/impl/DomainImplTestCase.java Mon Nov 26 05:29:09 2007
@@ -18,6 +18,7 @@
*/
package org.apache.tuscany.sca.domain.impl;
+import java.io.Externalizable;
import java.net.URL;
import org.apache.tuscany.sca.domain.SCADomain;
@@ -25,9 +26,11 @@
import org.apache.tuscany.sca.domain.SCADomainFactory;
import org.apache.tuscany.sca.domain.SCADomainSPI;
import org.apache.tuscany.sca.node.SCANode;
+import org.apache.tuscany.sca.node.management.SCANodeManagerService;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
+import org.osoa.sca.CallableReference;
import calculator.AddService;
import calculator.CalculatorService;
@@ -68,9 +71,12 @@
}
@Test
- public void testAddNode() throws Exception {
- domainSPI.registerNode("http://localhost:8100/mynode1", "http://localhost:9999", null);
- domainSPI.registerNode("http://localhost:8200/mynode2", "http://localhost:9999", null);
+ public void testAddNode() throws Exception {
+ CallableReference<SCANodeManagerService> node1Ref = new TestCallableReferenceImpl<SCANodeManagerService>();
+ domainSPI.registerNode("http://localhost:8100/mynode1", "http://localhost:9999", (Externalizable)node1Ref);
+
+ CallableReference<SCANodeManagerService> node2Ref = new TestCallableReferenceImpl<SCANodeManagerService>();
+ domainSPI.registerNode("http://localhost:8200/mynode2", "http://localhost:9999", (Externalizable)node2Ref);
}
@Test
@@ -81,6 +87,18 @@
@Test
public void testAddContributionWithoutMetaData() throws Exception {
domain.addContribution("contributionNodeB", cl.getResource("nodeB/"));
+ }
+
+ @Test
+ public void testRemoveContributions() throws Exception {
+ domain.removeContribution("contributionNodeA");
+ domain.removeContribution("contributionNodeB");
+ }
+
+ @Test
+ public void testRemoveNodes() throws Exception {
+ domainSPI.unregisterNode("http://localhost:8100/mynode1");
+ domainSPI.unregisterNode("http://localhost:8200/mynode2");
}
//@Test
Added: incubator/tuscany/java/sca/modules/domain-impl/src/test/java/org/apache/tuscany/sca/domain/impl/TestCallableReferenceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/domain-impl/src/test/java/org/apache/tuscany/sca/domain/impl/TestCallableReferenceImpl.java?rev=598264&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/domain-impl/src/test/java/org/apache/tuscany/sca/domain/impl/TestCallableReferenceImpl.java (added)
+++ incubator/tuscany/java/sca/modules/domain-impl/src/test/java/org/apache/tuscany/sca/domain/impl/TestCallableReferenceImpl.java Mon Nov 26 05:29:09 2007
@@ -0,0 +1,107 @@
+/*
+ * 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.domain.impl;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.UUID;
+
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.ComponentService;
+import org.apache.tuscany.sca.assembly.OptimizableBinding;
+import org.apache.tuscany.sca.assembly.Reference;
+import org.apache.tuscany.sca.assembly.SCABinding;
+import org.apache.tuscany.sca.core.assembly.CompositeActivator;
+import org.apache.tuscany.sca.core.assembly.CompositeActivatorImpl;
+import org.apache.tuscany.sca.core.assembly.EndpointReferenceImpl;
+import org.apache.tuscany.sca.core.assembly.ReferenceParametersImpl;
+import org.apache.tuscany.sca.core.conversation.ConversationManager;
+import org.apache.tuscany.sca.core.conversation.ConversationState;
+import org.apache.tuscany.sca.core.conversation.ExtendedConversation;
+import org.apache.tuscany.sca.core.factory.ObjectCreationException;
+import org.apache.tuscany.sca.core.invocation.ProxyFactory;
+import org.apache.tuscany.sca.interfacedef.Interface;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
+import org.apache.tuscany.sca.runtime.EndpointReference;
+import org.apache.tuscany.sca.runtime.ReferenceParameters;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
+import org.apache.tuscany.sca.runtime.RuntimeWire;
+import org.osoa.sca.CallableReference;
+import org.osoa.sca.Conversation;
+import org.osoa.sca.ServiceRuntimeException;
+
+/**
+ * Test callable reference used to test the domain when no nodes are running
+ *
+ * @version $Rev: 597679 $ $Date: 2007-11-23 15:21:29 +0000 (Fri, 23 Nov 2007) $
+ * @param <B> the type of the business interface
+ */
+public class TestCallableReferenceImpl<B> implements CallableReference<B>, Externalizable {
+
+ protected TestCallableReferenceImpl() {
+ super();
+ }
+
+ public RuntimeWire getRuntimeWire() {
+ return null;
+ }
+
+ public B getProxy() throws ObjectCreationException {
+ return null;
+ }
+
+ public B getService() {
+ return (B) new TestNodeManagerServiceImpl();
+ }
+
+ public Class<B> getBusinessInterface() {
+ return null;
+ }
+
+ public boolean isConversational() {
+ return false;
+ }
+
+ public Conversation getConversation() {
+ return null;
+ }
+
+ public Object getCallbackID() {
+ return null;
+ }
+
+ /**
+ * @see java.io.Externalizable#readExternal(java.io.ObjectInput)
+ */
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ }
+
+
+ /**
+ * @see java.io.Externalizable#writeExternal(java.io.ObjectOutput)
+ */
+ public void writeExternal(ObjectOutput out) throws IOException {
+
+ }
+}
Added: incubator/tuscany/java/sca/modules/domain-impl/src/test/java/org/apache/tuscany/sca/domain/impl/TestNodeManagerServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/domain-impl/src/test/java/org/apache/tuscany/sca/domain/impl/TestNodeManagerServiceImpl.java?rev=598264&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/domain-impl/src/test/java/org/apache/tuscany/sca/domain/impl/TestNodeManagerServiceImpl.java (added)
+++ incubator/tuscany/java/sca/modules/domain-impl/src/test/java/org/apache/tuscany/sca/domain/impl/TestNodeManagerServiceImpl.java Mon Nov 26 05:29:09 2007
@@ -0,0 +1,83 @@
+/*
+ * 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.domain.impl;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.core.assembly.RuntimeComponentImpl;
+import org.apache.tuscany.sca.domain.SCADomain;
+import org.apache.tuscany.sca.node.ComponentInfo;
+import org.apache.tuscany.sca.node.ComponentManagerService;
+import org.apache.tuscany.sca.node.NodeException;
+import org.apache.tuscany.sca.node.SCANode;
+import org.apache.tuscany.sca.node.management.SCANodeManagerInitService;
+import org.apache.tuscany.sca.node.management.SCANodeManagerService;
+import org.osoa.sca.annotations.Scope;
+import org.osoa.sca.annotations.Service;
+
+/**
+ * A dummy interface for the domain to talk to when testing the domain and no nodes are running
+ *
+ * @version $Rev: 552343 $ $Date: 2007-09-11 18:45:36 +0100 (Tue, 11 Sep 2007) $
+ */
+public class TestNodeManagerServiceImpl implements SCANodeManagerService {
+
+
+
+ // SCANodeManagerService methods
+
+ public String getURI() {
+ return null;
+ }
+
+ public void addContribution(String contributionURI, String contributionURL) throws NodeException {
+ System.out.println("addContribution " + contributionURI + " " + contributionURL);
+ }
+
+ public void removeContribution(String contributionURI) throws NodeException {
+ System.out.println("addContribution " + contributionURI);
+ }
+
+ public void addToDomainLevelComposite(String compositeName) throws NodeException {
+ System.out.println("addToDomainLevelComposite " + compositeName);
+ }
+
+ public void start() throws NodeException {
+ System.out.println("start");
+ }
+
+ public void stop() throws NodeException {
+ System.out.println("stop");
+ }
+
+ public void destroyNode() throws NodeException {
+ System.out.println("destroy");
+ }
+
+
+}
Modified: incubator/tuscany/java/sca/modules/domain/src/main/java/org/apache/tuscany/sca/domain/model/NodeModel.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/domain/src/main/java/org/apache/tuscany/sca/domain/model/NodeModel.java?rev=598264&r1=598263&r2=598264&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/domain/src/main/java/org/apache/tuscany/sca/domain/model/NodeModel.java (original)
+++ incubator/tuscany/java/sca/modules/domain/src/main/java/org/apache/tuscany/sca/domain/model/NodeModel.java Mon Nov 26 05:29:09 2007
@@ -63,6 +63,20 @@
public void setNodeURL(String nodeURL);
/**
+ * Returns true if the node has been started
+ *
+ * @return tru if the node is running
+ */
+ public boolean getIsRunning();
+
+ /**
+ * Set the running status of the node
+ *
+ * @param isRunning
+ */
+ public void setIsRunning(boolean isRunning);
+
+ /**
* Retrieve the node manager reference
*
* @return node manager reference
Modified: incubator/tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeException.java?rev=598264&r1=598263&r2=598264&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeException.java (original)
+++ incubator/tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeException.java Mon Nov 26 05:29:09 2007
@@ -30,6 +30,9 @@
private String message;
+ public NodeException() {
+ }
+
public NodeException(String message) {
super(message);
setMessage(message);
Modified: incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCADomainProxyImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCADomainProxyImpl.java?rev=598264&r1=598263&r2=598264&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCADomainProxyImpl.java (original)
+++ incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCADomainProxyImpl.java Mon Nov 26 05:29:09 2007
@@ -32,45 +32,24 @@
import org.apache.tuscany.sca.assembly.Binding;
import org.apache.tuscany.sca.assembly.Component;
import org.apache.tuscany.sca.assembly.ComponentReference;
-import org.apache.tuscany.sca.assembly.ComponentService;
import org.apache.tuscany.sca.assembly.Composite;
-import org.apache.tuscany.sca.assembly.CompositeService;
-import org.apache.tuscany.sca.assembly.SCABinding;
-import org.apache.tuscany.sca.assembly.SCABindingFactory;
import org.apache.tuscany.sca.assembly.xml.Constants;
-import org.apache.tuscany.sca.contribution.Contribution;
import org.apache.tuscany.sca.contribution.DeployedArtifact;
-import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
-import org.apache.tuscany.sca.contribution.service.ContributionService;
import org.apache.tuscany.sca.core.assembly.ActivationException;
import org.apache.tuscany.sca.core.context.CallableReferenceImpl;
-import org.apache.tuscany.sca.core.context.ServiceReferenceImpl;
import org.apache.tuscany.sca.domain.DomainException;
import org.apache.tuscany.sca.domain.SCADomainEventService;
-import org.apache.tuscany.sca.domain.SCADomainSPI;
import org.apache.tuscany.sca.domain.impl.SCADomainImpl;
-import org.apache.tuscany.sca.domain.management.SCADomainManagerInitService;
-import org.apache.tuscany.sca.domain.model.DomainModel;
-import org.apache.tuscany.sca.domain.model.DomainModelFactory;
-import org.apache.tuscany.sca.domain.model.impl.DomainModelFactoryImpl;
-import org.apache.tuscany.sca.host.embedded.impl.EmbeddedSCADomain;
import org.apache.tuscany.sca.host.embedded.impl.ReallySmallRuntime;
import org.apache.tuscany.sca.host.http.ServletHost;
import org.apache.tuscany.sca.host.http.ServletHostExtensionPoint;
-import org.apache.tuscany.sca.interfacedef.InterfaceContract;
-import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
-import org.apache.tuscany.sca.node.NodeFactoryImpl;
-import org.apache.tuscany.sca.node.SCADomainProxySPI;
import org.apache.tuscany.sca.node.SCANode;
import org.apache.tuscany.sca.node.management.SCANodeManagerInitService;
import org.apache.tuscany.sca.node.management.SCANodeManagerService;
import org.apache.tuscany.sca.node.util.SCAContributionUtil;
-import org.apache.tuscany.sca.runtime.RuntimeComponent;
-import org.apache.tuscany.sca.runtime.RuntimeComponentContext;
-import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
import org.osoa.sca.CallableReference;
import org.osoa.sca.ServiceReference;
-import org.osoa.sca.ServiceRuntimeException;
+
/**
* A local representation of the sca domain running on a single node
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=598264&r1=598263&r2=598264&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 Mon Nov 26 05:29:09 2007
@@ -259,13 +259,12 @@
ModelFactoryExtensionPoint factories = registry.getExtensionPoint(ModelFactoryExtensionPoint.class);
return null;
- }
+ }
-
- // API methods
+ // SCANode API methods
public void start() throws NodeException {
- if (!nodeStarted){
+ if ((!nodeStarted) && (nodeComposite.getIncludes().size() > 0)){
startComposites();
nodeStarted = true;
}
Modified: incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/management/impl/SCANodeManagerServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/management/impl/SCANodeManagerServiceImpl.java?rev=598264&r1=598263&r2=598264&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/management/impl/SCANodeManagerServiceImpl.java (original)
+++ incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/management/impl/SCANodeManagerServiceImpl.java Mon Nov 26 05:29:09 2007
@@ -19,6 +19,7 @@
package org.apache.tuscany.sca.node.management.impl;
+import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
@@ -70,43 +71,30 @@
public void addContribution(String contributionURI, String contributionURL) throws NodeException {
try {
node.addContribution(contributionURI, new URL(contributionURL));
- } catch (Exception ex){
- // TODO - sort out exceptions passing across binding.sca
- logger.log(Level.SEVERE, ex.toString());
- }
+ } catch (MalformedURLException ex){
+ throw new NodeException(ex);
+ }
}
public void removeContribution(String contributionURI) throws NodeException {
-
+ node.removeContribution(contributionURI);
}
public void addToDomainLevelComposite(String compositeName) throws NodeException {
- try {
- node.addToDomainLevelComposite(QName.valueOf(compositeName));
- } catch (Exception ex){
- // TODO - sort out exceptions passing across binding.sca
- logger.log(Level.SEVERE, ex.toString());
- }
-
+ node.addToDomainLevelComposite(QName.valueOf(compositeName));
}
public void start() throws NodeException {
- try {
- node.start();
- } catch (Exception ex){
- // TODO - sort out exceptions passing across binding.sca
- logger.log(Level.SEVERE, ex.toString());
- }
+ node.start();
}
public void stop() throws NodeException {
- try {
- node.stop();
- } catch (Exception ex){
- // TODO - sort out exceptions passing across binding.sca
- logger.log(Level.SEVERE, ex.toString());
- }
+ node.stop();
}
+
+ public void destroyNode() throws NodeException {
+ node.destroy();
+ }
// ComponentManagerService
Added: incubator/tuscany/java/sca/modules/node-impl/src/test/java/calculator/AddServiceUpdateImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/java/calculator/AddServiceUpdateImpl.java?rev=598264&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/node-impl/src/test/java/calculator/AddServiceUpdateImpl.java (added)
+++ incubator/tuscany/java/sca/modules/node-impl/src/test/java/calculator/AddServiceUpdateImpl.java Mon Nov 26 05:29:09 2007
@@ -0,0 +1,31 @@
+/*
+ * 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 calculator;
+
+/**
+ * An implementation of the Add service
+ */
+public class AddServiceUpdateImpl implements AddService {
+
+ public double add(double n1, double n2) {
+ System.out.println("AddService Update - add " + n1 + " and " + n2);
+ return n1 + n2;
+ }
+
+}
Added: incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainAPITestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainAPITestCase.java?rev=598264&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainAPITestCase.java (added)
+++ incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainAPITestCase.java Mon Nov 26 05:29:09 2007
@@ -0,0 +1,150 @@
+/*
+ * 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.node.impl;
+
+
+import javax.xml.namespace.QName;
+
+import junit.framework.Assert;
+
+import org.apache.tuscany.sca.domain.SCADomain;
+import org.apache.tuscany.sca.domain.SCADomainFactory;
+import org.apache.tuscany.sca.node.SCADomainFinder;
+import org.apache.tuscany.sca.node.SCANode;
+import org.apache.tuscany.sca.node.SCANodeFactory;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import calculator.AddService;
+import calculator.CalculatorService;
+
+/**
+ * Runs a distributed domain in a single VM by using and in memory
+ * implementation of the distributed domain
+ */
+public class DomainAPITestCase {
+
+ private static ClassLoader cl;
+ private static SCADomain domain;
+ private static SCANode nodeA;
+ private static SCANode nodeB;
+ private static CalculatorService calculatorService;
+
+ @BeforeClass
+ public static void init() throws Exception {
+
+ try {
+ System.out.println("Setting up domain");
+
+ SCADomainFactory domainFactory = SCADomainFactory.newInstance();
+ domain = domainFactory.createSCADomain("http://localhost:9999");
+
+ System.out.println("Setting up nodes");
+
+ cl = DomainAPITestCase.class.getClassLoader();
+
+ SCANodeFactory nodeFactory = SCANodeFactory.newInstance();
+
+ nodeA = nodeFactory.createSCANode("http://localhost:8100/nodeA", "http://localhost:9999");
+ nodeB = nodeFactory.createSCANode("http://localhost:8200/nodeB", "http://localhost:9999");
+
+ } catch(Exception ex){
+ ex.printStackTrace();
+ }
+
+ }
+
+ @AfterClass
+ public static void destroy() throws Exception {
+ // destroy the domain
+ domain.destroy();
+ }
+
+ //@Test
+ public void testAddContribution() throws Exception {
+ try {
+ domain.addContribution("nodeD", cl.getResource("nodeD/"));
+ domain.addToDomainLevelComposite(new QName("http://sample", "CalculatorD"));
+ domain.startComposite(new QName("http://sample", "CalculatorD"));
+
+ calculatorService = domain.getService(CalculatorService.class, "CalculatorServiceComponentD");
+
+ Assert.assertEquals(calculatorService.add(3, 2), 5.0);
+ Assert.assertEquals(calculatorService.subtract(3, 2), 1.0);
+ Assert.assertEquals(calculatorService.multiply(3, 2), 6.0);
+ Assert.assertEquals(calculatorService.divide(3, 2), 1.5);
+
+ domain.removeContribution("nodeD");
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ Assert.fail();
+ }
+ }
+
+ //@Test
+ public void testAddDependentContribution() throws Exception {
+ try {
+ domain.addContribution("dependent", cl.getResource("calculatordependent/"));
+ domain.addContribution("primary", cl.getResource("calculatorprimary/"));
+ domain.addToDomainLevelComposite(new QName("http://primary", "CalculatorA"));
+ domain.startComposite(new QName("http://primary", "CalculatorA"));
+
+ calculatorService = domain.getService(CalculatorService.class, "CalculatorServiceComponentA");
+
+ Assert.assertEquals(calculatorService.add(3, 2), 5.0);
+ Assert.assertEquals(calculatorService.subtract(3, 2), 1.0);
+ Assert.assertEquals(calculatorService.multiply(3, 2), 6.0);
+ Assert.assertEquals(calculatorService.divide(3, 2), 1.5);
+
+ domain.removeContribution("primary");
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ Assert.fail();
+ }
+ }
+
+ @Test
+ public void testAddAndUpdateContribution() throws Exception {
+ try {
+ domain.addContribution("nodeA", cl.getResource("nodeA/"));
+ domain.addContribution("nodeB", cl.getResource("nodeB/"));
+ domain.addToDomainLevelComposite(new QName("http://sample", "CalculatorA"));
+ domain.addToDomainLevelComposite(new QName("http://sample", "CalculatorB"));
+ domain.startComposite(new QName("http://sample", "CalculatorA"));
+ domain.startComposite(new QName("http://sample", "CalculatorB"));
+
+ calculatorService = domain.getService(CalculatorService.class, "CalculatorServiceComponentA");
+
+ Assert.assertEquals(calculatorService.add(3, 2), 5.0);
+
+ domain.updateContribution("nodeB", cl.getResource("nodeBupdate/"));
+
+ Assert.assertEquals(calculatorService.add(3, 2), 5.0);
+
+ domain.removeContribution("nodeA");
+ domain.removeContribution("nodeB");
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ Assert.fail();
+ }
+ }
+
+}
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=598264&r1=598263&r2=598264&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 Mon Nov 26 05:29:09 2007
@@ -45,8 +45,9 @@
private static SCANodeFactory nodeFactory;
private static SCANode node;
+ private static CalculatorService calculatorServiceA;
+ private static CalculatorService calculatorServiceB;
private static CalculatorService calculatorServiceD;
- private static CalculatorService calculatorServiceB;
private static AddService addServiceD;
private static SubtractService subtractServiceC;
private static ClassLoader cl;
@@ -73,6 +74,7 @@
node.destroy();
}
+
@Test
public void testAddContributionAndStartNode() throws Exception {
node = nodeFactory.createSCANode("http://localhost:8200/node", null);
@@ -176,6 +178,29 @@
calculatorServiceD = node.getDomain().getService(CalculatorService.class, "CalculatorServiceComponentD");
Assert.assertEquals(calculatorServiceD.add(3, 2), 5.0);
+
+ // stop and remove all the contributions to date
+ node.stop();
+ node.removeContribution("nodeB");
+ node.removeContribution("nodeC");
+ node.removeContribution("nodeD");
+ }
+
+ @Test
+ public void testAddDepdendentContributions() throws Exception {
+ node = nodeFactory.createSCANode("http://localhost:8200/node", null);
+
+ // add one contribution that depends on another
+ node.addContribution("dependent", cl.getResource("calculatordependent/"));
+ node.addContribution("primary", cl.getResource("calculatorprimary/"));
+ node.addToDomainLevelComposite(new QName("http://primary", "CalculatorA"));
+ node.start();
+ calculatorServiceA = node.getDomain().getService(CalculatorService.class, "CalculatorServiceComponentA");
+ Assert.assertEquals(calculatorServiceA.add(3, 2), 5.0);
+ Assert.assertEquals(calculatorServiceA.subtract(3, 2), 1.0);
+ Assert.assertEquals(calculatorServiceA.multiply(3, 2), 6.0);
+ Assert.assertEquals(calculatorServiceA.divide(3, 2), 1.5);
}
+
}
Added: incubator/tuscany/java/sca/modules/node-impl/src/test/resources/calculatordependent/Calculator.composite
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/resources/calculatordependent/Calculator.composite?rev=598264&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/node-impl/src/test/resources/calculatordependent/Calculator.composite (added)
+++ incubator/tuscany/java/sca/modules/node-impl/src/test/resources/calculatordependent/Calculator.composite Mon Nov 26 05:29:09 2007
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ targetNamespace="http://dependent"
+ xmlns:dependent="http://dependent"
+ name="CalculatorB">
+
+ <component name="AddServiceComponentB">
+ <implementation.java class="calculator.AddServiceImpl" />
+ </component>
+
+ <component name="SubtractServiceComponentB">
+ <implementation.java class="calculator.SubtractServiceImpl" />
+ </component>
+
+</composite>
Added: incubator/tuscany/java/sca/modules/node-impl/src/test/resources/calculatorprimary/Calculator.composite
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/resources/calculatorprimary/Calculator.composite?rev=598264&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/node-impl/src/test/resources/calculatorprimary/Calculator.composite (added)
+++ incubator/tuscany/java/sca/modules/node-impl/src/test/resources/calculatorprimary/Calculator.composite Mon Nov 26 05:29:09 2007
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ targetNamespace="http://primary"
+ xmlns:primary="http://primary"
+ xmlns:dependent="http://dependent"
+ name="CalculatorA">
+
+ <include name="dependent:CalculatorB"/>
+
+ <component name="CalculatorServiceComponentA">
+ <implementation.java class="calculator.CalculatorServiceImpl"/>
+ <service name="CalculatorService">
+ <binding.sca/>
+ </service>
+ <reference name="addService" target="AddServiceComponentB" />
+ <reference name="subtractService" target="SubtractServiceComponentB" />
+ <reference name="multiplyService" target="MultiplyServiceComponentA"/>
+ <reference name="divideService" target="DivideServiceComponentA" />
+ </component>
+
+ <component name="MultiplyServiceComponentA">
+ <implementation.java class="calculator.MultiplyServiceImpl" />
+ </component>
+
+ <component name="DivideServiceComponentA">
+ <implementation.java class="calculator.DivideServiceImpl" />
+ </component>
+
+</composite>
Modified: incubator/tuscany/java/sca/modules/node/src/main/java/org/apache/tuscany/sca/node/management/SCANodeManagerService.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node/src/main/java/org/apache/tuscany/sca/node/management/SCANodeManagerService.java?rev=598264&r1=598263&r2=598264&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node/src/main/java/org/apache/tuscany/sca/node/management/SCANodeManagerService.java (original)
+++ incubator/tuscany/java/sca/modules/node/src/main/java/org/apache/tuscany/sca/node/management/SCANodeManagerService.java Mon Nov 26 05:29:09 2007
@@ -26,6 +26,7 @@
import org.apache.tuscany.sca.domain.SCADomain;
import org.apache.tuscany.sca.node.NodeException;
+import org.osoa.sca.annotations.OneWay;
import org.osoa.sca.annotations.Remotable;
@@ -76,5 +77,12 @@
* Stop the SCA node service.
*/
public void stop() throws NodeException;
+
+ /**
+ * Destroy the SCA node service. destroyNode rather than just destroy
+ * as the WSDL processing struggles with methods called destroy
+ */
+ @OneWay
+ public void destroyNode() throws NodeException;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org