From: <or...@us...> - 2012-02-04 17:24:52
|
Revision: 52 http://bsf4oorexx.svn.sourceforge.net/bsf4oorexx/?rev=52&view=rev Author: orexx Date: 2012-02-04 17:24:45 +0000 (Sat, 04 Feb 2012) Log Message: ----------- 2012-02-04 Rexx interpreter instance now gets only created, if Rexx code should get executed. Prerequisite work for allowing eventually to configure Rexx command handlers (and perhaps exit handlers) that are implemented in Java. Modified Paths: -------------- trunk/bsf4oorexx.dev/source_java/ArrayWrapper.class trunk/bsf4oorexx.dev/source_java/Java4Rexx.class trunk/bsf4oorexx.dev/source_java/Java4Rexx.java trunk/bsf4oorexx.dev/source_java/ProxiedJavaClassTool.class trunk/bsf4oorexx.dev/source_java/RexxAndJava$1.class trunk/bsf4oorexx.dev/source_java/RexxAndJava$2.class trunk/bsf4oorexx.dev/source_java/RexxAndJava.class trunk/bsf4oorexx.dev/source_java/RexxAndJava.java trunk/bsf4oorexx.dev/source_java/RexxDispatcher.class trunk/bsf4oorexx.dev/source_java/RexxEngine.class trunk/bsf4oorexx.dev/source_java/RexxEngine.java trunk/bsf4oorexx.dev/source_java/RexxExtendClass.class trunk/bsf4oorexx.dev/source_java/RexxProxy.class trunk/bsf4oorexx.dev/source_java/Supplier.class Modified: trunk/bsf4oorexx.dev/source_java/ArrayWrapper.class =================================================================== (Binary files differ) Modified: trunk/bsf4oorexx.dev/source_java/Java4Rexx.class =================================================================== (Binary files differ) Modified: trunk/bsf4oorexx.dev/source_java/Java4Rexx.java =================================================================== --- trunk/bsf4oorexx.dev/source_java/Java4Rexx.java 2011-10-16 19:19:17 UTC (rev 51) +++ trunk/bsf4oorexx.dev/source_java/Java4Rexx.java 2012-02-04 17:24:45 UTC (rev 52) @@ -22,7 +22,7 @@ * * * <pre>------------------------ Apache Version 2.0 license ------------------------- - * Copyright (C) 2001-2009 Rony G. Flatscher + * Copyright (C) 2001-2012 Rony G. Flatscher * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,13 +39,18 @@ * * * @author Rony G. Flatscher (<a href="http://www.wu-wien.ac.at">WU-Wien/Wirtschaftsuniversität Wien</a>, <a href="http://www.wu-wien.ac.at/english">http://www.wu-wien.ac.at/english</a>) - * @version 4.0 (needs new APIs), 2009-05-31 + * @version 4.1 */ + +/* changes: + - 2012-02-04, rgf: cater for new (deferred) logic of creating a Rexx interpreter instance +*/ + class Java4Rexx { /** Version string indicating version of this class (majorVersion*100+minorVersion * concatenated with a dot and the sorted date of last change. */ - static public String version = "400.20091019"; + static public String version = "410.20120204"; /** BSF-manager to be used to get (instantiate) the Rexx engine. */ @@ -82,6 +87,7 @@ // now call into the DLL ("BSF4ooRexx.dll") in order to initialize; will set JVM in BSF4ooRexx.cc RexxAndJava raj=rxEngine.getRexxInterface(); // get the interface instance + raj.createRexxInterpreterInstance(); // rgf, 20120204: create Rexx interpreter instance raj.jniInitialize4Rexx(); // initialize Rexx, creates another Interpreter instance String root_rii_ID=raj.jniGetRexxInterpreterInstanceRoot(); // get root of interpreter instances (defined in BsfLoader()) @@ -89,9 +95,11 @@ // System.err.println("Java4Rexx.java: BSFGetTID()=["+raj.jniRexxGetTID()+"]"); + if (rii_ID!=null) // RexxEngine may not represent a created Rexx interpreter instance + { + raj.jniRexxTerminateInterpreterInstance(rii_ID); // terminate spurious Rexx interpreter instance + } - raj.jniRexxTerminateInterpreterInstance(rii_ID); // terminate spurious Rexx interpreter instance - rxEngine.set_rii_ID(root_rii_ID); // now tell engine instance which Rexx interpreter instance to use } Modified: trunk/bsf4oorexx.dev/source_java/ProxiedJavaClassTool.class =================================================================== (Binary files differ) Modified: trunk/bsf4oorexx.dev/source_java/RexxAndJava$1.class =================================================================== (Binary files differ) Modified: trunk/bsf4oorexx.dev/source_java/RexxAndJava$2.class =================================================================== (Binary files differ) Modified: trunk/bsf4oorexx.dev/source_java/RexxAndJava.class =================================================================== (Binary files differ) Modified: trunk/bsf4oorexx.dev/source_java/RexxAndJava.java =================================================================== --- trunk/bsf4oorexx.dev/source_java/RexxAndJava.java 2011-10-16 19:19:17 UTC (rev 51) +++ trunk/bsf4oorexx.dev/source_java/RexxAndJava.java 2012-02-04 17:24:45 UTC (rev 52) @@ -21,7 +21,7 @@ * * * <pre>------------------------ Apache Version 2.0 license ------------------------- - * Copyright (C) 2001-2011 Rony G. Flatscher + * Copyright (C) 2001-2012 Rony G. Flatscher * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -239,7 +239,7 @@ /** Version string indicating version of this class (majorVersion*100+minorVersion * concatenated with a dot and the sorted date of last change. */ - static final public String version = "407.20110608"; + static final public String version = "410.20120204"; static final private String pkgName = "org.rexxla.bsf.engines.rexx"; @@ -5889,6 +5889,34 @@ } + + + /** Creates a new Rexx interpreter instance using the ooRexx 4.0 API <code>RexxCreateInterpreter()</code>. + * TODO: This method honors optional Rexx interpreter instance settings, such that a default + * command environment can be defined, as well as Rexx command handlers + * (and eventually Rexx exit handlers) implemented in Java. + * + * @return a String representing the created Rexx interpreter instance ID or <code>null</code>, if + * no Rexx interpreter instance could be created + * + * @since 2012-02-04 + */ + protected String createRexxInterpreterInstance() + { + String rii_ID; // represents Rexx interpreter instance ("RII") + // TODO: version that allows passing Java Rexx exit and command handler arrays, if configured + rii_ID=jniRexxCreateInterpreterInstance(); // create interpreter instance + return rii_ID; + } + + + + // TODO: create jni-accessors for + // - the entire Rexx interpreter instance (all threads affected): + // Halt(), SetTrace(0|1) + // - Rexx-thread related APIs + // RexxSetHalt(), SetThreadTrace(0|1), RexxException...() + } /* javah -jni org.rexxla.bsf.engines.rexx.RexxAndJava Modified: trunk/bsf4oorexx.dev/source_java/RexxDispatcher.class =================================================================== (Binary files differ) Modified: trunk/bsf4oorexx.dev/source_java/RexxEngine.class =================================================================== (Binary files differ) Modified: trunk/bsf4oorexx.dev/source_java/RexxEngine.java =================================================================== --- trunk/bsf4oorexx.dev/source_java/RexxEngine.java 2011-10-16 19:19:17 UTC (rev 51) +++ trunk/bsf4oorexx.dev/source_java/RexxEngine.java 2012-02-04 17:24:45 UTC (rev 52) @@ -14,7 +14,7 @@ * using the RexxSAA interface. * * <pre>------------------------ Apache Version 2.0 license ------------------------- - * Copyright (C) 2001-2009 Rony G. Flatscher + * Copyright (C) 2001-2012 Rony G. Flatscher * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,7 +29,7 @@ * limitations under the License. * ----------------------------------------------------------------------------- </pre> * - * @version 4.0.0, 20090827 + * @version 4.1.0, 20120204 * @author Rony G. Flatscher (<a href="http://www.wu-wien.ac.at">WU-Wien/Wirtschaftsuniversität Wien</a>, <a href="http://www.wu-wien.ac.at/english">http://www.wu-wien.ac.at/english</a>) * */ @@ -37,6 +37,13 @@ /* last change: $Revision: 546 $ $Author: rony $ $Date: 2009-10-20 20:45:19 +0200 (Tue, 20 Oct 2009) $ + + 2012-02-04, ---rgf, - changed code to allow for delayed creation of a Rexx interpreter instance (RII), + which is meant to allow configuring a Rexx engine instance via the field + rexxInterface (a RexxAndJava object) for Java implemented Rexx exit and + command handlers; + + // ===================================== 2009-08-27, ---rgf, - added the argument "returnType" to rexxInterface.jniRexxSendMessageToRexxObject() 2009-07-12, ---rgf, - renamed argument "methodDescription" to "methodDescriptor" for jniRexxSendMessageToRexxObject() @@ -88,7 +95,7 @@ /** Version string indicating version of this class (majorVersion*100+minorVersion * concatenated with a dot and the sorted date of last change. */ - static final public String version = "400.20090827"; + static final public String version = "410.20120204"; /** If terminate() was invoked, then this instance must not be used anymore. */ @@ -116,6 +123,7 @@ private boolean bDebug=false ; // 20040404, ---rgf + // private boolean bDebug=true; // 20040404, ---rgf /** Allows using the Rexx interpreter from Java. */ // private RexxAndJava rexxInterface; @@ -172,11 +180,12 @@ } */ - +/* rgf, 2012-02-04 if (bDebug) System.err.println("===> RexxEngine().initialize(): before ===> rii_ID=["+rii_ID+"]"); this.rii_ID=rexxInterface.jniRexxCreateInterpreterInstance(); // create interpreter instance if (bDebug) System.err.println("===> RexxEngine().initialize(): after ===> rii_ID=["+rii_ID+"]"); +*/ } @@ -213,7 +222,15 @@ throw new RexxException("RexxEngine "+this+" got terminated, cannot be used anymore."); } + // rgf, 2012-02-04 + if (rii_ID==null) // Rexx interpreter instance (RII) not yet created, create it! + { +if (bDebug) System.err.println("===> RexxEngine(), creating RII: before ===> rii_ID=["+rii_ID+"]"); + this.rii_ID=rexxInterface.createRexxInterpreterInstance(); +if (bDebug) System.err.println("===> RexxEngine(), creating RII: after ===> rii_ID=["+rii_ID+"]"); + } + String script = oscript.toString (); if(source!= null && source.equals(RexxAndJava.EVENT_TEXT)) // dispatching eventListener text @@ -284,14 +301,20 @@ throws BSFException { -if (bDebug) System.err.println("RexxEngine.call() - begin..."); +if (bDebug) System.err.println("RexxEngine.call(Object object, String name, Object[] args) - begin..."); - // TODO: decide whether running on a different Rexx interpreter instance should be allowed if (bTerminated==true) // engine got terminated, cannot use it anymore { throw new RexxException("RexxEngine "+this+" got terminated, cannot be used anymore."); } + // rgf, 2012-02-04 + if (rii_ID==null) // Rexx interpreter instance (RII) not yet created, create it! + { +if (bDebug) System.err.println("===> RexxEngine(), creating RII: before ===> rii_ID=["+rii_ID+"]"); + this.rii_ID=rexxInterface.createRexxInterpreterInstance(); +if (bDebug) System.err.println("===> RexxEngine(), creating RII: after ===> rii_ID=["+rii_ID+"]"); + } // String editedArgs[] = new String [ (args!= null ? args.length : 0) ]; Object editedArgs[] = null; @@ -373,7 +396,7 @@ rexxInterface.unregisterBean( (String) e.nextElement()); } -if (bDebug) System.err.println("RexxEngine.call() - end, returning ["+o+"]..."); +if (bDebug) System.err.println("RexxEngine.call(Object object, String name, Object[] args) - end, returning ["+o+"]..."); return o; } @@ -399,6 +422,8 @@ public Object call (RexxProxy proxy, Method methodObject, Object[] args) throws BSFException { +if (bDebug) System.err.println("RexxEngine.call(RexxProxy proxy, Method methodObject, Object[] args) - begin..."); + if (proxy==null) { throw new RexxException("'proxy' argument must not be null!"); @@ -409,19 +434,23 @@ throw new RexxException("'methodObject' argument must not be null!"); } - - String name=methodObject.getName(); - String methodObjectBean=rexxInterface.makeString4Rexx(methodObject); - -if (bDebug) System.err.println("RexxEngine.call() - begin..."); - - // TODO: decide whether running on a different Rexx interpreter instance should be allowed if (bTerminated==true) // engine got terminated, cannot use it anymore { throw new RexxException("RexxEngine "+this+" got terminated, cannot be used anymore."); } + // rgf, 2012-02-04 + if (rii_ID==null) // Rexx interpreter instance (RII) not yet created, create it! + { +if (bDebug) System.err.println("===> RexxEngine(), creating RII: before ===> rii_ID=["+rii_ID+"]"); + this.rii_ID=rexxInterface.createRexxInterpreterInstance(); +if (bDebug) System.err.println("===> RexxEngine(), creating RII: after ===> rii_ID=["+rii_ID+"]"); + } + String name=methodObject.getName(); + String methodObjectBean=rexxInterface.makeString4Rexx(methodObject); + + // String editedArgs[] = new String [ (args!= null ? args.length : 0) ]; Object editedArgs[] = null; @@ -524,7 +553,7 @@ } rexxInterface.unregisterBean(methodObjectBean); -if (bDebug) System.err.println("RexxEngine.call() - end, returning ["+o+"]..."); +if (bDebug) System.err.println("RexxEngine.call(RexxProxy proxy, Method methodObject, Object[] args) - end, returning ["+o+"]..."); return o; } @@ -547,12 +576,13 @@ public Object call (RexxProxy proxy, Object javaObject, String methodName, String methodDescriptor, Object[] args) throws BSFException { +if (bDebug) System.err.println("RexxEngine.call() - begin..."); + if (proxy==null) { throw new RexxException("'proxy' argument must not be null!"); } - if (javaObject==null) { throw new RexxException("'javaObject' argument must not be null!"); @@ -563,15 +593,18 @@ throw new RexxException("'methodName' argument must not be null!"); } - -if (bDebug) System.err.println("RexxEngine.call() - begin..."); - - // TODO: decide whether running on a different Rexx interpreter instance should be allowed if (bTerminated==true) // engine got terminated, cannot use it anymore { throw new RexxException("RexxEngine "+this+" got terminated, cannot be used anymore."); } + // rgf, 2012-02-04 + if (rii_ID==null) // Rexx interpreter instance (RII) not yet created, create it! + { +if (bDebug) System.err.println("===> RexxEngine(), creating RII: before ===> rii_ID=["+rii_ID+"]"); + this.rii_ID=rexxInterface.createRexxInterpreterInstance(); +if (bDebug) System.err.println("===> RexxEngine(), creating RII: after ===> rii_ID=["+rii_ID+"]"); + } String javaObjectBean=rexxInterface.makeString4Rexx(javaObject); @@ -748,6 +781,14 @@ throw new RexxException("RexxEngine "+this+" got terminated, cannot be used anymore."); } + // rgf, 2012-02-04 + if (rii_ID==null) // Rexx interpreter instance (RII) not yet created, create it! + { +if (bDebug) System.err.println("===> RexxEngine(), creating RII: before ===> rii_ID=["+rii_ID+"]"); + this.rii_ID=rexxInterface.createRexxInterpreterInstance(); +if (bDebug) System.err.println("===> RexxEngine(), creating RII: after ===> rii_ID=["+rii_ID+"]"); + } + // ---rgf, 2006-02-24 String script = oscript.toString (); @@ -982,16 +1023,19 @@ * */ public void terminate() { - bTerminated=true; // do not allow any invocations via this instance anymore + if (rii_ID!=null) // if RII got created + { // this waits until all threads of the instance have finished -if (bDebug) System.err.println("RexxEngine().terminate(): before jniRexxTerminateInterpreterInstance("+rii_ID+").."); +if (bDebug) System.err.println("RexxEngine().terminate(): before jniRexxTerminateInterpreterInstance("+rii_ID+")..."); rexxInterface.jniRexxTerminateInterpreterInstance(rii_ID); // wait for termination of all Rexx threads of this interpreter instance if (bDebug) System.err.println("RexxEngine().terminate(): AFTER jniRexxTerminateInterpreterInstance("+rii_ID+")"); + } + super.terminate(); // now let the superclass do its work } @@ -1005,7 +1049,10 @@ { if (bDebug) System.err.println("RexxEngine().halt(): before jniRexxHaltInterpreterInstance("+rii_ID+").."); - rexxInterface.jniRexxHaltInterpreterInstance(rii_ID); // halt interpreter instance + if (rii_ID!=null) // if RII got created + { + rexxInterface.jniRexxHaltInterpreterInstance(rii_ID); // halt interpreter instance + } if (bDebug) System.err.println("RexxEngine().halt(): AFTER jniRexxHaltInterpreterInstance("+rii_ID+")"); @@ -1020,11 +1067,17 @@ * in all ooRexx threads) * * @return return code from <code>RexxSetHalt(...)</code>: <code>0<code> (o.k.), - * <code>1</code> (tid not found), or <code>2</code> (failure) + * <code>1</code> (tid not found), or <code>2</code> (failure), or + * <code>3</code> (Rexx interpreter instance was not yet created) */ public int halt(String tid) { - return rexxInterface.jniRexxSetHalt(tid); // halt/terminate Rexx interpreter instance of this thread + if (rii_ID!=null) // if RII got created + { + return rexxInterface.jniRexxSetHalt(tid); // halt/terminate Rexx interpreter instance of this thread + } + return 3; + } } Modified: trunk/bsf4oorexx.dev/source_java/RexxExtendClass.class =================================================================== (Binary files differ) Modified: trunk/bsf4oorexx.dev/source_java/RexxProxy.class =================================================================== (Binary files differ) Modified: trunk/bsf4oorexx.dev/source_java/Supplier.class =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |