Bertrand Delacretaz wrote:


Le Vendredi, 21 nov 2003, à 22:20 Europe/Zurich, Upayavira a écrit :


Bertrand Delacretaz wrote:

...This means that BeanShell (dunno if BSF does this too) scripts could be called from flow *and* interpreted *and* implement Avalon or Cocoon interfaces. I haven't thought about all implications but it might be a nice intermediate solution between limited interpreted stuff and full-blown java coding.


Can you say more about how you do this? Give some examples? I would find that very useful.


Still in wildthoughts mode here, I haven't tested this:

1) A BeanShellWrapper Component initializes BeanShell and provides some useful beans that scripts can access (similar to what the current ScriptGenerator does).

Maybe BSF instead of BeanShell (as BSF can use BeanShell as a script engine anyway), but I don't know if BSF does all this.

2) BeanShellWrapper provides methods for flowscripts to retrieve scriptable objects, something like:

IMyBizObject = (IMyBizObject)BSFWrapper.createObject(IMyBizObject.class,"MyBusinessScri pt.bsl");

At this point the BeanShell "dynamic adapter" feature [1] [2] is used to provide an object of the specified interface, something like:

// in BeanShellWrapper:
public Object createObject(Class clazz,String scriptFilename) {
// first load scriptFilename in the (or a new) BeanShell Interpreter
...
// then cast the interpreter as required, it will call the appropriate methods in
// the script if they exist and complain if not
return interpreter.getInterface(clazz);
}


See what I mean? This is only a rough sketch, there are certainly a lot of "details" to consider. But it looks like all the essential elements are here.

I'm also not sure if one of the BeanShell licenses [3] are ok for distributing with Cocoon, but mocks could be used if it is not the case.

Hope this helps,
-Bertrand


[1] http://www.beanshell.org/javadoc/bsh/ Interpreter.html#getInterface(java.lang.Class)


[2] http://www.beanshell.org/manual/ bshmanual.html#%22Dummy%22_Adapters_and_Incomplete_Interfaces

[3] http://www.beanshell.org/license.html

From looking at the BeanShell docs, the Java is definitely 'scripted' java, and lacks Java's object orientedness. Therefore, whilst you're coding in more or less Java, I can't see a great advantage of using BeanShell over using Rhino. They're both scripted, and thus not able to create clear interfaces. (In BeanShell you can implement interfaces, but to do so you have to use 'anonymous classes', which IMO doesn't produce attractive or easy to read code.

Therefore, I think, for my case, I'm just going to have to use Java for my objects, to use Unit Tests to test them (rather than bothering to test them in a servlet environment), and hope for the day when someone gets Christopher's CompilingClassLoader working so that I can easily debug Java code from within a servlet.

Regards, Upayavira




Reply via email to