| java.lang.Object org.apache.bsf.util.BSFEngineImpl org.apache.bsf.engines.netrexx.NetRexxEngine
NetRexxEngine | public class NetRexxEngine extends BSFEngineImpl (Code) | | This is the interface to NetRexx from the
Bean Scripting Framework.
The NetRexx code must be written script-style, without a "class" or
"properties" section preceeding the executable code. The NetRexxEngine will
generate a prefix for this code:
class $$CLASSNAME$$;
method BSFNetRexxEngineEntry(bsf=org.apache.bsf.BSFManager) public static;
$$CLASSNAME$$ will be replaced by a generated classname of the form
BSFNetRexx*, and the bsf parameter can be used to retrieve application
objects registered with the Bean Scripting Framework.
If you use the placeholder string $$CLASSNAME$$ elsewhere
in your script -- including within text strings -- BSFNetRexxEngine will
replace it with the generated name of the class before the NetRexx code
is compiled.
If you need to use full NetRexx functionality, we recommend that your
NetRexx script define and invoke a "minor class", with or without the
"dependent" keyword as suits your needs. You'll have to use $$CLASSNAME$$
in naming the minor class, since the name of the main class is synthesized;
for example, to create the minor class "bar" you'd write
"class $$CLASSNAME$$.Bar".
Hazards:
Since NetRexx has to be _compiled_ to a Java classfile, invoking it involves
a fair amount of computation to load and execute the compiler. We are
currently making an attempt to manage that by caching the class
after it has been loaded, but the indexing is fairly primitive; we
hash against the script string to find the class for it.
Minor-class .class files are now being deleted after the major class loads.
This coould potentially cause problems.
author: Joe Kesselman author: Sanjiva Weerawarana |
Method Summary | |
public Object | call(Object object, String method, Object[] args) Return an object from an extension. | Object | callStatic(Class rexxclass, String method, Object[] args) Invoke a static method. | public void | declareBean(BSFDeclaredBean bean) | public Object | eval(String source, int lineNo, int columnNo, Object script) Override impl of execute. | public void | exec(String source, int lineNo, int columnNo, Object script) Override impl of execute. | public Object | execEvalShared(String source, int lineNo, int columnNo, Object oscript, boolean returnsObject) This is shared code for the exec() and eval() operations. | public void | initialize(BSFManager mgr, String lang, Vector declaredBeans) | public void | undeclareBean(BSFDeclaredBean bean) |
serializeCompilation | static String serializeCompilation(Code) | | |
NetRexxEngine | public NetRexxEngine()(Code) | | Constructor.
|
call | public Object call(Object object, String method, Object[] args) throws BSFException(Code) | | Return an object from an extension.
Parameters: object - object from which to call our static method Parameters: method - The name of the method to call. Parameters: args - an array of arguments to bepassed to the extension, which may be eitherVectors of Nodes, or Strings. |
callStatic | Object callStatic(Class rexxclass, String method, Object[] args) throws BSFException(Code) | | Invoke a static method.
Parameters: rexxclass - Class to invoke the method against Parameters: method - The name of the method to call. Parameters: args - an array of arguments to bepassed to the extension, which may be eitherVectors of Nodes, or Strings. |
eval | public Object eval(String source, int lineNo, int columnNo, Object script) throws BSFException(Code) | | Override impl of execute. In NetRexx, methods which do not wish
to return a value should be invoked via exec, which will cause them
to be generated without the "returns" clause.
Those which wish to return a value should call eval instead.
which will add "returns java.lang.Object" to the header.
Note: It would be nice to have the "real" return type avaialable, so
we could do something more type-safe than Object, and so we could
return primitive types without having to enclose them in their
object wrappers. BSF does not currently support that concept.
|
exec | public void exec(String source, int lineNo, int columnNo, Object script) throws BSFException(Code) | | Override impl of execute. In NetRexx, methods which do not wish
to return a value should be invoked via exec, which will cause them
to be generated without the "returns" clause.
Those which wish to return a value should call eval instead.
which will add "returns java.lang.Object" to the header.
|
execEvalShared | public Object execEvalShared(String source, int lineNo, int columnNo, Object oscript, boolean returnsObject) throws BSFException(Code) | | This is shared code for the exec() and eval() operations. It will
evaluate a string containing a NetRexx method body -- which may be
as simple as a single return statement.
It should store the "bsf" handle where the
script can get to it, for callback purposes.
Note that NetRexx compilation imposes serious overhead -- 11 seconds for
the first compile, about 3 thereafter -- but in exchange you get
Java-like speeds once the classes have been created (minus the cache
lookup cost).
Nobody knows whether javac is threadsafe.
I'm going to serialize access to the compilers to protect it.
|
Methods inherited from org.apache.bsf.util.BSFEngineImpl | public Object apply(String source, int lineNo, int columnNo, Object funcBody, Vector paramNames, Vector arguments) throws BSFException(Code)(Java Doc) public void compileApply(String source, int lineNo, int columnNo, Object funcBody, Vector paramNames, Vector arguments, CodeBuffer cb) throws BSFException(Code)(Java Doc) public void compileExpr(String source, int lineNo, int columnNo, Object expr, CodeBuffer cb) throws BSFException(Code)(Java Doc) public void compileScript(String source, int lineNo, int columnNo, Object script, CodeBuffer cb) throws BSFException(Code)(Java Doc) public void declareBean(BSFDeclaredBean bean) throws BSFException(Code)(Java Doc) public void exec(String source, int lineNo, int columnNo, Object script) throws BSFException(Code)(Java Doc) public void iexec(String source, int lineNo, int columnNo, Object script) throws BSFException(Code)(Java Doc) public void initialize(BSFManager mgr, String lang, Vector declaredBeans) throws BSFException(Code)(Java Doc) public void propertyChange(PropertyChangeEvent e)(Code)(Java Doc) public void terminate()(Code)(Java Doc) public void undeclareBean(BSFDeclaredBean bean) throws BSFException(Code)(Java Doc)
|
|
|