Author: antelder
Date: Sun Jul 30 02:31:46 2006
New Revision: 426880
URL: http://svn.apache.org/viewvc?rev=426880&view=rev
Log:
Flesh out the impl so that the helloworld sample runs (almost). The problems
were mainly due to problems with the JavaScriptComponentType and
JavaScriptImplementation classes.
This still wont run a sample without manually hacking the Launcher to add
JavaScript to the system.scdl
Added:
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentTypeLoader.java
Modified:
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentBuilder.java
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementation.java
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementationLoader.java
Modified:
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentBuilder.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentBuilder.java?rev=426880&r1=426879&r2=426880&view=diff
==============================================================================
---
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentBuilder.java
(original)
+++
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentBuilder.java
Sun Jul 30 02:31:46 2006
@@ -18,8 +18,6 @@
/**
* Extension point for creating [EMAIL PROTECTED] JavaScriptComponent}s from
an assembly configuration
- *
- * @version $$Rev: 424027 $$ $$Date: 2006-07-20 20:26:20 +0100 (Thu, 20 Jul
2006) $$
*/
public class JavaScriptComponentBuilder extends
ComponentBuilderExtension<JavaScriptImplementation> {
@@ -28,11 +26,8 @@
}
@SuppressWarnings("unchecked")
- public Component<?> build(CompositeComponent<?> parent,
- ComponentDefinition<JavaScriptImplementation>
componentDefinition,
- DeploymentContext deploymentContext)
- throws BuilderConfigException {
-
+ public Component<?> build(CompositeComponent<?> parent,
ComponentDefinition<JavaScriptImplementation> componentDefinition,
+ DeploymentContext deploymentContext) throws BuilderConfigException
{
String name = componentDefinition.getName();
JavaScriptImplementation implementation =
componentDefinition.getImplementation();
@@ -45,12 +40,15 @@
services.add(serviceDefinition.getServiceContract().getInterfaceClass());
}
-
String script = implementation.getScript();
RhinoScript rhinoScript = new RhinoScript(name, script);
+ //TODO properties
Map<String, Object> properties = new HashMap<String, Object>();
- ScopeContainer scopeContainer =
scopeRegistry.getScopeContainer(componentType.getLifecycleScope());
+
+ // TODO scopes
+ // ScopeContainer scopeContainer =
scopeRegistry.getScopeContainer(componentType.getLifecycleScope());
+ ScopeContainer scopeContainer = deploymentContext.getModuleScope();
return new JavaScriptComponent(name, rhinoScript, services,
properties, parent, scopeContainer, wireService);
}
Added:
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentTypeLoader.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentTypeLoader.java?rev=426880&view=auto
==============================================================================
---
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentTypeLoader.java
(added)
+++
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentTypeLoader.java
Sun Jul 30 02:31:46 2006
@@ -0,0 +1,106 @@
+/**
+ *
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * Licensed 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.container.javascript;
+
+import java.net.URL;
+
+import org.apache.tuscany.core.implementation.IntrospectionRegistry;
+import org.apache.tuscany.core.implementation.JavaServiceContract;
+import org.apache.tuscany.core.implementation.ProcessingException;
+import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.extension.ComponentTypeLoaderExtension;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.model.ServiceDefinition;
+import org.osoa.sca.annotations.Constructor;
+
+/**
+ * @version $Rev: 423297 $ $Date: 2006-07-19 00:56:32 +0100 (Wed, 19 Jul 2006)
$
+ */
+public class JavaScriptComponentTypeLoader extends
ComponentTypeLoaderExtension<JavaScriptImplementation> {
+ // private Introspector introspector;
+
+ @Constructor( { "registry", "introspector" })
+ public JavaScriptComponentTypeLoader(@Autowire LoaderRegistry
loaderRegistry, @Autowire IntrospectionRegistry introspector) {
+ super(loaderRegistry);
+ // this.introspector = introspector;
+ }
+
+ @Override
+ protected Class<JavaScriptImplementation> getImplementationClass() {
+ return JavaScriptImplementation.class;
+ }
+
+ public void load(CompositeComponent<?> parent, JavaScriptImplementation
implementation, DeploymentContext deploymentContext)
+ throws LoaderException {
+ String scriptName = implementation.getScriptName();
+ URL resource =
implementation.getClassLoader().getResource(getBaseName(scriptName) +
".componentType");
+ if (resource == null) {
+ throw new RuntimeException("can't find .componentType side file
for " + getBaseName(scriptName));
+ }
+
+ JavaScriptComponentType componentType =
createDummyComponentType(implementation);
+ // if (resource == null) {
+ // componentType = loadByIntrospection(parent, implementation,
deploymentContext);
+ // } else {
+ // componentType = loadFromSidefile(resource, deploymentContext);
+ // }
+
+ implementation.setComponentType(componentType);
+ }
+
+ @SuppressWarnings("unchecked")
+ private JavaScriptComponentType
createDummyComponentType(JavaScriptImplementation implementation) {
+ JavaScriptComponentType componentType = new JavaScriptComponentType();
+ ServiceDefinition service = new ServiceDefinition();
+ ServiceContract sc = new JavaServiceContract();
+ try {
+ sc.setInterfaceClass(Class.forName("helloworld.HelloWorldService",
true, implementation.getClassLoader()));
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ service.setServiceContract(sc);
+ componentType.add(service);
+ return componentType;
+ }
+
+ protected JavaScriptComponentType
loadByIntrospection(CompositeComponent<?> parent, JavaScriptImplementation
implementation,
+ DeploymentContext deploymentContext) throws ProcessingException {
+ // PojoComponentType componentType = new PojoComponentType();
+ // Class<?> implClass = implementation.getImplementationClass();
+ // introspector.introspect(parent, implClass, componentType,
deploymentContext);
+ // return componentType;
+ return null;
+ }
+
+ protected JavaScriptComponentType loadFromSidefile(URL url,
DeploymentContext deploymentContext) throws LoaderException {
+ return loaderRegistry.load(null, url, JavaScriptComponentType.class,
deploymentContext);
+ }
+
+ private String getBaseName(String scriptName) {
+ String baseName = scriptName;
+ int lastDot = baseName.lastIndexOf('.');
+ if (lastDot != -1) {
+ baseName = baseName.substring(0, lastDot);
+ }
+ return baseName;
+ }
+
+}
Modified:
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementation.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementation.java?rev=426880&r1=426879&r2=426880&view=diff
==============================================================================
---
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementation.java
(original)
+++
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementation.java
Sun Jul 30 02:31:46 2006
@@ -24,6 +24,9 @@
public class JavaScriptImplementation extends
AtomicImplementation<JavaScriptComponentType> {
private String script;
+ private String scriptName;
+ private ClassLoader cl;
+ private JavaScriptComponentType componentType;
/**
* Returns the JavaScript source to be executed.
@@ -39,4 +42,27 @@
this.script = script;
}
+ public JavaScriptComponentType getComponentType() {
+ return componentType;
+ }
+
+ public void setComponentType(JavaScriptComponentType componentType) {
+ this.componentType = componentType;
+ }
+
+ public String getScriptName() {
+ return scriptName;
+ }
+
+ public void setScriptName(String scriptName) {
+ this.scriptName = scriptName;
+ }
+
+ public ClassLoader getClassLoader() {
+ return cl;
+ }
+
+ public void setClassLoader(ClassLoader cl) {
+ this.cl = cl;
+ }
}
Modified:
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementationLoader.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementationLoader.java?rev=426880&r1=426879&r2=426880&view=diff
==============================================================================
---
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementationLoader.java
(original)
+++
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptImplementationLoader.java
Sun Jul 30 02:31:46 2006
@@ -25,6 +25,7 @@
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
+import org.apache.tuscany.spi.annotation.Autowire;
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.extension.LoaderExtension;
@@ -32,14 +33,16 @@
import org.apache.tuscany.spi.loader.LoaderRegistry;
import org.apache.tuscany.spi.loader.LoaderUtil;
import org.apache.tuscany.spi.loader.MissingResourceException;
+import org.osoa.sca.annotations.Constructor;
/**
- * Loader for handling JavaScript <js:implementation> elements.
+ * Loader for handling JavaScript <js:implementation.js> elements.
*/
public class JavaScriptImplementationLoader extends
LoaderExtension<JavaScriptImplementation> {
- private static final QName IMPLEMENTATION_JAVASCRIPT = new
QName("http://tuscany.apache.org/xmlns/js/1.0", "implementation");
+ private static final QName IMPLEMENTATION_JAVASCRIPT = new
QName("http://tuscany.apache.org/xmlns/js/1.0", "implementation.js");
- public JavaScriptImplementationLoader(LoaderRegistry registry) {
+ @Constructor({"registry"})
+ public JavaScriptImplementationLoader(@Autowire LoaderRegistry registry) {
super(registry);
}
@@ -54,12 +57,16 @@
if (script == null) {
throw new MissingResourceException("No script supplied");
}
- String source = loadSource(deploymentContext.getClassLoader(), script);
+
+ ClassLoader cl = deploymentContext.getClassLoader();
+ String source = loadSource(cl, script);
LoaderUtil.skipToEndElement(reader);
JavaScriptImplementation implementation = new
JavaScriptImplementation();
implementation.setScript(source);
+ implementation.setScriptName(script);
+ implementation.setClassLoader(cl);
registry.loadComponentType(parent, implementation, deploymentContext);
return implementation;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]