Author: donsez
Date: Thu Dec 6 14:47:04 2007
New Revision: 601892
URL: http://svn.apache.org/viewvc?rev=601892&view=rev
Log:
add a component manager for javax.script engines of the Java Platform 6.0
rename org.apache.felix.sandbox.sosoc.manager.javascript in
org.apache.felix.sandbox.sosoc.manager.rhino
Added:
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/rhino/
- copied from r601740,
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/javascript/
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/ScriptComponentManager.java
(with props)
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/ScriptComponentReferenceManager.java
(with props)
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/ScriptContainer.java
(with props)
felix/sandbox/donsez/sosoc/src/site/component.hotdog.vendor.xml (with
props)
felix/sandbox/donsez/sosoc/src/site/component.runnable6.xml (with props)
Removed:
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/javascript/
Modified:
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/SOSOCActivator.java
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/rhino/JavaScriptComponentManager.java
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/rhino/JavaScriptComponentReferenceManager.java
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/rhino/JavaScriptContainer.java
felix/sandbox/donsez/sosoc/src/site/index.html
felix/sandbox/donsez/sosoc/src/site/script.txt
Modified:
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/SOSOCActivator.java
URL:
http://svn.apache.org/viewvc/felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/SOSOCActivator.java?rev=601892&r1=601891&r2=601892&view=diff
==============================================================================
---
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/SOSOCActivator.java
(original)
+++
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/SOSOCActivator.java
Thu Dec 6 14:47:04 2007
@@ -40,7 +40,8 @@
import org.apache.felix.sandbox.sosoc.manager.ComponentManager;
import org.apache.felix.sandbox.sosoc.manager.LoggerImpl;
import org.apache.felix.sandbox.sosoc.manager.java.JavaComponentManager;
-import
org.apache.felix.sandbox.sosoc.manager.javascript.JavaScriptComponentManager;
+import org.apache.felix.sandbox.sosoc.manager.rhino.JavaScriptComponentManager;
+import org.apache.felix.sandbox.sosoc.manager.script.ScriptComponentManager;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
@@ -235,13 +236,17 @@
// create the instance manager for JavaScript component
componentManager = new
JavaScriptComponentManager(this, descriptor,m_logger,m_baseUrlStr);
} else {
-// componentManager = new
JSR223ComponentManager(this,descriptor,m_logger);
- throw new IllegalArgumentException(language+ "
components are not supported in this version");
+ // create the instance manager for Script component
(javax.script)
+ componentManager = new
ScriptComponentManager(this,descriptor,m_logger,m_baseUrlStr);
}
-
+// else {
+// throw new IllegalArgumentException(language+ "
components are not supported in this version");
+// }
if (componentManager != null) {
// start managing lifecycle
componentManager.validate();
+ } else {
+ throw new IllegalArgumentException("can not instanciate
a manager for " +language+ " components");
}
}
Modified:
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/rhino/JavaScriptComponentManager.java
URL:
http://svn.apache.org/viewvc/felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/rhino/JavaScriptComponentManager.java?rev=601892&r1=601740&r2=601892&view=diff
==============================================================================
---
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/rhino/JavaScriptComponentManager.java
(original)
+++
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/rhino/JavaScriptComponentManager.java
Thu Dec 6 14:47:04 2007
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.felix.sandbox.sosoc.manager.javascript;
+package org.apache.felix.sandbox.sosoc.manager.rhino;
import java.lang.reflect.Proxy;
import java.net.MalformedURLException;
@@ -36,7 +36,7 @@
*/
public class JavaScriptComponentManager extends ComponentManager {
- JavaScriptContainer javaScriptContainer;
+ JavaScriptContainer container;
private String baseUrlStr;
@@ -90,12 +90,12 @@
}
}
- javaScriptContainer=new
JavaScriptContainer(scriptText,m_logger);
+ container=new JavaScriptContainer(scriptText,m_logger);
if(interfaces!=null){
- return Proxy.newProxyInstance(cl, interfaces,
javaScriptContainer);
+ return Proxy.newProxyInstance(cl, interfaces,
container);
} else {
- return javaScriptContainer;
+ return container;
}
}
Modified:
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/rhino/JavaScriptComponentReferenceManager.java
URL:
http://svn.apache.org/viewvc/felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/rhino/JavaScriptComponentReferenceManager.java?rev=601892&r1=601740&r2=601892&view=diff
==============================================================================
---
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/rhino/JavaScriptComponentReferenceManager.java
(original)
+++
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/rhino/JavaScriptComponentReferenceManager.java
Thu Dec 6 14:47:04 2007
@@ -17,9 +17,8 @@
* under the License.
*/
-package org.apache.felix.sandbox.sosoc.manager.javascript;
+package org.apache.felix.sandbox.sosoc.manager.rhino;
-import org.apache.felix.sandbox.sosoc.SOSOCActivator;
import org.apache.felix.sandbox.sosoc.descriptor.xml.Reference;
import org.apache.felix.sandbox.sosoc.manager.ComponentManager;
import org.apache.felix.sandbox.sosoc.manager.Logger;
@@ -36,9 +35,7 @@
*/
class JavaScriptComponentReferenceManager extends ReferenceManager {
- JavaScriptComponentReferenceManager(
- ComponentManager javaScriptComponentManager, Reference
reference, Logger logger)
- throws Exception {
+ JavaScriptComponentReferenceManager(ComponentManager
javaScriptComponentManager, Reference reference, Logger logger) throws
Exception {
super(javaScriptComponentManager, reference, logger);
}
@@ -65,7 +62,7 @@
}
String methodName = reference.getBind();
if (methodName != null) {
-
((JavaScriptComponentManager)componentManager).javaScriptContainer
+
((JavaScriptComponentManager)componentManager).container
.bind(methodName, serviceReference,
proxy);
}
@@ -101,7 +98,7 @@
try {
String methodName = reference.getUnbind();
if (methodName != null)
-
((JavaScriptComponentManager)componentManager).javaScriptContainer
+
((JavaScriptComponentManager)componentManager).container
.unbind(methodName, serviceReference,
requiredService);
boundServices.remove(serviceReference);
Modified:
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/rhino/JavaScriptContainer.java
URL:
http://svn.apache.org/viewvc/felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/rhino/JavaScriptContainer.java?rev=601892&r1=601740&r2=601892&view=diff
==============================================================================
---
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/rhino/JavaScriptContainer.java
(original)
+++
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/rhino/JavaScriptContainer.java
Thu Dec 6 14:47:04 2007
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.felix.sandbox.sosoc.manager.javascript;
+package org.apache.felix.sandbox.sosoc.manager.rhino;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
Added:
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/ScriptComponentManager.java
URL:
http://svn.apache.org/viewvc/felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/ScriptComponentManager.java?rev=601892&view=auto
==============================================================================
---
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/ScriptComponentManager.java
(added)
+++
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/ScriptComponentManager.java
Thu Dec 6 14:47:04 2007
@@ -0,0 +1,106 @@
+/*
+ * 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.felix.sandbox.sosoc.manager.script;
+
+import java.lang.reflect.Proxy;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.apache.felix.sandbox.sosoc.SOSOCActivator;
+import org.apache.felix.sandbox.sosoc.descriptor.xml.Component;
+import org.apache.felix.sandbox.sosoc.descriptor.xml.Implementation;
+import org.apache.felix.sandbox.sosoc.descriptor.xml.Reference;
+import org.apache.felix.sandbox.sosoc.manager.ComponentManager;
+import org.apache.felix.sandbox.sosoc.manager.Logger;
+import org.apache.felix.sandbox.sosoc.manager.ReferenceManager;
+import org.apache.felix.sandbox.util.load.LoadUtils;
+
+/**
+ * @author <a href="mailto:[EMAIL PROTECTED]">Felix Project Team</a>
+ */
+public class ScriptComponentManager extends ComponentManager {
+
+ ScriptContainer container;
+
+ private String baseUrlStr;
+
+ public ScriptComponentManager(SOSOCActivator activator, Component
componentDescriptor, Logger logger, String baseUrlStr) throws Exception {
+ super(activator, componentDescriptor,logger);
+ this.baseUrlStr=baseUrlStr;
+ }
+
+ protected Object instanciateImplementorObject() throws Exception {
+
+ // load the text of the script
+ Implementation implementation =
componentDescription.getImplementation();
+ String scriptText = null;
+ if (implementation.getUrl() != null) {
+ String urlStr=implementation.getUrl();
+
+ URL url=null;
+ try {
+ url=new URL(urlStr);
+ } catch (MalformedURLException e) {
+ try {
+ if(baseUrlStr==null){
+ throw e;
+ }
+ url=new URL(new URL(baseUrlStr),urlStr);
+ } catch (MalformedURLException e1) {
+ throw e1;
+ }
+ }
+ scriptText = LoadUtils.loadAsUrl(url.toExternalForm());
+ } else if (implementation.getEntry() != null) {
+ scriptText =
LoadUtils.loadAsRessource(m_activator.getClass().getClassLoader(),
implementation.getEntry());
+ }
+
+ // text is appended to the external script texts
+ if (implementation.getText() != null) {
+ if(scriptText==null) {
+ scriptText = implementation.getText();
+ } else {
+ scriptText += implementation.getText();
+ }
+ }
+
+ String[] interfaceNames =
componentDescription.getServiceInterfaces();
+ ClassLoader cl = m_activator.getClass().getClassLoader();
+ Class[] interfaces=null;
+ if(interfaceNames!=null){
+ interfaces = new Class[interfaceNames.length];
+ for (int i = 0; i < interfaceNames.length; i++) {
+ interfaces[i] = cl.loadClass(interfaceNames[i]);
+ }
+ }
+
+ container = new
ScriptContainer(implementation.getLanguage(),scriptText,m_logger);
+
+ if(interfaces!=null){
+ return Proxy.newProxyInstance(cl, interfaces,
container);
+ } else {
+ return container;
+ }
+ }
+
+ protected ReferenceManager
instianciateReferenceManager(ComponentManager manager, Reference reference)
throws Exception {
+ return new ScriptComponentReferenceManager(this,
reference,m_logger);
+ }
+}
+
Propchange:
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/ScriptComponentManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/ScriptComponentReferenceManager.java
URL:
http://svn.apache.org/viewvc/felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/ScriptComponentReferenceManager.java?rev=601892&view=auto
==============================================================================
---
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/ScriptComponentReferenceManager.java
(added)
+++
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/ScriptComponentReferenceManager.java
Thu Dec 6 14:47:04 2007
@@ -0,0 +1,117 @@
+/*
+ * ServiceBinder - A mechanism to automate service binding in OSGi
+ * Copyright (C) 2002 Humberto Cervantes
+ *
+ * This program is licensed under the BSD Software License;
+ * refer to the LICENSE.txt file included with this program for details.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Contact: Humberto Cervantes ([EMAIL PROTECTED])
+ * Contributor(s): Richard S. Hall ([EMAIL PROTECTED])
+ *
+ **/
+
+package org.apache.felix.sandbox.sosoc.manager.script;
+
+import org.apache.felix.sandbox.sosoc.descriptor.xml.Reference;
+import org.apache.felix.sandbox.sosoc.manager.ComponentManager;
+import org.apache.felix.sandbox.sosoc.manager.Logger;
+import org.apache.felix.sandbox.sosoc.manager.ReferenceManager;
+import org.osgi.framework.ServiceReference;
+
+
+/**
+ * The ScriptComponentReferenceManager task is to listen to service events
+ * and to call the bind/unbind methods on a given object. It is also
responsible
+ * for requesting the unregistration of a service in case a dependency is
+ * broken.
+ */
+
+class ScriptComponentReferenceManager extends ReferenceManager {
+
+ ScriptComponentReferenceManager(ComponentManager componentManager,
Reference reference, Logger logger) throws Exception {
+ super(componentManager, reference, logger);
+ }
+
+ /**
+ * Call the bind method. In case there is an exception while calling the
+ * bind method, the service is not considered to be bound to the
instance
+ * object
+ *
+ * @param serviceReference
+ * A ServiceReference with the service that will be bound to
the
+ * instance object
+ * @return true if the call was successful, false otherwise
+ */
+ protected boolean callBindMethod(ServiceReference serviceReference) {
+ try {
+ Object requiredService =
componentManager.getBundleContext()
+ .getService(serviceReference);
+ Object proxy =
componentManager.proxyRequiredServiceObject(
+ requiredService, serviceReference,
reference);
+
+ if (proxy == null) {
+ // ignore a null return value from the proxy
method
+ proxy = requiredService;
+ }
+ String methodName = reference.getBind();
+ if (methodName != null) {
+
((ScriptComponentManager)componentManager).container
+ .bind(methodName, serviceReference,
proxy);
+ }
+
+ boundServices.put(serviceReference, proxy);
+
+ return true;
+ } catch (ClassCastException e) {
+ m_logger.error(this.getClass().getName() + " :
exception while invoking "
+ + reference.getBind() +
" :" + e);
+ e.printStackTrace();
+ } catch (Exception e) {
+ m_logger.error(this.getClass().getName() + " :
exception while invoking "
+ + reference.getBind() +
" :" + e);
+ e.printStackTrace();
+ }
+ return false;
+ }
+
+ /**
+ * Call the unbind method
+ *
+ * @param serviceReference
+ * A service reference corresponding to the service that
will be
+ * unbound
+ */
+ protected void callUnbindMethod(ServiceReference serviceReference) {
+ Object requiredService = boundServices.get(serviceReference);
+ if (requiredService == null) {
+ m_logger.error(this.getClass().getName() + " :
callUnbindMethod UNBINDING UNKNOWN SERVICE !!!!");
+ return;
+ }
+
+ try {
+ String methodName = reference.getUnbind();
+ if (methodName != null)
+
((ScriptComponentManager)componentManager).container
+ .unbind(methodName, serviceReference,
requiredService);
+
+ boundServices.remove(serviceReference);
+
componentManager.getBundleContext().ungetService(serviceReference);
+ } catch (ClassCastException e) {
+ m_logger.error(this.getClass().getName() + " :
exception while invoking "
+ + reference.getUnbind()
+ " :" + e);
+ e.printStackTrace();
+ } catch (Exception e) {
+ m_logger.error(this.getClass().getName() + " : exception while
invoking "
+ + reference.getUnbind() + " :"
+ e);
+ e.printStackTrace();
+ }
+ }
+
+ protected void setBindingMethods() throws Exception {
+ // do nothing
+ }
+}
\ No newline at end of file
Propchange:
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/ScriptComponentReferenceManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/ScriptContainer.java
URL:
http://svn.apache.org/viewvc/felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/ScriptContainer.java?rev=601892&view=auto
==============================================================================
---
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/ScriptContainer.java
(added)
+++
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/ScriptContainer.java
Thu Dec 6 14:47:04 2007
@@ -0,0 +1,179 @@
+/*
+ * 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.felix.sandbox.sosoc.manager.script;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+
+import javax.script.Bindings;
+import javax.script.Invocable;
+import javax.script.ScriptContext;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+
+import org.apache.felix.sandbox.sosoc.manager.Logger;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.component.ComponentContext;
+
+/**
+ * @author <a href="mailto:[EMAIL PROTECTED]">Felix Project Team</a>
+ */
+public class ScriptContainer implements InvocationHandler {
+
+ private static ScriptEngineManager manager = new ScriptEngineManager();
+
+ private String scriptText;
+
+ private Bindings bindings;
+
+ private ScriptEngine engine;
+
+ private ScriptContext scriptContext;
+
+ private String language;
+
+ private Logger m_logger;
+
+ public ScriptContainer(String language, String scriptText, Logger
logger) throws Exception {
+ this.scriptText = scriptText;
+ this.m_logger = logger;
+ // Return script engine by name
+ engine = manager.getEngineByName(language);
+
+ if (engine == null)
+ throw new Exception(
+ "Could not create objects from an
unknown script language :"
+ + language);
+
+ scriptContext = engine.getContext();
+ bindings=engine.getBindings(ScriptContext.ENGINE_SCOPE);
+ scriptContext.setBindings(bindings,ScriptContext.ENGINE_SCOPE);
+ engine.eval(this.scriptText);
+ }
+
+ /**
+ * stop the manager
+ */
+ private void stop() {
+ scriptContext = null;
+ engine=null;
+ bindings=null;
+ }
+
+ /**
+ * activate the call the activate() function if it exists in the script
+ */
+ /* synchronized */public void activate(ComponentContext
componentContext) {
+ m_logger.trace(this.getClass().getName() + ":call activate");
+ try {
+ ((Invocable)engine).invokeFunction("activate",new
Object[]{componentContext});
+ } catch (ScriptException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (NoSuchMethodException e) {
+ // do nothing
+ }
+ }
+
+ /**
+ * call the deactivate() function if it exists in the script
+ */
+ /* synchronized */public void deactivate(ComponentContext
componentContext) {
+ m_logger.trace(this.getClass().getName() + ":call deactivate");
+ try {
+ ((Invocable)engine).invokeFunction("deactivate",new
Object[]{componentContext});
+ } catch (ScriptException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (NoSuchMethodException e) {
+ // do nothing
+ }
+ stop();
+ }
+
+ /**
+ * call the binding function in the script
+ *
+ * @param methodName
+ * the name of the binding function
+ * @param serviceReference
+ * the service reference
+ * @param service
+ * the object that provides the service
+ * @throws NoSuchMethodException
+ */
+ /* synchronized */public void bind(String methodName,
+ ServiceReference serviceReference, Object service)
+ throws NoSuchMethodException {
+ m_logger.trace(this.getClass().getName() + ":call bind for "
+ + methodName);
+ // 2 cases : ServiceReference (TODO), the object
+
+ try {
+ ((Invocable)engine).invokeFunction(methodName, new
Object[]{service});
+ } catch (ScriptException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (NoSuchMethodException e) {
+ throw e;
+ }
+ }
+
+ /**
+ * call the unbinding function in the script
+ *
+ * @param methodName
+ * the name of the unbinding function
+ * @param serviceReference
+ * the service reference
+ * @param service
+ * the object that provides the service
+ * @throws NoSuchMethodException
+ */
+ /* synchronized */public void unbind(String methodName,
+ ServiceReference serviceReference, Object service)
+ throws NoSuchMethodException {
+ m_logger.trace(this.getClass().getName() + ":call bind for "+
methodName);
+ // 2 cases : ServiceReference (TODO), the object
+
+ try {
+ ((Invocable)engine).invokeFunction(methodName,new
Object[]{service});
+ } catch (ScriptException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (NoSuchMethodException e) {
+ throw e;
+ }
+ }
+
+ /**
+ * call the function in the script corresponding to the called method
on the
+ * service object
+ *
+ * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object,
+ * java.lang.reflect.Method, java.lang.Object[])
+ */
+ /* synchronized */public Object invoke(Object proxy, Method
meth,Object[] args) throws Throwable {
+
+ String methodName = meth.getName();
+ m_logger.trace(this.getClass().getName() + ":call method " +
methodName);
+ return ((Invocable)engine).invokeFunction(meth.getName(),args);
+ }
+}
Propchange:
felix/sandbox/donsez/sosoc/src/main/java/org/apache/felix/sandbox/sosoc/manager/script/ScriptContainer.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: felix/sandbox/donsez/sosoc/src/site/component.hotdog.vendor.xml
URL:
http://svn.apache.org/viewvc/felix/sandbox/donsez/sosoc/src/site/component.hotdog.vendor.xml?rev=601892&view=auto
==============================================================================
--- felix/sandbox/donsez/sosoc/src/site/component.hotdog.vendor.xml (added)
+++ felix/sandbox/donsez/sosoc/src/site/component.hotdog.vendor.xml Thu Dec 6
14:47:04 2007
@@ -0,0 +1,65 @@
+<?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.
+-->
+<!-- Component Description used by SOSOC -->
+<!--
+ * @author <a href="mailto:[EMAIL PROTECTED]">Felix Project Team</a>
+-->
+<!-- July 17 2005 -->
+
+// see Snackbar tutorial http://www.plop-plop.net/eOSGi/index.php?title=TP2
+<component name="sosoc.snackbar.hotdogvendor">
+ <implementation language="javascript" url="./hotdog.vendor.js"/>
+
+ <service>
+ <provide
interface="eosgi.snackbar.service.vendor.VendorService"/>
+ </service>
+
+ <property value="type" name="hotdog" type="string" />
+
+ <!-- Required services -->
+ <reference name="LOG"
+ interface="org.osgi.service.log.LogService"
+ cardinality="0..1"
+ policy="dynamic"
+ bind="bindLogService"
+ unbind="unbindLogService"
+ />
+
+ <!-- Required services -->
+ <reference name="WEINER"
+ interface="eosgi.snackbar.service.vendor.VendorService"
+ target="(type=weiner)"
+ cardinality="1..1"
+ policy="dynamic"
+ bind="bindWeinerVendorService"
+ unbind="unbindWeinerVendorService"
+ />
+
+ <!-- Required services -->
+ <reference name="BUN"
+ interface="eosgi.snackbar.service.vendor.VendorService"
+ target="(type=bun)"
+ cardinality="1..1"
+ policy="dynamic"
+ bind="bindBunVendorService"
+ unbind="unbindBunVendorService"
+ />
+
+</component>
Propchange: felix/sandbox/donsez/sosoc/src/site/component.hotdog.vendor.xml
------------------------------------------------------------------------------
svn:eol-style = native
Added: felix/sandbox/donsez/sosoc/src/site/component.runnable6.xml
URL:
http://svn.apache.org/viewvc/felix/sandbox/donsez/sosoc/src/site/component.runnable6.xml?rev=601892&view=auto
==============================================================================
--- felix/sandbox/donsez/sosoc/src/site/component.runnable6.xml (added)
+++ felix/sandbox/donsez/sosoc/src/site/component.runnable6.xml Thu Dec 6
14:47:04 2007
@@ -0,0 +1,53 @@
+<?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.
+-->
+<!-- Component Description used by SOSOC -->
+<!--
+ * @author <a href="mailto:[EMAIL PROTECTED]">Felix Project Team</a>
+-->
+<!-- July 17 2005 -->
+
+<component name="sosoc.bench.server">
+ <implementation language="js"><![CDATA[
+
+ function run(){
+ // do nothing
+ }
+
+ // Lifecycle functions
+ function activate(){
+ // do something
+
java.lang.System.out.println("sosoc.bench.server: call activate() function");
+ }
+
+ function deactivate(){
+
java.lang.System.out.println("sosoc.bench.server: call deactivate() function");
+ // do something
+ }
+
+ ]]></implementation>
+
+ <service>
+ <provide interface="java.lang.Runnable"/>
+ <!-- <provide interface="org.osgi.service.cm.ManagedService"/>
-->
+ </service>
+
+ <property value="service.pid" name="sosoc.bench.server" type="string"
/>
+
+</component>
Propchange: felix/sandbox/donsez/sosoc/src/site/component.runnable6.xml
------------------------------------------------------------------------------
svn:eol-style = native
Modified: felix/sandbox/donsez/sosoc/src/site/index.html
URL:
http://svn.apache.org/viewvc/felix/sandbox/donsez/sosoc/src/site/index.html?rev=601892&r1=601891&r2=601892&view=diff
==============================================================================
--- felix/sandbox/donsez/sosoc/src/site/index.html (original)
+++ felix/sandbox/donsez/sosoc/src/site/index.html Thu Dec 6 14:47:04 2007
@@ -106,14 +106,12 @@
<p id="todo">
<b>TODO (contributions are welcome)</b><br>
<ul>
-<li>TODO: add a "base" mechanism for URL completion: so, scripts file could
have a relative URL according to the component XML descriptor file</li>
<li>TODO: add append and prepend elements in implementation element : useful
to complete import (legacy) scripts</li>
<li>TODO: add field attribute in reference for direct IoD</li>
<li>TODO: use dynamic import to load scripting engine classes</li>
<li>TODO:
org.mozilla.javascript.Context.setErrorReporter(org.mozilla.javascript.ErrorReporter)
with XML start line</li>
<li>TODO: use org.mozilla.javascript.ContextFactory instead of
org.mozilla.javascript.Context</li>
<li>TODO: add manager for other scripting language : Groovy, PHP, Jython,
Jacl, BeanShell, NetRexx, JRuby, JudoScript, ObjectScript ... </li>
-<li>TODO: use JSR223 ("Scripting for the JavaTM Platform") for other scripting
language : Groovy, PHP, Jython, Jacl, BeanShell, NetRexx, JRuby, JudoScript,
ObjectScript ... </li>
<li>TODO: synchronization on bind/unbind and invoke in the
JavaScriptInstanceManager.ScriptComponent</li>
<li>TODO: use Apache BSF as in the ANT script task</li>
<li>TODO: object sharing between script components ?? useful or not</li>
@@ -123,6 +121,10 @@
</ul>
<ul>
+<li>DONE (06/12/2007): use JSR223 ("Scripting for the JavaTM Platform 6") for
other scripting language : Groovy, PHP, Jython, Jacl, BeanShell, NetRexx,
JRuby, JudoScript, ObjectScript ... </li>
+<li>DONE (05/12/2007): rename SCRScript in SOSOC </li>
+<li>DONE (05/12/2007): append CDATA to the script located in the entry or url
attributes of the implementation element : useful to complete import (legacy)
scripts</li>
+<li>DONE (05/12/2007): add a "base" mechanism for URL completion: so, scripts
file could have a relative URL according to the component XML descriptor
file</li>
<li>DONE (26/07/2005): defines a service and a command to start and stop
scripts (embedded in the component description) from a URL (see <a
href="http://people.apache.org/~donsez/dev/osgi/sosoc">http://people.apache.org/~donsez/dev/osgi/sosoc</a></li>
<li>DONE (27/07/2005): provisioning the script outside the descriptor to ease
script writing (specialized editor plugin) and off-bundle debugging (thanks to
Rick Hall for his remark)</li>
<li>DONE (27/07/2005): <script language="javascript" res="echocmd.js"/>
when the script is provisioned in the bundle jar as a ressource</li>
Modified: felix/sandbox/donsez/sosoc/src/site/script.txt
URL:
http://svn.apache.org/viewvc/felix/sandbox/donsez/sosoc/src/site/script.txt?rev=601892&r1=601891&r2=601892&view=diff
==============================================================================
--- felix/sandbox/donsez/sosoc/src/site/script.txt (original)
+++ felix/sandbox/donsez/sosoc/src/site/script.txt Thu Dec 6 14:47:04 2007
@@ -9,7 +9,7 @@
sosoc
sosoc base
sosoc base file:C:\felix-svn\sandbox\donsez\sosoc\src\site\
-sosoc base file:F:\osgi\bundlefarm\sosoc\src\site\
+sosoc base file:F:\osgi\felix-sandbox-donsez-2\sosoc\src\site\
sosoc start component.echocmd.xml
echo Felix is great !
@@ -27,12 +27,24 @@
sosoc list
+sosoc prop sosoc.showtrace true
+sosoc start component.benchcmd.xml
+
sosoc prop sosoc.showtrace false
sosoc start component.runnable.xml
+bench 1000000
+REM with the rhino.JavaScriptComponentManager
+REM 3218 millisec. for 1000000 calls (3.218 microsec. per call)
+REM on [EMAIL PROTECTED], 2GB RAM, Java HotSpot(TM) Client VM (build
1.6.0_03-b05, mixed mode)
-sosoc prop sosoc.showtrace true
-sosoc start component.benchcmd.xml
+sosoc stop 5
+
+sosoc prop sosoc.showtrace false
+sosoc start component.runnable6.xml
bench 1000000
+REM with the script.ScriptComponentManager
+REM 89547 millisec. for 1000000 calls (89.547 microsec. per call) on
+REM on [EMAIL PROTECTED], 2GB RAM, Java HotSpot(TM) Client VM (build
1.6.0_03-b05, mixed mode)
services -a