|
20080913, rgf | ||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.apache.bsf.util.BSFEngineImpl
org.apache.bsf.engines.netrexx.NetRexxEngine
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".
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.
Field Summary | |
(package private) static java.util.Hashtable |
codeToClass
|
(package private) BSFFunctions |
mgrfuncs
|
(package private) java.lang.String |
minorPrefix
|
(package private) static java.lang.String |
placeholder
|
(package private) static java.lang.String |
serializeCompilation
|
Fields inherited from class org.apache.bsf.util.BSFEngineImpl |
classLoader, classPath, declaredBeans, lang, mgr, tempDir |
Constructor Summary | |
NetRexxEngine()
Constructor. |
Method Summary | |
java.lang.Object |
call(java.lang.Object object,
java.lang.String method,
java.lang.Object[] args)
Return an object from an extension. |
(package private) java.lang.Object |
callStatic(java.lang.Class rexxclass,
java.lang.String method,
java.lang.Object[] args)
Invoke a static method. |
void |
declareBean(BSFDeclaredBean bean)
Declare a bean after the engine has been started. |
java.lang.Object |
eval(java.lang.String source,
int lineNo,
int columnNo,
java.lang.Object script)
Override impl of execute. |
void |
exec(java.lang.String source,
int lineNo,
int columnNo,
java.lang.Object script)
Override impl of execute. |
java.lang.Object |
execEvalShared(java.lang.String source,
int lineNo,
int columnNo,
java.lang.Object oscript,
boolean returnsObject)
This is shared code for the exec() and eval() operations. |
void |
initialize(BSFManager mgr,
java.lang.String lang,
java.util.Vector declaredBeans)
initialize the engine; called right after construction by the manager. |
void |
undeclareBean(BSFDeclaredBean bean)
Undeclare a previously declared bean. |
Methods inherited from class org.apache.bsf.util.BSFEngineImpl |
apply, compileApply, compileExpr, compileScript, iexec, propertyChange, terminate |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
BSFFunctions mgrfuncs
static java.util.Hashtable codeToClass
static java.lang.String serializeCompilation
static java.lang.String placeholder
java.lang.String minorPrefix
Constructor Detail |
public NetRexxEngine()
Method Detail |
public java.lang.Object call(java.lang.Object object, java.lang.String method, java.lang.Object[] args) throws BSFException
object
- object from which to call our static methodmethod
- The name of the method to call.args
- an array of arguments to be
passed to the extension, which may be either
Vectors of Nodes, or Strings.
BSFException
- if anything goes wrong while eval'ing a
BSFException is thrown. The reason indicates the problem.java.lang.Object callStatic(java.lang.Class rexxclass, java.lang.String method, java.lang.Object[] args) throws BSFException
rexxclass
- Class to invoke the method againstmethod
- The name of the method to call.args
- an array of arguments to be
passed to the extension, which may be either
Vectors of Nodes, or Strings.
BSFException
public void declareBean(BSFDeclaredBean bean) throws BSFException
BSFEngine
declareBean
in interface BSFEngine
declareBean
in class BSFEngineImpl
BSFException
public java.lang.Object eval(java.lang.String source, int lineNo, int columnNo, java.lang.Object script) throws BSFException
source
- (context info) the source of this expression
(e.g., filename)lineNo
- (context info) the line number in source for exprcolumnNo
- (context info) the column number in source for exprscript
- the expression to evaluate
BSFException
- if anything goes wrong while eval'ing a
BSFException is thrown. The reason indicates the problem.public void exec(java.lang.String source, int lineNo, int columnNo, java.lang.Object script) throws BSFException
exec
in interface BSFEngine
exec
in class BSFEngineImpl
BSFException
public java.lang.Object execEvalShared(java.lang.String source, int lineNo, int columnNo, java.lang.Object oscript, boolean returnsObject) throws BSFException
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.
BSFException
public void initialize(BSFManager mgr, java.lang.String lang, java.util.Vector declaredBeans) throws BSFException
BSFEngineImpl
initialize
in interface BSFEngine
initialize
in class BSFEngineImpl
BSFException
public void undeclareBean(BSFDeclaredBean bean) throws BSFException
BSFEngine
undeclareBean
in interface BSFEngine
undeclareBean
in class BSFEngineImpl
BSFException
|
20080913, rgf | ||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |