You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2006/08/01 18:39:55 UTC
svn commit: r427641 - in
/incubator/tuscany/java/sca/containers/container.javascript/src:
main/java/org/apache/tuscany/container/javascript/
test/java/org/apache/tuscany/container/javascript/function/
test/resources/org/apache/tuscany/container/javascr...
Author: antelder
Date: Tue Aug 1 09:39:54 2006
New Revision: 427641
URL: http://svn.apache.org/viewvc?rev=427641&view=rev
Log:
First cut at JavaScript introspection
This required fixing up the ComponentType code, it now uses the ComponentType class not a JavaScript specific ComponentType (though will need to revisit that to support scope and lifecycle)
Added an introspectable script testcase, see the testcase and IntrospectablehelloWorld.js for how introsepction works
Added:
incubator/tuscany/java/sca/containers/container.javascript/src/test/resources/org/apache/tuscany/container/javascript/function/IntrospectableHelloWorld.js
Removed:
incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentType.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/JavaScriptComponentTypeLoader.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
incubator/tuscany/java/sca/containers/container.javascript/src/test/java/org/apache/tuscany/container/javascript/function/HelloWorldTestCase.java
incubator/tuscany/java/sca/containers/container.javascript/src/test/resources/org/apache/tuscany/container/javascript/function/helloworld.scdl
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=427641&r1=427640&r2=427641&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 Tue Aug 1 09:39:54 2006
@@ -14,6 +14,7 @@
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.extension.ComponentBuilderExtension;
import org.apache.tuscany.spi.model.ComponentDefinition;
+import org.apache.tuscany.spi.model.ComponentType;
import org.apache.tuscany.spi.model.ServiceDefinition;
/**
@@ -31,7 +32,7 @@
String name = componentDefinition.getName();
JavaScriptImplementation implementation = componentDefinition.getImplementation();
- JavaScriptComponentType componentType = implementation.getComponentType();
+ ComponentType componentType = implementation.getComponentType();
// get list of services provided by this component
Collection<ServiceDefinition> collection = componentType.getServices().values();
@@ -40,8 +41,7 @@
services.add(serviceDefinition.getServiceContract().getInterfaceClass());
}
- String script = implementation.getScript();
- RhinoScript rhinoScript = new RhinoScript(name, script);
+ RhinoScript rhinoScript = implementation.getRhinoScript();
//TODO properties
Map<String, Object> properties = new HashMap<String, Object>();
Modified: 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=427641&r1=427640&r2=427641&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentTypeLoader.java (original)
+++ incubator/tuscany/java/sca/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/JavaScriptComponentTypeLoader.java Tue Aug 1 09:39:54 2006
@@ -18,7 +18,9 @@
import java.net.URL;
+import org.apache.tuscany.container.javascript.rhino.RhinoScript;
import org.apache.tuscany.core.implementation.IntrospectionRegistry;
+import org.apache.tuscany.core.implementation.Introspector;
import org.apache.tuscany.core.implementation.JavaServiceContract;
import org.apache.tuscany.core.implementation.ProcessingException;
import org.apache.tuscany.spi.annotation.Autowire;
@@ -27,15 +29,17 @@
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.ComponentType;
import org.apache.tuscany.spi.model.ServiceContract;
import org.apache.tuscany.spi.model.ServiceDefinition;
+import org.mozilla.javascript.Scriptable;
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;
+ private Introspector introspector;
@Constructor( { "registry", "introspector" })
public JavaScriptComponentTypeLoader(@Autowire LoaderRegistry loaderRegistry, @Autowire IntrospectionRegistry introspector) {
@@ -50,48 +54,50 @@
public void load(CompositeComponent<?> parent, JavaScriptImplementation implementation, DeploymentContext deploymentContext)
throws LoaderException {
- String scriptName = implementation.getScriptName();
+ String scriptName = implementation.getRhinoScript().getScriptName();
URL resource = implementation.getClassLoader().getResource(getBaseName(scriptName) + ".componentType");
+ ComponentType componentType;
if (resource == null) {
- throw new RuntimeException("can't find .componentType side file for " + getBaseName(scriptName));
+ componentType = loadByIntrospection(parent, implementation, deploymentContext);
+ if (componentType == null) {
+ throw new RuntimeException("must use .componentType side file or JS SCA variable definition");
+ }
+ } else {
+ componentType = loadFromSidefile(resource, deploymentContext);
}
- 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);
+ protected ComponentType loadByIntrospection(CompositeComponent<?> parent, JavaScriptImplementation implementation,
+ DeploymentContext deploymentContext) throws ProcessingException {
+ ComponentType componentType = null;
+
+ RhinoScript rhinoScript = implementation.getRhinoScript();
+ Scriptable scope = rhinoScript.getScriptScope();
+ Scriptable sca = (Scriptable) scope.get("SCA", scope);
+ if (sca != null) {
+ componentType = new ComponentType();
+
+ Object serviceClass = sca.get("serviceClass", scope);
+ if (serviceClass != null) {
+ ServiceDefinition service = new ServiceDefinition();
+ ServiceContract sc = new JavaServiceContract();
+ try {
+ sc.setInterfaceClass(Class.forName(serviceClass.toString(), true, implementation.getClassLoader()));
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ service.setServiceContract(sc);
+ componentType.add(service);
+ }
}
- 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;
+ return componentType;
}
- protected JavaScriptComponentType loadFromSidefile(URL url, DeploymentContext deploymentContext) throws LoaderException {
- return loaderRegistry.load(null, url, JavaScriptComponentType.class, deploymentContext);
+ protected ComponentType loadFromSidefile(URL url, DeploymentContext deploymentContext) throws LoaderException {
+ return loaderRegistry.load(null, url, ComponentType.class, deploymentContext);
}
private String getBaseName(String scriptName) {
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=427641&r1=427640&r2=427641&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 Tue Aug 1 09:39:54 2006
@@ -16,53 +16,40 @@
*/
package org.apache.tuscany.container.javascript;
+import org.apache.tuscany.container.javascript.rhino.RhinoScript;
import org.apache.tuscany.spi.model.AtomicImplementation;
+import org.apache.tuscany.spi.model.ComponentType;
/**
* Model object for a JavaScript implementation.
*/
-public class JavaScriptImplementation extends AtomicImplementation<JavaScriptComponentType> {
+public class JavaScriptImplementation extends AtomicImplementation<ComponentType> {
- private String script;
- private String scriptName;
+ private RhinoScript rhinoScript;
private ClassLoader cl;
- private JavaScriptComponentType componentType;
+ private ComponentType componentType;
- /**
- * Returns the JavaScript source to be executed.
- */
- public String getScript() {
- return script;
- }
-
- /**
- * Sets the JavaScript source to be executed.
- */
- public void setScript(String script) {
- this.script = script;
- }
-
- public JavaScriptComponentType getComponentType() {
+ public ComponentType getComponentType() {
return componentType;
}
- public void setComponentType(JavaScriptComponentType componentType) {
+ public void setComponentType(ComponentType 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;
+ }
+
+ public RhinoScript getRhinoScript() {
+ return rhinoScript;
+ }
+
+ public void setRhinoScript(RhinoScript rhinoScript) {
+ this.rhinoScript = rhinoScript;
}
}
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=427641&r1=427640&r2=427641&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 Tue Aug 1 09:39:54 2006
@@ -25,6 +25,7 @@
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
+import org.apache.tuscany.container.javascript.rhino.RhinoScript;
import org.apache.tuscany.spi.annotation.Autowire;
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.deployer.DeploymentContext;
@@ -64,8 +65,8 @@
LoaderUtil.skipToEndElement(reader);
JavaScriptImplementation implementation = new JavaScriptImplementation();
- implementation.setScript(source);
- implementation.setScriptName(script);
+ RhinoScript rhinoScript = new RhinoScript(script, source, null, cl);
+ implementation.setRhinoScript(rhinoScript);
implementation.setClassLoader(cl);
registry.loadComponentType(parent, implementation, deploymentContext);
return implementation;
Modified: incubator/tuscany/java/sca/containers/container.javascript/src/test/java/org/apache/tuscany/container/javascript/function/HelloWorldTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.javascript/src/test/java/org/apache/tuscany/container/javascript/function/HelloWorldTestCase.java?rev=427641&r1=427640&r2=427641&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.javascript/src/test/java/org/apache/tuscany/container/javascript/function/HelloWorldTestCase.java (original)
+++ incubator/tuscany/java/sca/containers/container.javascript/src/test/java/org/apache/tuscany/container/javascript/function/HelloWorldTestCase.java Tue Aug 1 09:39:54 2006
@@ -28,6 +28,7 @@
public class HelloWorldTestCase extends SCATestCase {
private HelloWorldService helloWorldService;
+ private HelloWorldService introspectableService;
protected void setUp() throws Exception {
addExtension("JavaScriptContainer", getClass().getClassLoader().getResource("META-INF/sca/default.scdl"));
@@ -36,9 +37,14 @@
CompositeContext context = CurrentCompositeContext.getContext();
helloWorldService = context.locateService(HelloWorldService.class, "HelloWorldComponent");
+ introspectableService = context.locateService(HelloWorldService.class, "IntrospectableHelloWorldComponent");
}
public void testHelloWorld() throws Exception {
assertEquals(helloWorldService.sayHello("petra"), "Hello petra");
+ }
+
+ public void testIntrospectedHelloWorld() throws Exception {
+ assertEquals(introspectableService.sayHello("petra"), "Hello petra");
}
}
Added: incubator/tuscany/java/sca/containers/container.javascript/src/test/resources/org/apache/tuscany/container/javascript/function/IntrospectableHelloWorld.js
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.javascript/src/test/resources/org/apache/tuscany/container/javascript/function/IntrospectableHelloWorld.js?rev=427641&view=auto
==============================================================================
--- incubator/tuscany/java/sca/containers/container.javascript/src/test/resources/org/apache/tuscany/container/javascript/function/IntrospectableHelloWorld.js (added)
+++ incubator/tuscany/java/sca/containers/container.javascript/src/test/resources/org/apache/tuscany/container/javascript/function/IntrospectableHelloWorld.js Tue Aug 1 09:39:54 2006
@@ -0,0 +1,7 @@
+SCA = {
+ 'serviceClass' : 'helloworld.HelloWorldService'
+}
+
+function sayHello(s) {
+ return "Hello " + s;
+}
Modified: incubator/tuscany/java/sca/containers/container.javascript/src/test/resources/org/apache/tuscany/container/javascript/function/helloworld.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.javascript/src/test/resources/org/apache/tuscany/container/javascript/function/helloworld.scdl?rev=427641&r1=427640&r2=427641&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.javascript/src/test/resources/org/apache/tuscany/container/javascript/function/helloworld.scdl (original)
+++ incubator/tuscany/java/sca/containers/container.javascript/src/test/resources/org/apache/tuscany/container/javascript/function/helloworld.scdl Tue Aug 1 09:39:54 2006
@@ -23,4 +23,8 @@
<js:implementation.js script="org/apache/tuscany/container/javascript/function/HelloWorld.js"/>
</component>
+ <component name="IntrospectableHelloWorldComponent">
+ <js:implementation.js script="org/apache/tuscany/container/javascript/function/IntrospectableHelloWorld.js"/>
+ </component>
+
</composite>
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org