I'd just miss understood what the module and class attributes where doing in the earlier email, could probably do something similar with JavaScript (though i'm not sure module is the best name for the attribute for JavaScript).
The scareference approach to avoiding the .componentType side file is also interesting. I've done something similar for JavaScript, see an old email [1], but i think this scareference approach seems nicer. This is being really useful as a contrast to how the JavaScript container works. Think i'll have a go at a python container for the Java runtime, that should be useful to see if you can easily move a composite between the Java and C++ runtimes. ...ant [1] http://mail-archives.apache.org/mod_mbox/ws-tuscany-dev/200608.mbox/[EMAIL PROTECTED] On 9/1/06, Jean-Sebastien Delfino <[EMAIL PROTECTED]> wrote:
Andrew Borley wrote: > On 9/1/06, ant elder <[EMAIL PROTECTED]> wrote: >> I've a couple of questions based on I'd like to also have a Python >> container >> for the Java runtime, and from the perspective of how the the existing >> JavaScript and Groovy containers work that we already have for the Java >> runtime. >> >> In the implementation.python element do you really need separate path >> and >> class attributes? This is likely because I don't know anything about >> Python >> or the C++ runtime work but for comparison a JavaScript impl looks like: >> >> <js:implementation.jsscript= "org/apache/tuscany/container/javascript/function/HelloWorld.js"/> >> > > We could probably do that - I was following the style of > implementation.cpp which uses the path attribute to find the .dll, > .componentType and .h files. In the Python case we need to find the > module (.py) and the .componentType file, so internally splitting > relative/path/to/MyModule would probably work, and I guess makes > things slightly simpler for users. > I like this form: <implementation.py module="PythonModuleName" class="PythonClassName"/> If I remember correctly, Python developers only reference module names in their python programs (with "import moduleName") so the path is not really relevant to them. modules are found on the python search path. The runtime should configured the python runtime to find modules packaged with the composite. >> For references, could you just use the .componentType side file to >> define >> references as an alternative to using new annotations? For >> JavaScript, if >> the .componentType side file defines a reference then the JavaScript >> container uses the dynamic nature of the language to automatically >> define a >> variable with the same name as the reference. I don't have a great >> example >> but you can see this in the e4x.js testcase where the script uses a >> variable >> named extHelloWorldService which is the name of the reference >> defined from >> the .componentType side file: >> >> http://svn.apache.org/repos/asf/incubator/tuscany/java/sca/containers/container.javascript/src/test/resources/org/apache/tuscany/container/javascript/function/e4x.js >> >> http://svn.apache.org/repos/asf/incubator/tuscany/java/sca/containers/container.javascript/src/test/resources/org/apache/tuscany/container/javascript/function/e4x.componentType >> >> > > I like this style, but I've got no idea if we could make it work > within Python - I'll have to take a look. That's my favourite of all > the options so far, so thanks! > I like this approach too: a componentType file with the same name as the python script/module, SCDL reference names map to python variable names, no need for annotations. In a second step we may want to look at ways to avoid a componentType file at all, and allow the python developer to declare SCA references in his module. I'm not even sure we need to invent annotations, this could look similar to what you'd do with Ruby meta-programming, you'd simply put at the top of your python module some executable statements to declare your SCA references, like this: Calculator.py scareference(Calculator.divideService, "divideService") ... or even simpler scareference(Calculator.divideService) Class Calculator: def add(arg1, arg2): return arg1 + arg2 def div(arg1,arg2) : return divideService.div(arg1, arg2) The call to scareference(variable) will be executed when you first load the python module. Our implementation of this function can bind the python variable to a reference of the same name. > Andy > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- Jean-Sebastien --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
