diff options
author | dims <dims@13f79535-47bb-0310-9956-ffa450edef68> | 2008-06-17 00:23:01 +0000 |
---|---|---|
committer | dims <dims@13f79535-47bb-0310-9956-ffa450edef68> | 2008-06-17 00:23:01 +0000 |
commit | bdd0a41aed7edf21ec2a65cfa17a86af2ef8c48a (patch) | |
tree | 38a92061c0793434c4be189f1d70c3458b6bc41d /sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java |
Move Tuscany from Incubator to top level.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@668359 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java')
7 files changed, 656 insertions, 0 deletions
diff --git a/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/DirectoryScanExtender.java b/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/DirectoryScanExtender.java new file mode 100644 index 0000000000..038df9e3b9 --- /dev/null +++ b/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/DirectoryScanExtender.java @@ -0,0 +1,64 @@ +/* + * 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.runtime.standalone.host; + +import java.io.File; + +import org.osoa.sca.annotations.EagerInit; +import org.osoa.sca.annotations.Init; +import org.osoa.sca.annotations.Property; +import org.osoa.sca.annotations.Reference; + +import org.apache.tuscany.spi.loader.IllegalSCDLNameException; +import org.apache.tuscany.spi.services.VoidService; + +import org.apache.tuscany.core.services.extension.AbstractExtensionDeployer; +import org.apache.tuscany.runtime.standalone.StandaloneRuntimeInfo; + +/** + * Service that extends the runtime by loading composites located in a directory. + * + * @version $Rev$ $Date$ + */ +@EagerInit +public class DirectoryScanExtender extends AbstractExtensionDeployer implements VoidService { + private final StandaloneRuntimeInfo runtimeInfo; + private final String path; + + public DirectoryScanExtender(@Reference StandaloneRuntimeInfo runtimeInfo, + @Property(name = "path")String path) { + this.runtimeInfo = runtimeInfo; + this.path = path; + } + + @Init + public void init() throws IllegalSCDLNameException { + assert runtimeInfo != null; + File extensionDir = new File(runtimeInfo.getInstallDirectory(), path); + if (!extensionDir.isDirectory()) { + // we don't have an extension directory, there's nothing to do + return; + } + + File[] files = extensionDir.listFiles(); + for (File file : files) { + deployExtension(file); + } + } +} diff --git a/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/StandaloneRuntimeImpl.java b/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/StandaloneRuntimeImpl.java new file mode 100644 index 0000000000..23811743e4 --- /dev/null +++ b/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/StandaloneRuntimeImpl.java @@ -0,0 +1,143 @@ +/* + * 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.runtime.standalone.host; + +import java.lang.reflect.InvocationTargetException; +import java.net.URI; +import java.net.URL; +import java.util.Collection; +import java.util.Map; + +import org.apache.tuscany.api.annotation.LogLevel; +import org.apache.tuscany.core.implementation.PojoWorkContextTunnel; +import org.apache.tuscany.core.monitor.JavaLoggingMonitorFactory; +import org.apache.tuscany.core.runtime.AbstractRuntime; +import org.apache.tuscany.core.component.SimpleWorkContext; +import org.apache.tuscany.runtime.standalone.StandaloneRuntime; +import org.apache.tuscany.runtime.standalone.StandaloneRuntimeInfo; +import org.apache.tuscany.runtime.standalone.host.implementation.launched.Launched; +import org.apache.tuscany.spi.component.Component; +import org.apache.tuscany.spi.component.ScopeContainer; +import org.apache.tuscany.spi.component.ScopeRegistry; +import org.apache.tuscany.spi.component.TargetInvokerCreationException; +import org.apache.tuscany.spi.component.WorkContext; +import org.apache.tuscany.spi.implementation.java.JavaMappedService; +import org.apache.tuscany.spi.implementation.java.PojoComponentType; +import org.apache.tuscany.spi.model.ComponentDefinition; +import org.apache.tuscany.spi.model.CompositeComponentType; +import org.apache.tuscany.spi.model.CompositeImplementation; +import org.apache.tuscany.spi.model.Implementation; +import org.apache.tuscany.spi.model.Operation; +import org.apache.tuscany.spi.model.Scope; +import org.apache.tuscany.spi.wire.TargetInvoker; + +/** + * @version $Rev$ $Date$ + */ +public class StandaloneRuntimeImpl extends AbstractRuntime<StandaloneRuntimeInfo> implements StandaloneRuntime { + JavaLoggingMonitorFactory monitorFactory; + StandaloneMonitor monitor; + + public StandaloneRuntimeImpl() { + super(StandaloneRuntimeInfo.class); + monitorFactory = new JavaLoggingMonitorFactory(); + setMonitorFactory(monitorFactory); + monitor = monitorFactory.getMonitor(StandaloneMonitor.class); + } + + /** + * Deploys the specified application SCDL and runs the lauched component within the deployed composite. + * + * @param applicationScdl Application SCDL that implements the composite. + * @param applicationClassLoader Classloader used to deploy the composite. + * @param args Arguments to be passed to the lauched component. + * @deprecated This is a hack for deployment and should be removed. + */ + public int deployAndRun(URL applicationScdl, ClassLoader applicationClassLoader, String[] args) throws Exception { + + URI compositeUri = new URI("/test/composite"); + URI compositeBase = new URI("/test/composite/"); + + CompositeImplementation impl = new CompositeImplementation(); + impl.setScdlLocation(applicationScdl); + impl.setClassLoader(applicationClassLoader); + + ComponentDefinition<CompositeImplementation> definition = + new ComponentDefinition<CompositeImplementation>(compositeUri, impl); + try { + Collection<Component> components = getDeployer().deploy(null, definition); + for (Component component : components) { + component.start(); + } + ScopeRegistry scopeRegistry = getScopeRegistry(); + ScopeContainer<URI> container = scopeRegistry.getScopeContainer(Scope.COMPOSITE); + container.startContext(compositeUri, compositeUri); + getWorkContext().setIdentifier(Scope.COMPOSITE, compositeUri); + WorkContext workContext = new SimpleWorkContext(); + workContext.setIdentifier(Scope.COMPOSITE, compositeUri); + PojoWorkContextTunnel.setThreadWorkContext(workContext); + try { + return run(impl, args, compositeBase, workContext); + } finally { + container.stopContext(compositeUri); + getWorkContext().setIdentifier(Scope.COMPOSITE, null); + } + } catch (Exception e) { + monitor.runError(e); + } + return -1; + + } + + private int run(CompositeImplementation impl, String[] args, URI compositeUri, WorkContext workContext) throws Exception { + CompositeComponentType<?, ?, ?> componentType = impl.getComponentType(); + Map<String, ComponentDefinition<? extends Implementation<?>>> components = componentType.getComponents(); + for (Map.Entry<String, ComponentDefinition<? extends Implementation<?>>> entry : components.entrySet()) { + String name = entry.getKey(); + ComponentDefinition<? extends Implementation<?>> launchedDefinition = entry.getValue(); + Implementation implementation = launchedDefinition.getImplementation(); + if (implementation.getClass().isAssignableFrom(Launched.class)) { + return run(compositeUri.resolve(name), implementation, args, workContext); + } + } + return -1; + } + + private int run(URI componentUri, Implementation implementation, String[] args, WorkContext workContext) + throws TargetInvokerCreationException, InvocationTargetException { + Launched launched = (Launched) implementation; + PojoComponentType launchedType = launched.getComponentType(); + Map services = launchedType.getServices(); + JavaMappedService testService = (JavaMappedService) services.get("main"); + Operation<?> operation = testService.getServiceContract().getOperations().get("main"); + Component component = getComponentManager().getComponent(componentUri); + TargetInvoker targetInvoker = component.createTargetInvoker("main", operation); + Object result = targetInvoker.invokeTarget(new Object[]{args}, TargetInvoker.NONE, workContext); + try { + return int.class.cast(result); + } catch (ClassCastException e) { + return 0; + } + } + + public interface StandaloneMonitor { + @LogLevel("SEVERE") + void runError(Exception e); + } +} diff --git a/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/implementation/launched/Launched.java b/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/implementation/launched/Launched.java new file mode 100644 index 0000000000..93771ee942 --- /dev/null +++ b/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/implementation/launched/Launched.java @@ -0,0 +1,51 @@ +/* + * 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.runtime.standalone.host.implementation.launched; + +import org.apache.tuscany.spi.implementation.java.PojoComponentType; +import org.apache.tuscany.spi.model.AtomicImplementation; + +/** + * @version $Rev$ $Date$ + */ +public class Launched extends AtomicImplementation<PojoComponentType> { + private String className; + private String factoryName; + + public Launched(String className, String factoryName) { + this.className = className; + this.factoryName = factoryName; + } + + public String getClassName() { + return className; + } + + public void setClassName(String className) { + this.className = className; + } + + public String getFactoryName() { + return factoryName; + } + + public void setFactoryName(String factoryName) { + this.factoryName = factoryName; + } +} diff --git a/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/implementation/launched/LaunchedComponentBuilder.java b/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/implementation/launched/LaunchedComponentBuilder.java new file mode 100644 index 0000000000..642076ca29 --- /dev/null +++ b/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/implementation/launched/LaunchedComponentBuilder.java @@ -0,0 +1,193 @@ +/* + * 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.runtime.standalone.host.implementation.launched; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Member; +import java.lang.reflect.Method; + +import org.osoa.sca.annotations.Reference; + +import org.apache.tuscany.spi.ObjectFactory; +import org.apache.tuscany.spi.builder.BuilderConfigException; +import org.apache.tuscany.spi.component.Component; +import org.apache.tuscany.spi.deployer.DeploymentContext; +import org.apache.tuscany.spi.extension.ComponentBuilderExtension; +import org.apache.tuscany.spi.host.ResourceHost; +import org.apache.tuscany.spi.implementation.java.ConstructorDefinition; +import org.apache.tuscany.spi.implementation.java.JavaMappedProperty; +import org.apache.tuscany.spi.implementation.java.JavaMappedReference; +import org.apache.tuscany.spi.implementation.java.JavaMappedService; +import org.apache.tuscany.spi.implementation.java.Parameter; +import org.apache.tuscany.spi.implementation.java.PojoComponentType; +import org.apache.tuscany.spi.implementation.java.Resource; +import org.apache.tuscany.spi.model.ComponentDefinition; +import org.apache.tuscany.spi.model.PropertyValue; + +import org.apache.tuscany.core.implementation.PojoConfiguration; +import org.apache.tuscany.core.implementation.java.JavaAtomicComponent; +import org.apache.tuscany.core.injection.MethodEventInvoker; +import org.apache.tuscany.core.injection.PojoObjectFactory; +import org.apache.tuscany.core.injection.ResourceObjectFactory; + +/** + * @version $Revsion$ $Date$ + * <p/> + * TODO This is a straight copy from the JUnit component builder + */ +public class LaunchedComponentBuilder extends ComponentBuilderExtension<Launched> { + + private ResourceHost host; + + @Reference + public void setHost(ResourceHost host) { + this.host = host; + } + + @Override + protected Class<Launched> getImplementationType() { + return Launched.class; + } + + @SuppressWarnings({"unchecked"}) + public Component build(ComponentDefinition<Launched> definition, DeploymentContext deployment) + throws BuilderConfigException { + PojoComponentType<JavaMappedService, JavaMappedReference, JavaMappedProperty<?>> componentType = + definition.getImplementation().getComponentType(); + Class<?> implClass = componentType.getImplClass(); + + PojoConfiguration configuration = new PojoConfiguration(); + if (definition.getInitLevel() != null) { + configuration.setInitLevel(definition.getInitLevel()); + } else { + configuration.setInitLevel(componentType.getInitLevel()); + } + if (componentType.getMaxAge() > 0) { + configuration.setMaxAge(componentType.getMaxAge()); + } else if (componentType.getMaxIdleTime() > 0) { + configuration.setMaxIdleTime(componentType.getMaxIdleTime()); + } + Method initMethod = componentType.getInitMethod(); + if (initMethod != null) { + configuration.setInitInvoker(new MethodEventInvoker(initMethod)); + } + Method destroyMethod = componentType.getDestroyMethod(); + if (destroyMethod != null) { + configuration.setDestroyInvoker(new MethodEventInvoker(destroyMethod)); + } + + configuration.setProxyService(proxyService); + configuration.setWorkContext(workContext); + configuration.setImplementationClass(implClass); + configuration.setGroupId(deployment.getGroupId()); + + // setup property injection sites + for (JavaMappedProperty<?> property : componentType.getProperties().values()) { + configuration.addPropertySite(property.getName(), property.getMember()); + } + + // setup reference injection sites + for (JavaMappedReference reference : componentType.getReferences().values()) { + Member member = reference.getMember(); + if (member != null) { + // could be null if the reference is mapped to a constructor + configuration.addReferenceSite(reference.getUri().getFragment(), member); + } + } + + for (Resource resource : componentType.getResources().values()) { + Member member = resource.getMember(); + if (member != null) { + // could be null if the resource is mapped to a constructor + configuration.addResourceSite(resource.getName(), member); + } + } + + // setup constructor injection + ConstructorDefinition<?> ctorDef = componentType.getConstructorDefinition(); + Constructor<?> constr = ctorDef.getConstructor(); + PojoObjectFactory<?> instanceFactory = new PojoObjectFactory(constr); + configuration.setInstanceFactory(instanceFactory); + configuration.setConstructor(ctorDef); + configuration.setName(definition.getUri()); + JavaAtomicComponent component = new JavaAtomicComponent(configuration); + + // handle properties + handleProperties(definition, component); + + // handle resources + handleResources(componentType, component); + + handleCallbackSites(componentType, configuration); + + if (componentType.getConversationIDMember() != null) { + component.addConversationIDFactory(componentType.getConversationIDMember()); + } + + return component; + } + + private void handleCallbackSites( + PojoComponentType<JavaMappedService, JavaMappedReference, JavaMappedProperty<?>> componentType, + PojoConfiguration configuration) { + for (JavaMappedService service : componentType.getServices().values()) { + // setup callback injection sites + if (service.getCallbackReferenceName() != null) { + // Only if there is a callback reference in the service + configuration.addCallbackSite(service.getCallbackReferenceName(), service.getCallbackMember()); + } + } + } + + @SuppressWarnings({"unchecked"}) + private void handleResources( + PojoComponentType<JavaMappedService, JavaMappedReference, JavaMappedProperty<?>> componentType, + JavaAtomicComponent component) { + + for (Resource resource : componentType.getResources().values()) { + ObjectFactory<?> objectFactory = resource.getObjectFactory(); + if (objectFactory != null) { + component.addResourceFactory(resource.getName(), objectFactory); + } else { + String name = resource.getName(); + boolean optional = resource.isOptional(); + Class<Object> type = (Class<Object>) resource.getType(); + ResourceObjectFactory<Object> factory; + String mappedName = resource.getMappedName(); + if (mappedName == null) { + // by type + factory = new ResourceObjectFactory<Object>(type, optional, host); + } else { + factory = new ResourceObjectFactory<Object>(type, mappedName, optional, host); + } + component.addResourceFactory(name, factory); + } + } + } + + private void handleProperties(ComponentDefinition<Launched> definition, JavaAtomicComponent component) { + for (PropertyValue<?> property : definition.getPropertyValues().values()) { + ObjectFactory<?> factory = property.getValueFactory(); + if (factory != null) { + component.addPropertyFactory(property.getName(), factory); + } + } + } + +} diff --git a/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/implementation/launched/LaunchedComponentTypeLoader.java b/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/implementation/launched/LaunchedComponentTypeLoader.java new file mode 100644 index 0000000000..c3575ae95b --- /dev/null +++ b/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/implementation/launched/LaunchedComponentTypeLoader.java @@ -0,0 +1,113 @@ +/* + * 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.runtime.standalone.host.implementation.launched; + +import java.lang.reflect.Type; +import java.net.URI; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.osoa.sca.annotations.Reference; + +import org.apache.tuscany.spi.deployer.DeploymentContext; +import org.apache.tuscany.spi.extension.ComponentTypeLoaderExtension; +import org.apache.tuscany.spi.implementation.java.IntrospectionRegistry; +import org.apache.tuscany.spi.implementation.java.Introspector; +import org.apache.tuscany.spi.implementation.java.JavaMappedProperty; +import org.apache.tuscany.spi.implementation.java.JavaMappedReference; +import org.apache.tuscany.spi.implementation.java.JavaMappedService; +import org.apache.tuscany.spi.implementation.java.PojoComponentType; +import org.apache.tuscany.spi.implementation.java.ProcessingException; +import org.apache.tuscany.spi.loader.LoaderException; +import org.apache.tuscany.spi.loader.LoaderRegistry; +import org.apache.tuscany.spi.loader.MissingResourceException; +import org.apache.tuscany.spi.model.DataType; +import org.apache.tuscany.spi.model.Operation; +import org.apache.tuscany.spi.model.ServiceContract; + +/** + * @version $Revision$ $Date$ + */ +public class LaunchedComponentTypeLoader extends ComponentTypeLoaderExtension<Launched> { + private static final URI SERVICE_NAME = URI.create("#main"); + private Introspector introspector; + + public LaunchedComponentTypeLoader(@Reference LoaderRegistry loaderRegistry, + @Reference IntrospectionRegistry introspector) { + super(loaderRegistry); + this.introspector = introspector; + } + + @Override + protected Class<Launched> getImplementationClass() { + return Launched.class; + } + + public void load( + Launched implementation, + DeploymentContext deploymentContext) throws LoaderException { + String className = implementation.getClassName(); + Class<?> implClass; + try { + implClass = deploymentContext.getClassLoader().loadClass(className); + } catch (ClassNotFoundException e) { + throw new MissingResourceException(className, e); + } + PojoComponentType componentType = loadByIntrospection(implementation, deploymentContext, implClass); + implementation.setComponentType(componentType); + } + + protected PojoComponentType loadByIntrospection( + Launched implementation, + DeploymentContext deploymentContext, + Class<?> implClass) throws ProcessingException { + PojoComponentType<JavaMappedService, JavaMappedReference, JavaMappedProperty<?>> componentType = + new PojoComponentType<JavaMappedService, JavaMappedReference, JavaMappedProperty<?>>(implClass); + introspector.introspect(implClass, componentType, deploymentContext); + + ServiceContract launchedContract = generateContract(implClass); + JavaMappedService testService = new JavaMappedService(SERVICE_NAME, launchedContract, false); + componentType.add(testService); + return componentType; + } + + private static final DataType<List<DataType<Type>>> INPUT_TYPE; + private static final DataType<Type> OUTPUT_TYPE; + private static final List<DataType<Type>> FAULT_TYPE; + + static { + List<DataType<Type>> paramDataTypes = new ArrayList<DataType<Type>>(); + //noinspection unchecked + paramDataTypes.add(new DataType(null, String[].class, String[].class)); + INPUT_TYPE = new DataType<List<DataType<Type>>>("idl:input", Object[].class, paramDataTypes); + OUTPUT_TYPE = new DataType<Type>(null, Object.class, Object.class); + FAULT_TYPE = Collections.emptyList(); + } + + protected ServiceContract generateContract(Class<?> implClass) { + Map<String, Operation<Type>> operations = new HashMap<String, Operation<Type>>(); + Operation<Type> operation = new Operation<Type>("main", INPUT_TYPE, OUTPUT_TYPE, FAULT_TYPE); + operations.put("main", operation); + return new LaunchedServiceContract(operations); + } + +} diff --git a/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/implementation/launched/LaunchedLoader.java b/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/implementation/launched/LaunchedLoader.java new file mode 100644 index 0000000000..7718e02838 --- /dev/null +++ b/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/implementation/launched/LaunchedLoader.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.runtime.standalone.host.implementation.launched; + +import javax.xml.namespace.QName; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; + +import org.osoa.sca.annotations.Reference; + +import org.apache.tuscany.spi.deployer.DeploymentContext; +import org.apache.tuscany.spi.extension.LoaderExtension; +import org.apache.tuscany.spi.loader.LoaderException; +import org.apache.tuscany.spi.loader.LoaderRegistry; +import org.apache.tuscany.spi.model.ModelObject; + +/** + * @version $Rev$ $Date$ + */ +public class LaunchedLoader extends LoaderExtension<Launched> { + private static final QName LAUNCHED = new QName("http://tuscany.apache.org/xmlns/sca/2.0-alpha", "launched"); + + public LaunchedLoader(@Reference LoaderRegistry registry) { + super(registry); + } + + public QName getXMLType() { + return LAUNCHED; + } + + public Launched load( + ModelObject object, + XMLStreamReader reader, + DeploymentContext deploymentContext) throws XMLStreamException, LoaderException { + String className = reader.getAttributeValue(null, "class"); + String factoryName = reader.getAttributeValue(null, "factory"); + return new Launched(className, factoryName); + } +} diff --git a/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/implementation/launched/LaunchedServiceContract.java b/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/implementation/launched/LaunchedServiceContract.java new file mode 100644 index 0000000000..820093917a --- /dev/null +++ b/sandbox/old/contrib/runtime-standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/implementation/launched/LaunchedServiceContract.java @@ -0,0 +1,37 @@ +/* + * 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.runtime.standalone.host.implementation.launched; + +import java.lang.reflect.Type; +import java.util.Map; + +import org.apache.tuscany.spi.model.Operation; +import org.apache.tuscany.spi.model.ServiceContract; + +/** + * @version $Revison$ $Date$ + * + */ +public class LaunchedServiceContract extends ServiceContract<Type> { + + public LaunchedServiceContract(Map<String, Operation<Type>> operations) { + setOperations(operations); + } +} + |