summaryrefslogtreecommitdiffstats
path: root/branches/sca-java-0.90/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/DefaultSCADomain.java
diff options
context:
space:
mode:
Diffstat (limited to 'branches/sca-java-0.90/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/DefaultSCADomain.java')
-rw-r--r--branches/sca-java-0.90/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/DefaultSCADomain.java348
1 files changed, 0 insertions, 348 deletions
diff --git a/branches/sca-java-0.90/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/DefaultSCADomain.java b/branches/sca-java-0.90/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/DefaultSCADomain.java
deleted file mode 100644
index b2c33f81db..0000000000
--- a/branches/sca-java-0.90/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/DefaultSCADomain.java
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * 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.host.embedded.impl;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.xml.namespace.QName;
-
-import org.apache.tuscany.sca.assembly.AssemblyFactory;
-import org.apache.tuscany.sca.assembly.Component;
-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.contribution.Contribution;
-import org.apache.tuscany.sca.contribution.DeployedArtifact;
-import org.apache.tuscany.sca.contribution.resolver.impl.ModelResolverImpl;
-import org.apache.tuscany.sca.contribution.service.ContributionException;
-import org.apache.tuscany.sca.contribution.service.ContributionService;
-import org.apache.tuscany.sca.contribution.service.util.FileHelper;
-import org.apache.tuscany.sca.core.runtime.ActivationException;
-import org.apache.tuscany.sca.core.runtime.CompositeActivator;
-import org.apache.tuscany.sca.host.embedded.SCADomain;
-import org.osoa.sca.CallableReference;
-import org.osoa.sca.ComponentContext;
-import org.osoa.sca.Constants;
-import org.osoa.sca.ServiceReference;
-import org.osoa.sca.ServiceRuntimeException;
-
-/**
- * A default SCA domain facade implementation.
- *
- * @version $Rev$ $Date$
- */
-public class DefaultSCADomain extends SCADomain {
-
- private String uri;
- private String location;
- private String[] composites;
- private Composite domainComposite;
- private Contribution contribution;
- private Map<String, Component> components = new HashMap<String, Component>();
- private ReallySmallRuntime runtime;
-
- /**
- * Constructs a new domain facade.
- *
- * @param domainURI
- * @param contributionLocation
- * @param composites
- */
- public DefaultSCADomain(ClassLoader runtimeClassLoader,
- ClassLoader applicationClassLoader,
- String domainURI,
- String contributionLocation,
- String... composites) {
- this.uri = domainURI;
- this.location = contributionLocation;
- this.composites = composites;
-
- // Create and start the runtime
- runtime = new ReallySmallRuntime(runtimeClassLoader);
- try {
- runtime.start();
-
- } catch (ActivationException e) {
- throw new ServiceRuntimeException(e);
- }
-
- // Contribute the given contribution to an in-memory repository
- ContributionService contributionService = runtime.getContributionService();
- URL contributionURL;
- try {
- contributionURL = getContributionLocation(applicationClassLoader, location, this.composites);
- } catch (MalformedURLException e) {
- throw new ServiceRuntimeException(e);
- }
-
- try {
- ModelResolverImpl modelResolver = new ModelResolverImpl(applicationClassLoader);
- String contributionURI = FileHelper.getName(contributionURL.getPath());
- contribution = contributionService.contribute(contributionURI, contributionURL, modelResolver, false);
- } catch (ContributionException e) {
- throw new ServiceRuntimeException(e);
- } catch (IOException e) {
- throw new ServiceRuntimeException(e);
- }
-
- // Create an in-memory domain level composite
- AssemblyFactory assemblyFactory = runtime.getAssemblyFactory();
- domainComposite = assemblyFactory.createComposite();
- domainComposite.setName(new QName(Constants.SCA_NS, "domain"));
- domainComposite.setURI(domainURI);
-
- //when the deployable composites were specified when initializing the runtime
- if (composites != null && composites.length > 0 && composites[0].length() > 0) {
- // Include all specified deployable composites in the SCA domain
- Map<String, Composite> compositeArtifacts = new HashMap<String, Composite>();
- for (DeployedArtifact artifact : contribution.getArtifacts()) {
- if (artifact.getModel() instanceof Composite) {
- compositeArtifacts.put(artifact.getURI(), (Composite)artifact.getModel());
- }
- }
- for (String compositePath : composites) {
- Composite composite = compositeArtifacts.get(compositePath);
- if (composite == null) {
- throw new ServiceRuntimeException("Composite not found: " + compositePath);
- }
- domainComposite.getIncludes().add(composite);
- }
- } else {
- // in this case, a sca-contribution.xml should have been specified
- for(Composite composite : contribution.getDeployables()) {
- domainComposite.getIncludes().add(composite);
- }
-
- }
-
-
- // Activate and start the SCA domain composite
- CompositeActivator compositeActivator = runtime.getCompositeActivator();
- try {
- compositeActivator.activate(domainComposite);
- compositeActivator.start(domainComposite);
- } catch (ActivationException e) {
- throw new ServiceRuntimeException(e);
- }
-
- // Index the top level components
- for (Component component : domainComposite.getComponents()) {
- components.put(component.getName(), component);
- }
- }
-
- @Override
- public void close() {
-
- super.close();
-
- // Remove the contribution from the in-memory repository
- ContributionService contributionService = runtime.getContributionService();
- try {
- contributionService.remove(contribution.getURI());
- } catch (ContributionException e) {
- throw new ServiceRuntimeException(e);
- }
-
- // Stop the SCA domain composite
- CompositeActivator compositeActivator = runtime.getCompositeActivator();
- try {
- compositeActivator.stop(domainComposite);
- } catch (ActivationException e) {
- throw new ServiceRuntimeException(e);
-
- }
-
- // Stop the runtime
- try {
- runtime.stop();
- } catch (ActivationException e) {
- throw new ServiceRuntimeException(e);
- }
- }
-
- /**
- * Determine the location of a contribution, given a contribution path and a
- * list of composites.
- *
- * @param contributionPath
- * @param composites
- * @param classLoader
- * @return
- * @throws MalformedURLException
- */
- private URL getContributionLocation(ClassLoader classLoader, String contributionPath, String[] composites)
- throws MalformedURLException {
- if (contributionPath != null && contributionPath.length() > 0) {
- URI contributionURI = URI.create(contributionPath);
- if (contributionURI.isAbsolute() || composites.length == 0) {
- return new URL(contributionPath);
- }
- }
-
- String contributionArtifactPath = null;
- URL contributionArtifactURL = null;
- if (composites != null && composites.length > 0 && composites[0].length() > 0) {
-
- // Here the SCADomain was started with a reference to a composite file
- contributionArtifactPath = composites[0];
- contributionArtifactURL = classLoader.getResource(contributionArtifactPath);
- if (contributionArtifactURL == null) {
- throw new IllegalArgumentException("Composite not found: " + contributionArtifactPath);
- }
- } else {
-
- // Here the SCADomain was started without any reference to a composite file
- // We are going to look for an sca-contribution.xml or sca-contribution-generated.xml
- contributionArtifactPath = Contribution.SCA_CONTRIBUTION_META;
- contributionArtifactURL = classLoader.getResource(contributionArtifactPath);
-
- if( contributionArtifactURL == null ) {
- contributionArtifactPath = Contribution.SCA_CONTRIBUTION_GENERATED_META;
- contributionArtifactURL = classLoader.getResource(contributionArtifactPath);
- }
-
- // Look for META-INF/sca-deployables
- if (contributionArtifactURL == null) {
- contributionArtifactPath = Contribution.SCA_CONTRIBUTION_DEPLOYABLES;
- contributionArtifactURL = classLoader.getResource(contributionArtifactPath);
- }
- }
-
- if (contributionArtifactURL == null) {
- throw new IllegalArgumentException("Can't determine contribution deployables. Either specify a composite file, or use an sca-contribution.xml file to specify the deployables.");
- }
-
- URL contributionURL = null;
- // "jar:file://....../something.jar!/a/b/c/app.composite"
- try {
- String url = contributionArtifactURL.toExternalForm();
- String protocol = contributionArtifactURL.getProtocol();
- if ("file".equals(protocol)) {
- // directory contribution
- if (url.endsWith(contributionArtifactPath)) {
- String location = url.substring(0, url.lastIndexOf(contributionArtifactPath));
- // workaround from evil url/uri form maven
- contributionURL = FileHelper.toFile(new URL(location)).toURI().toURL();
- }
-
- } else if ("jar".equals(protocol)) {
- // jar contribution
- String location = url.substring(4, url.lastIndexOf("!/"));
- // workaround for evil url/uri from maven
- contributionURL = FileHelper.toFile(new URL(location)).toURI().toURL();
- }
- } catch (MalformedURLException mfe) {
- throw new IllegalArgumentException(mfe);
- }
-
- return contributionURL;
- }
-
- @Override
- public <B, R extends CallableReference<B>> R cast(B target) throws IllegalArgumentException {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public <B> B getService(Class<B> businessInterface, String serviceName) {
- ServiceReference<B> serviceReference = getServiceReference(businessInterface, serviceName);
- if (serviceReference == null) {
- throw new ServiceRuntimeException("Service not found: " + serviceName);
- }
- return serviceReference.getService();
- }
-
- @Override
- public <B> ServiceReference<B> getServiceReference(Class<B> businessInterface, String name) {
-
- // Extract the component name
- String componentName;
- String serviceName;
- int i = name.indexOf('/');
- if (i != -1) {
- componentName = name.substring(0, i);
- serviceName = name.substring(i + 1);
-
- } else {
- componentName = name;
- serviceName = null;
- }
-
- // Lookup the component in the domain
- Component component = components.get(componentName);
- if (component == null) {
- throw new ServiceRuntimeException("Component not found: " + componentName);
- }
- ComponentContext componentContext = null;
-
- // If the component is a composite, then we need to find the
- // non-composite
- // component that provides the requested service
- if (component.getImplementation() instanceof Composite) {
- ComponentService promotedService = null;
- for (ComponentService componentService : component.getServices()) {
- if (serviceName == null || serviceName.equals(componentService.getName())) {
-
- CompositeService compositeService = (CompositeService)componentService.getService();
- if (compositeService != null) {
- promotedService = compositeService.getPromotedService();
- SCABinding scaBinding = promotedService.getBinding(SCABinding.class);
- if (scaBinding != null) {
- Component promotedComponent = scaBinding.getComponent();
- if (serviceName != null) {
- serviceName = "$promoted$." + serviceName;
- }
- componentContext = (ComponentContext)promotedComponent;
- }
- }
- break;
- }
- }
- if (componentContext == null) {
- throw new ServiceRuntimeException("Composite service not found: " + name);
- }
- } else {
- componentContext = (ComponentContext)component;
- }
-
- ServiceReference<B> serviceReference;
- if (serviceName != null) {
- serviceReference = componentContext.createSelfReference(businessInterface, serviceName);
- } else {
- serviceReference = componentContext.createSelfReference(businessInterface);
- }
- return serviceReference;
-
- }
-
- @Override
- public String getURI() {
- return uri;
- }
-
-}