You are viewing a plain text version of this content. The canonical link for it is here.
Posted to bsf-dev@jakarta.apache.org by "Rony G. Flatscher" <Ro...@wu-wien.ac.at> on 2006/12/03 23:50:00 UTC
Question ad logging ...
Hi there,
at the moment BSF needs commons logging to run. Now, how about allowing
BSF to work even in the case that no commons-logging is available to it?
Would anyone object if I changed the code such that BSF runs without
commons logging available (doing no logging at all then), and if commons
logging is available, BSF uses it?
Regards,
---rony
---------------------------------------------------------------------
To unsubscribe, e-mail: bsf-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: bsf-dev-help@jakarta.apache.org
Re: Question ad logging ...
Posted by "Rony G. Flatscher" <Ro...@wu-wien.ac.at>.
Hi Sanjiva,
> Hmmm. Does this mean that if commons logging is not there log messages
> will silently disappear? I guess that's ok .. if something really goes
> wrong an exception will come out anyway (BSF is not a server!).
>
No, the problem was that BSF would not run at all, if commons-logging
was not available to it! Rather an exception (class not found) was
thrown. The present solution (which I already checked-in but which can
be removed or changed easily) tries to resemble the commons-logging
classes LogFactory (with the two constructors) and Log (implementing all
the methods defined in the Log interface). This way the methods of
commons-logging are available to log information, and are forwarded to a
commons-logging Log instance, if commons-logging is available,
otherwise nothing happens. The "BSF_Log" is a sort of NOP
(null-operation) logger.
> So, +1 to the fix except for calling the classes BSFLogFactory and BSFLog :).
>
Any other names would be fine, please suggest replacement names (the
intent was to let commons-logging users understand right away the
purpose and role of these two classes, if they wish to employ it for
themselves).
Regards,
---rony
---------------------------------------------------------------------
To unsubscribe, e-mail: bsf-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: bsf-dev-help@jakarta.apache.org
Re: Question ad logging ...
Posted by Sanjiva Weerawarana <sa...@opensource.lk>.
Hmmm. Does this mean that if commons logging is not there log messages
will silently disappear? I guess that's ok .. if something really goes
wrong an exception will come out anyway (BSF is not a server!).
So, +1 to the fix except for calling the classes BSFLogFactory and
BSFLog :).
Sanjiva.
On Fri, 2006-12-08 at 19:47 +0100, Rony G. Flatscher wrote:
> Hi there,
>
> in the meantime I was able to work on the logging problem.
>
> The problem: BSF 2.4.0 needs org.apache.commons.logging to be available.
> Depending on the location where BSF and commons-logging gets installed,
> problems may pop up (e.g. if commons-logging is located in an
> ext-directory and an app is employing an own copy of commons-logging).
>
> This solution creates a BSF_LogFactory and BSF_Log class which will by
> default behave as an no-op logger. In case commons-logging LogFactory
> and Log is available, it will be used. Hence the functionality remains
> the same, but the change will allow BSF to run without commons-logging
> present.
>
> A build incorporating all the necessary changes can be downloaded from
> <http://wi.wu-wien.ac.at/rgf/tmp/bsf.tmp/>.
>
> The diff file is attached to this e-mail .
>
> If I do not hear anything back until the end of the next week, I will
> check the changes in.
>
> Regards,
>
> ---rony
>
> plain text document attachment (bsf241.diff)
> Index: src/org/apache/bsf/BSF_LogFactory.java
> ===================================================================
> --- src/org/apache/bsf/BSF_LogFactory.java (revision 0)
> +++ src/org/apache/bsf/BSF_LogFactory.java (revision 0)
> @@ -0,0 +1,44 @@
> +/*
> + * Copyright 2006 The Apache Software Foundation.
> + *
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +
> +package org.apache.bsf;
> +
> +/** This class is used in BSF as BSF_LogFactory returning a BSF_Log instance, which is
> + * a delegator for an <code>org.apache.commons.logging.Log</code> object.
> + *
> + It implements the static <code>org.apache.commons.logging.LogFactory.getLog({String|Class} object)</code>
> + * methods which return an instance of the class <code>org.apache.bsf.BSF_Log</code>, which in
> + * turn implements all the methods of the <code>org.apache.commons.logging.Log</code> interface class.
> + *
> +
> + @author Rony G. Flatscher, 2006-12-08
> +*/
> +
> +public class BSF_LogFactory
> +{
> + protected BSF_LogFactory() {}; // mimickries org.apache.commons.logging.LogFactory
> +
> + static public BSF_Log getLog (String name)
> + {
> + return new BSF_Log(name);
> + }
> +
> + static public BSF_Log getLog (Class clz)
> + {
> + return new BSF_Log(clz);
> + }
> +}
> +
>
> Property changes on: src/org/apache/bsf/BSF_LogFactory.java
> ___________________________________________________________________
> Name: svn:executable
> + *
> Name: svn:keywords
> + Author Date Rev Id URL
>
> Index: src/org/apache/bsf/BSFManager.java
> ===================================================================
> --- src/org/apache/bsf/BSFManager.java (revision 483957)
> +++ src/org/apache/bsf/BSFManager.java (working copy)
> @@ -34,9 +34,11 @@
>
> import org.apache.bsf.util.CodeBuffer;
> import org.apache.bsf.util.ObjectRegistry;
> -import org.apache.commons.logging.Log;
> -import org.apache.commons.logging.LogFactory;
>
> + // org.apache.commons.logging is delegated to "org.apache.bsf.BSF_Log[Factory]"
> +// import org.apache.commons.logging.Log;
> +// import org.apache.commons.logging.LogFactory;
> +
> /**
> * This class is the entry point to the bean scripting framework. An
> * application wishing to integrate scripting to a Java app would
> @@ -54,14 +56,15 @@
> * @author Sam Ruby
> * @author Olivier Gruber (added original debugging support)
> * @author Don Schwarz (added support for registering languages dynamically)
> + * @author Rony G. Flatscher (added BSF_Log[Factory] to allow BSF to run without org.apache.commons.logging present)
> */
> public class BSFManager {
> // version string is in the form "abc.yyyymmdd" where
> // "abc" represents a dewey decimal number (three levels, each between 0 and 9),
> // and "yyyy" a four digit year, "mm" a two digit month, "dd" a two digit day.
> //
> - // Example: "240.20060925" stands for: BSF version "2.4.0" as of "2006-09-25"
> - protected static String version="240.20061006";
> + // Example: "241.20061208" stands for: BSF version "2.4.1" as of "2006-12-08"
> + protected static String version="241.20061208";
>
> // table of registered scripting engines
> protected static Hashtable registeredEngines = new Hashtable();
> @@ -99,7 +102,8 @@
> // introduced by a client of BSFManager
> protected Vector declaredBeans = new Vector();
>
> - private Log logger = LogFactory.getLog(this.getClass().getName());
> + // private Log logger = LogFactory.getLog(this.getClass().getName());
> + private BSF_Log logger = null;
>
> //////////////////////////////////////////////////////////////////////
> //
> @@ -154,6 +158,9 @@
>
> public BSFManager() {
> pcs = new PropertyChangeSupport(this);
> + // handle logger
> + // logger = LogFactory.getLog(this.getClass().getName());
> + logger = BSF_LogFactory.getLog(this.getClass().getName());
> }
>
>
> @@ -164,8 +171,8 @@
> "yyyy" a four digit year, "mm" a two digit month,
> "dd" a two digit day.
> *
> - <br>Example: "<code>240.20061006</code>"
> - stands for: BSF version <code>2.4.0</code> as of <code>2006-10-06</code>.
> + <br>Example: "<code>241.20061208</code>"
> + stands for: BSF version <code>2.4.1</code> as of <code>2006-12-08</code>.
> *
> *
> * @since 2006-01-17
> Index: src/org/apache/bsf/engines/java/JavaEngine.java
> ===================================================================
> --- src/org/apache/bsf/engines/java/JavaEngine.java (revision 483957)
> +++ src/org/apache/bsf/engines/java/JavaEngine.java (working copy)
> @@ -1,12 +1,12 @@
> /*
> * Copyright 2004,2004 The Apache Software Foundation.
> - *
> + *
> * Licensed under the Apache License, Version 2.0 (the "License");
> * you may not use this file except in compliance with the License.
> * You may obtain a copy of the License at
> - *
> + *
> * http://www.apache.org/licenses/LICENSE-2.0
> - *
> + *
> * Unless required by applicable law or agreed to in writing, software
> * distributed under the License is distributed on an "AS IS" BASIS,
> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> @@ -25,14 +25,15 @@
>
> import org.apache.bsf.BSFException;
> import org.apache.bsf.BSFManager;
> +import org.apache.bsf.BSF_Log;
> +import org.apache.bsf.BSF_LogFactory;
> +
> import org.apache.bsf.util.BSFEngineImpl;
> import org.apache.bsf.util.CodeBuffer;
> import org.apache.bsf.util.EngineUtils;
> import org.apache.bsf.util.JavaUtils;
> import org.apache.bsf.util.MethodUtils;
> import org.apache.bsf.util.ObjInfo;
> -import org.apache.commons.logging.Log;
> -import org.apache.commons.logging.LogFactory;
>
> /**
> * This is the interface to Java from the
> @@ -80,6 +81,7 @@
> * provide better control over when and how much overhead occurs.
> * <p>
> * @author Joe Kesselman
> + * @author Rony G. Flatscher (added BSF_Log[Factory] to allow BSF to run without org.apache.commons.logging present)
> */
> public class JavaEngine extends BSFEngineImpl {
> Class javaclass = null;
> @@ -87,9 +89,10 @@
> static String serializeCompilation = "";
> static String placeholder = "$$CLASSNAME$$";
> String minorPrefix;
> -
> - private Log logger = LogFactory.getLog(this.getClass().getName());
> -
> +
> + // private Log logger = LogFactory.getLog(this.getClass().getName());
> + private BSF_Log logger = null;
> +
> /**
> * Create a scratchfile, open it for writing, return its name.
> * Relies on the filesystem to provide us with uniqueness testing.
> @@ -98,7 +101,7 @@
> * even if the classfile has been deleted.
> */
> private int uniqueFileOffset = -1;
> -
> +
> private class GeneratedFile {
> File file = null;
> FileOutputStream fos = null;
> @@ -109,33 +112,35 @@
> this.className = className;
> }
> }
> -
> +
> /**
> * Constructor.
> */
> public JavaEngine () {
> + // handle logger
> + logger = BSF_LogFactory.getLog(this.getClass().getName());
> // Do compilation-possible check here??????????????
> }
> -
> - public Object call (Object object, String method, Object[] args)
> +
> + public Object call (Object object, String method, Object[] args)
> throws BSFException
> {
> throw new BSFException (BSFException.REASON_UNSUPPORTED_FEATURE,
> "call() is not currently supported by JavaEngine");
> }
> -
> +
> public void compileScript (String source, int lineNo, int columnNo,
> Object script, CodeBuffer cb) throws BSFException {
> ObjInfo oldRet = cb.getFinalServiceMethodStatement ();
> -
> +
> if (oldRet != null && oldRet.isExecutable ()) {
> cb.addServiceMethodStatement (oldRet.objName + ";");
> }
> -
> +
> cb.addServiceMethodStatement (script.toString ());
> cb.setFinalServiceMethodStatement (null);
> }
> -
> +
> /**
> * This is used by an application to evaluate a string containing
> * some expression. It should store the "bsf" handle where the
> @@ -153,20 +158,20 @@
> * We will attempt to use it, then if necessary fall back on invoking
> * javac via the command line.
> */
> - public Object eval (String source, int lineNo, int columnNo,
> + public Object eval (String source, int lineNo, int columnNo,
> Object oscript) throws BSFException
> {
> Object retval = null;
> String classname = null;
> GeneratedFile gf = null;
> -
> +
> String basescript = oscript.toString();
> String script = basescript; // May be altered by $$CLASSNAME$$ expansion
> -
> +
> try {
> // Do we already have a class exactly matching this code?
> javaclass = (Class)codeToClass.get(basescript);
> -
> +
> if(javaclass != null) {
> classname=javaclass.getName();
> } else {
> @@ -176,14 +181,14 @@
> }
> // Obtain classname
> classname = gf.className;
> -
> +
> // Write the kluge header to the file.
> gf.fos.write(("import java.lang.*;"+
> "import java.util.*;"+
> "public class "+classname+" {\n" +
> " static public Object BSFJavaEngineEntry(org.apache.bsf.BSFManager bsf) {\n")
> .getBytes());
> -
> +
> // Edit the script to replace placeholder with the generated
> // classname. Note that this occurs _after_ the cache was checked!
> int startpoint = script.indexOf(placeholder);
> @@ -203,63 +208,63 @@
> script = changed.toString();
> }
> }
> -
> +
> // MJD - debug
> // BSFDeclaredBean tempBean;
> // String className;
> -//
> +//
> // for (int i = 0; i < declaredBeans.size (); i++) {
> // tempBean = (BSFDeclaredBean) declaredBeans.elementAt (i);
> // className = StringUtils.getClassName (tempBean.bean.getClass ());
> -//
> +//
> // gf.fos.write ((className + " " +
> // tempBean.name + " = (" + className +
> // ")bsf.lookupBean(\"" +
> // tempBean.name + "\");").getBytes ());
> // }
> // MJD - debug
> -
> +
> // Copy the input to the file.
> // Assumes all available -- probably mistake, but same as other engines.
> gf.fos.write(script.getBytes());
> // Close the method and class
> gf.fos.write(("\n }\n}\n").getBytes());
> gf.fos.close();
> -
> +
> // Compile through Java to .class file
> // May not be threadsafe. Serialize access on static object:
> synchronized(serializeCompilation) {
> JavaUtils.JDKcompile(gf.file.getPath(), classPath);
> }
> -
> +
> // Load class.
> javaclass = EngineUtils.loadClass(mgr, classname);
> -
> +
> // Stash class for reuse
> codeToClass.put(basescript, javaclass);
> }
> -
> - Object[] callArgs = {mgr};
> +
> + Object[] callArgs = {mgr};
> retval = internalCall(this,"BSFJavaEngineEntry",callArgs);
> }
> -
> -
> +
> +
> catch(Exception e) {
> e.printStackTrace ();
> throw new BSFException (BSFException.REASON_IO_ERROR, e.getMessage ());
> } finally {
> // Cleanup: delete the .java and .class files
> -
> +
> // if(gf!=null && gf.file!=null && gf.file.exists())
> // gf.file.delete(); // .java file
> -
> -
> +
> +
> if(classname!=null) {
> // Generated class
> File file = new File(tempDir+File.separatorChar+classname+".class");
> // if(file.exists())
> // file.delete();
> -
> +
> // Search for and clean up minor classes, classname$xxx.class
> file = new File(tempDir); // ***** Is this required?
> minorPrefix = classname+"$"; // Indirect arg to filter
> @@ -281,7 +286,7 @@
> }
> return retval;
> }
> -
> +
> public void initialize (BSFManager mgr, String lang,
> Vector declaredBeans) throws BSFException {
> super.initialize (mgr, lang, declaredBeans);
> @@ -294,7 +299,7 @@
> * passed to the extension, which may be either
> * Vectors of Nodes, or Strings.
> */
> - Object internalCall (Object object, String method, Object[] args)
> + Object internalCall (Object object, String method, Object[] args)
> throws BSFException
> {
> //***** ISSUE: Only static methods are currently supported
> @@ -315,7 +320,7 @@
> }
> return retval;
> }
> -
> +
> private GeneratedFile openUniqueFile(String directory,String prefix,String suffix) {
> File file = null;
> FileOutputStream fos = null;
> Index: src/org/apache/bsf/engines/xslt/XSLTEngine.java
> ===================================================================
> --- src/org/apache/bsf/engines/xslt/XSLTEngine.java (revision 483957)
> +++ src/org/apache/bsf/engines/xslt/XSLTEngine.java (working copy)
> @@ -1,12 +1,12 @@
> /*
> * Copyright 2004,2004 The Apache Software Foundation.
> - *
> + *
> * Licensed under the Apache License, Version 2.0 (the "License");
> * you may not use this file except in compliance with the License.
> * You may obtain a copy of the License at
> - *
> + *
> * http://www.apache.org/licenses/LICENSE-2.0
> - *
> + *
> * Unless required by applicable law or agreed to in writing, software
> * distributed under the License is distributed on an "AS IS" BASIS,
> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> @@ -31,36 +31,45 @@
> import org.apache.bsf.BSFDeclaredBean;
> import org.apache.bsf.BSFException;
> import org.apache.bsf.BSFManager;
> +import org.apache.bsf.BSF_Log;
> +import org.apache.bsf.BSF_LogFactory;
> import org.apache.bsf.util.BSFEngineImpl;
> import org.apache.bsf.util.BSFFunctions;
> -import org.apache.commons.logging.Log;
> -import org.apache.commons.logging.LogFactory;
> import org.apache.xpath.objects.XObject;
> import org.w3c.dom.Node;
>
> /**
> * Xerces XSLT interface to BSF. Requires Xalan and Xerces from Apache.
> - *
> + *
> * This integration uses the BSF registry to pass in any src document
> - * and stylesheet base URI that the user may wish to set.
> + * and stylesheet base URI that the user may wish to set.
> *
> * @author Sanjiva Weerawarana
> * @author Sam Ruby
> *
> * Re-implemented for the Xalan 2 codebase
> - *
> + *
> * @author Victor J. Orlikowski
> + * @author Rony G. Flatscher (added BSF_Log[Factory] to allow BSF to run without org.apache.commons.logging present)
> */
> public class XSLTEngine extends BSFEngineImpl {
> TransformerFactory tFactory;
> Transformer transformer;
> -
> - Log logger = LogFactory.getLog(this.getClass().getName());
>
> + // Log logger = LogFactory.getLog(this.getClass().getName());
> + BSF_Log logger = null;
> +
> + public XSLTEngine ()
> + {
> + // handle logger
> + logger = BSF_LogFactory.getLog(this.getClass().getName());
> + }
> +
> +
> /**
> * call the named method of the given object.
> */
> - public Object call (Object object, String method, Object[] args)
> + public Object call (Object object, String method, Object[] args)
> throws BSFException {
> throw new BSFException (BSFException.REASON_UNSUPPORTED_FEATURE,
> "BSF:XSLTEngine can't call methods");
> @@ -77,7 +86,7 @@
> * Evaluate an expression. In this case, an expression is assumed
> * to be a stylesheet of the template style (see the XSLT spec).
> */
> - public Object eval (String source, int lineNo, int columnNo,
> + public Object eval (String source, int lineNo, int columnNo,
> Object oscript) throws BSFException {
> // get the style base URI (the place from where Xerces XSLT will
> // look for imported/included files and referenced docs): if a
> @@ -90,7 +99,7 @@
> // Locate the stylesheet.
> StreamSource styleSource;
>
> - styleSource =
> + styleSource =
> new StreamSource(new StringReader(oscript.toString ()));
> styleSource.setSystemId(styleBaseURI);
>
> @@ -143,21 +152,21 @@
> }
> }
> } else {
> - // create an empty document - real src must come into the
> + // create an empty document - real src must come into the
> // stylesheet using "doc(...)" [see XSLT spec] or the stylesheet
> // must be of literal result element type
> xis = new StreamSource();
> }
> -
> +
> // set all declared beans as parameters.
> for (int i = 0; i < declaredBeans.size (); i++) {
> BSFDeclaredBean b = (BSFDeclaredBean) declaredBeans.elementAt (i);
> transformer.setParameter (b.name, new XObject (b.bean));
> }
>
> - // declare a "bsf" parameter which is the BSF handle so that
> + // declare a "bsf" parameter which is the BSF handle so that
> // the script can do BSF stuff if it wants to
> - transformer.setParameter ("bsf",
> + transformer.setParameter ("bsf",
> new XObject (new BSFFunctions (mgr, this)));
>
> // do it
> Index: src/org/apache/bsf/engines/netrexx/NetRexxEngine.java
> ===================================================================
> --- src/org/apache/bsf/engines/netrexx/NetRexxEngine.java (revision 483957)
> +++ src/org/apache/bsf/engines/netrexx/NetRexxEngine.java (working copy)
> @@ -1,12 +1,12 @@
> /*
> * Copyright 2004,2004 The Apache Software Foundation.
> - *
> + *
> * Licensed under the Apache License, Version 2.0 (the "License");
> * you may not use this file except in compliance with the License.
> * You may obtain a copy of the License at
> - *
> + *
> * http://www.apache.org/licenses/LICENSE-2.0
> - *
> + *
> * Unless required by applicable law or agreed to in writing, software
> * distributed under the License is distributed on an "AS IS" BASIS,
> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> @@ -28,13 +28,13 @@
> import org.apache.bsf.BSFDeclaredBean;
> import org.apache.bsf.BSFException;
> import org.apache.bsf.BSFManager;
> +import org.apache.bsf.BSF_Log;
> +import org.apache.bsf.BSF_LogFactory;
> import org.apache.bsf.util.BSFEngineImpl;
> import org.apache.bsf.util.BSFFunctions;
> import org.apache.bsf.util.EngineUtils;
> import org.apache.bsf.util.MethodUtils;
> import org.apache.bsf.util.StringUtils;
> -import org.apache.commons.logging.Log;
> -import org.apache.commons.logging.LogFactory;
>
> /**
> * This is the interface to NetRexx from the
> @@ -78,6 +78,7 @@
> *
> * @author Joe Kesselman
> * @author Sanjiva Weerawarana
> + * @author Rony G. Flatscher (added BSF_Log[Factory] to allow BSF to run without org.apache.commons.logging present)
> */
> public class NetRexxEngine extends BSFEngineImpl
> {
> @@ -86,9 +87,10 @@
> static String serializeCompilation="";
> static String placeholder="$$CLASSNAME$$";
> String minorPrefix;
> -
> - private Log logger = LogFactory.getLog(this.getClass().getName());
> -
> +
> + // private Log logger = LogFactory.getLog(this.getClass().getName());
> + private BSF_Log logger = null;
> +
> /**
> * Create a scratchfile, open it for writing, return its name.
> * Relies on the filesystem to provide us with uniqueness testing.
> @@ -100,41 +102,43 @@
> * of the NetRexx engine.
> */
> private static int uniqueFileOffset=0;
> - private class GeneratedFile
> + private class GeneratedFile
> {
> File file=null;
> FileOutputStream fos=null;
> String className=null;
> - GeneratedFile(File file,FileOutputStream fos,String className)
> + GeneratedFile(File file,FileOutputStream fos,String className)
> {
> this.file=file;
> this.fos=fos;
> this.className=className;
> }
> }
> -
> +
> // rexxclass used to be an instance variable, on the theory that
> // each NetRexxEngine was an instance of a specific script.
> // BSF is currently reusing Engines, so caching the class
> // no longer makes sense.
> // Class rexxclass;
> -
> +
> /**
> * Constructor.
> */
> public NetRexxEngine ()
> {
> + // handle logger
> + logger = BSF_LogFactory.getLog(this.getClass().getName());
> /*
> The following line is intended to cause the constructor to
> throw a NoClassDefFoundError if the NetRexxC.zip dependency
> is not resolved.
> -
> +
> If this line was not here, the problem would not surface until
> the actual processing of a script. We want to know all is well
> at the time the engine is instantiated, not when we attempt to
> process a script.
> */
> -
> +
> new netrexx.lang.BadArgumentException();
> }
> /**
> @@ -145,7 +149,7 @@
> * passed to the extension, which may be either
> * Vectors of Nodes, or Strings.
> */
> - public Object call (Object object, String method, Object[] args)
> + public Object call (Object object, String method, Object[] args)
> throws BSFException
> {
> throw new BSFException(BSFException.REASON_UNSUPPORTED_FEATURE,
> @@ -160,7 +164,7 @@
> * passed to the extension, which may be either
> * Vectors of Nodes, or Strings.
> */
> - Object callStatic(Class rexxclass, String method, Object[] args)
> + Object callStatic(Class rexxclass, String method, Object[] args)
> throws BSFException
> {
> //***** ISSUE: Currently supports only static methods
> @@ -173,7 +177,7 @@
> Class[] argtypes=new Class[args.length];
> for(int i=0;i<args.length;++i)
> argtypes[i]=args[i].getClass();
> -
> +
> Method m=MethodUtils.getMethod(rexxclass, method, argtypes);
> retval=m.invoke(null,args);
> }
> @@ -243,26 +247,26 @@
> * Nobody knows whether javac is threadsafe.
> * I'm going to serialize access to the compilers to protect it.
> */
> - public Object execEvalShared (String source, int lineNo, int columnNo,
> + public Object execEvalShared (String source, int lineNo, int columnNo,
> Object oscript,boolean returnsObject)
> throws BSFException
> {
> Object retval=null;
> String classname=null;
> GeneratedFile gf=null;
> -
> +
> // Moved into the exec process; see comment above.
> Class rexxclass=null;
> -
> +
> String basescript=oscript.toString();
> String script=basescript; // May be altered by $$CLASSNAME$$ expansion
> -
> +
> try {
> // Do we already have a class exactly matching this code?
> rexxclass=(Class)codeToClass.get(basescript);
> -
> +
> if(rexxclass!=null)
> -
> +
> {
> logger.debug("NetRexxEngine: Found pre-compiled class" +
> " for script '" + basescript + "'");
> @@ -273,15 +277,15 @@
> gf=openUniqueFile(tempDir,"BSFNetRexx",".nrx");
> if(gf==null)
> throw new BSFException("couldn't create NetRexx scratchfile");
> -
> +
> // Obtain classname
> classname=gf.className;
> -
> +
> // Decide whether to declare a return type
> String returnsDecl="";
> if(returnsObject)
> returnsDecl="returns java.lang.Object";
> -
> +
> // Write the kluge header to the file.
> // ***** By doing so we give up the ability to use Property blocks.
> gf.fos.write(("class "+classname+";\n")
> @@ -290,7 +294,7 @@
> ("method BSFNetRexxEngineEntry(bsf=org.apache.bsf.util.BSFFunctions) "+
> " public static "+returnsDecl+";\n")
> .getBytes());
> -
> +
> // Edit the script to replace placeholder with the generated
> // classname. Note that this occurs _after_ the cache was
> // checked!
> @@ -312,50 +316,50 @@
> script=changed.toString();
> }
> }
> -
> +
> BSFDeclaredBean tempBean;
> String className;
> -
> +
> for (int i = 0; i < declaredBeans.size (); i++)
> {
> tempBean = (BSFDeclaredBean) declaredBeans.elementAt (i);
> className = StringUtils.getClassName (tempBean.type);
> -
> +
> gf.fos.write ((tempBean.name + " =" + className + " bsf.lookupBean(\"" +
> tempBean.name + "\");").getBytes());
> }
> -
> +
> if(returnsObject)
> gf.fos.write("return ".getBytes());
> -
> +
> // Copy the input to the file.
> // Assumes all available -- probably mistake, but same as
> // other engines.
> gf.fos.write(script.getBytes());
> gf.fos.close();
> -
> - logger.debug("NetRexxEngine: wrote temp file " +
> +
> + logger.debug("NetRexxEngine: wrote temp file " +
> gf.file.getPath () + ", now compiling");
> -
> +
> // Compile through Java to .class file
> String command=gf.file.getPath(); //classname;
> - if (logger.isDebugEnabled()) {
> + if (logger.isDebugEnabled()) {
> command += " -verbose4";
> } else {
> command += " -noverbose";
> command += " -noconsole";
> }
> -
> +
> netrexx.lang.Rexx cmdline= new netrexx.lang.Rexx(command);
> int retValue;
> -
> +
> // May not be threadsafe. Serialize access on static object:
> synchronized(serializeCompilation)
> {
> // compile to a .java file
> retValue =
> COM.ibm.netrexx.process.NetRexxC.main(cmdline,
> - new PrintWriter(System.err));
> + new PrintWriter(System.err));
> }
>
> // Check if there were errors while compiling the Rexx code.
> @@ -396,27 +400,27 @@
> {
> // Cleanup: delete the .nrx and .class files
> // (if any) generated by NetRexx Trace requests.
> -
> +
> if(gf!=null && gf.file!=null && gf.file.exists())
> gf.file.delete(); // .nrx file
> -
> +
> if(classname!=null)
> {
> // Generated src
> File file=new File(tempDir+File.separatorChar+classname+".java");
> if(file.exists())
> file.delete();
> -
> +
> // Generated class
> file=new File(classname+".class");
> if(file.exists())
> file.delete();
> -
> +
> // Can this be done without disrupting trace?
> file=new File(tempDir+File.separatorChar+classname+".crossref");
> if(file.exists())
> file.delete();
> -
> +
> // Search for and clean up minor classes, classname$xxx.class
> file=new File(tempDir);
> minorPrefix=classname+"$"; // Indirect arg to filter
> @@ -444,7 +448,7 @@
> }
> }
> }
> -
> +
> return retval;
> }
> public void initialize(BSFManager mgr, String lang,Vector declaredBeans)
> @@ -463,7 +467,7 @@
> String className = null;
> for(i=max,++uniqueFileOffset;
> fos==null && i>0;
> - --i,++uniqueFileOffset)
> + --i,++uniqueFileOffset)
> {
> // Probably a timing hazard here... ***************
> try
> Index: src/org/apache/bsf/BSF_Log.java
> ===================================================================
> --- src/org/apache/bsf/BSF_Log.java (revision 0)
> +++ src/org/apache/bsf/BSF_Log.java (revision 0)
> @@ -0,0 +1,358 @@
> +/*
> + * Copyright 2006 The Apache Software Foundation.
> + *
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +
> +package org.apache.bsf;
> +import java.lang.reflect.*;
> +
> +/** This class is used in BSF for logging (a delegator for <em>org.apache.commons.logging</em>,
> + * which is needed for compilation) using the <code>org.apache.commons.logging.Log</code>
> + * methods.
> +
> + Therefore this class implements all the <code>org.apache.commons.logging.Log</code>
> + methods. If <code>org.apache.commons.logging.LogFactory</code> is available, then this
> + * class is used to get an <code>org.apache.commons.logging.Log</code> instance to which to
> + * forward the message.
> +
> + * Therefore, if Apache's common logging is available, then it is employed.
> + * If Apache's commons logging is <em>not</em> available then a <em>no-op</em> behaviour
> + is employed, modelled after <code>org.apache.commons.logging.impl.NoOpLog</code>.
> +
> + @author Rony G. Flatscher, 2006-12-08
> +*/
> +
> +public class BSF_Log // implements org.apache.commons.logging.Log
> +{
> + static private Class oac_LogFactory = null;
> + static private Method oac_LogFactoryGetLog_Clazz = null;
> + static private Method oac_LogFactoryGetLog_String = null;
> +
> + { // try to demand load the apache commons logging LogFactory
> + try
> + {
> + ClassLoader cl= Thread.currentThread().getContextClassLoader();
> + oac_LogFactory = cl.loadClass("org.apache.commons.logging.LogFactory");
> +
> + // get method with Class object argument
> + oac_LogFactoryGetLog_Clazz = oac_LogFactory.getMethod("getLog", new Class[] {Class.class});
> +
> + // get method with String object argument
> + oac_LogFactoryGetLog_String = oac_LogFactory.getMethod("getLog", new Class[] {String.class});
> + }
> +
> + catch (ClassNotFoundException e) { ; } // o.k., so we do not use org.apache.commons.logging in this run
> + catch (NoSuchMethodException e) { ; } // o.k., so we do not use org.apache.commons.logging in this run
> + }
> +
> +
> + /** Name of the BSF_Log instance. */
> + String name=null;
> +
> + /** Proxy object for <em>org.apache.commons.logging.Log</em>, if available. */
> + private Object oac_logger=null;
> +
> +
> + public BSF_Log()
> + {
> + this.name="<?>";
> + if (oac_LogFactory!=null)
> + {
> + try // try to get an org.apache.commons.logging.Log object from the LogFactory
> + {
> + oac_logger=oac_LogFactoryGetLog_String.invoke(oac_LogFactory, new Object[] {this.name});
> + }
> + catch (Exception e) { e.printStackTrace(); }
> + }
> + };
> +
> + public BSF_Log(String name)
> + {
> + this.name=name;
> + if (oac_LogFactory!=null)
> + {
> + try // try to get an org.apache.commons.logging.Log object from the LogFactory
> + {
> + oac_logger=oac_LogFactoryGetLog_String.invoke(oac_LogFactory, new Object[] {name});
> + }
> + catch (Exception e) { e.printStackTrace(); }
> + }
> + };
> +
> + public BSF_Log(Class clazz)
> + {
> + this.name=clazz.getName();
> + if (oac_LogFactory!=null)
> + {
> + try // try to get an org.apache.commons.logging.Log object from the LogFactory
> + {
> + oac_logger=oac_LogFactoryGetLog_Clazz.invoke(oac_LogFactory, new Object[] {clazz});
> + }
> + catch (Exception e) { e.printStackTrace(); }
> + }
> + };
> +
> + // --------------------------------------------------------------------
> + public void debug(Object msg)
> + {
> + if (oac_logger==null) return; // no org.apache.commons.logging.Log object ?
> +
> + try
> + {
> + ((org.apache.commons.logging.Log) oac_logger).debug(msg);
> + }
> + catch (Exception e) { e.printStackTrace(); }
> + };
> +
> + public void debug(Object msg, Throwable t)
> + {
> + if (oac_logger==null) return; // no org.apache.commons.logging.Log object ?
> +
> + try
> + {
> + ((org.apache.commons.logging.Log) oac_logger).debug(msg, t);
> + }
> + catch (Exception e) { e.printStackTrace(); }
> + };
> +
> + // --------------------------------------------------------------------
> + public void error(Object msg)
> + {
> + if (oac_logger==null) return; // no org.apache.commons.logging.Log object ?
> +
> + try
> + {
> + ((org.apache.commons.logging.Log) oac_logger).error(msg);
> + }
> + catch (Exception e) { e.printStackTrace(); }
> + };
> +
> + public void error(Object msg, Throwable t)
> + {
> + if (oac_logger==null) return; // no org.apache.commons.logging.Log object ?
> +
> + try
> + {
> + ((org.apache.commons.logging.Log) oac_logger).error(msg, t);
> + }
> + catch (Exception e) { e.printStackTrace(); }
> + };
> +
> +
> + // --------------------------------------------------------------------
> + public void fatal(Object msg)
> + {
> + if (oac_logger==null) return; // no org.apache.commons.logging.Log object ?
> +
> + try
> + {
> + ((org.apache.commons.logging.Log) oac_logger).fatal(msg);
> + }
> + catch (Exception e) { e.printStackTrace(); }
> + };
> +
> + public void fatal(Object msg, Throwable t)
> + {
> + if (oac_logger==null) return; // no org.apache.commons.logging.Log object ?
> + try
> + {
> + ((org.apache.commons.logging.Log) oac_logger).fatal(msg, t);
> + }
> + catch (Exception e) { e.printStackTrace(); }
> + };
> +
> +
> + // --------------------------------------------------------------------
> + public void info (Object msg)
> + {
> + if (oac_logger==null) return; // no org.apache.commons.logging.Log object ?
> +
> + try
> + {
> + ((org.apache.commons.logging.Log) oac_logger).info(msg);
> + }
> + catch (Exception e) { e.printStackTrace(); }
> + };
> +
> + public void info (Object msg, Throwable t)
> + {
> + if (oac_logger==null) return; // no org.apache.commons.logging.Log object ?
> +
> + try
> + {
> + ((org.apache.commons.logging.Log) oac_logger).info(msg, t);
> + }
> + catch (Exception e) { e.printStackTrace(); }
> + };
> +
> +
> + // --------------------------------------------------------------------
> + public void trace(Object msg)
> + {
> + if (oac_logger==null) return; // no org.apache.commons.logging.Log object ?
> +
> + try
> + {
> + ((org.apache.commons.logging.Log) oac_logger).trace(msg);
> + }
> + catch (Exception e) { e.printStackTrace(); }
> + };
> +
> + public void trace(Object msg, Throwable t)
> + {
> + if (oac_logger==null) return; // no org.apache.commons.logging.Log object ?
> +
> + try
> + {
> + ((org.apache.commons.logging.Log) oac_logger).trace(msg, t);
> + }
> + catch (Exception e) { e.printStackTrace(); }
> + };
> +
> +
> + // --------------------------------------------------------------------
> + public void warn (Object msg)
> + {
> + if (oac_logger==null) return; // no org.apache.commons.logging.Log object ?
> +
> + try
> + {
> + ((org.apache.commons.logging.Log) oac_logger).warn(msg);
> + }
> + catch (Exception e) { e.printStackTrace(); }
> + };
> +
> + public void warn (Object msg, Throwable t)
> + {
> + if (oac_logger==null) return; // no org.apache.commons.logging.Log object ?
> +
> + try
> + {
> + ((org.apache.commons.logging.Log) oac_logger).warn(msg, t);
> + }
> + catch (Exception e) { e.printStackTrace(); }
> + };
> +
> +
> + // --------------------------------------------------------------------
> + // --------------------------------------------------------------------
> + public boolean isDebugEnabled()
> + {
> + if (oac_logger==null) {return false;} // no org.apache.commons.logging.Log object ?
> +
> + try
> + {
> + return ((org.apache.commons.logging.Log) oac_logger).isDebugEnabled();
> + }
> + catch (Exception e) { ; }
> + finally { return false; }
> + }
> +
> + public boolean isErrorEnabled()
> + {
> + if (oac_logger==null) return false; // no org.apache.commons.logging.Log object ?
> +
> + try
> + {
> + return ((org.apache.commons.logging.Log) oac_logger).isErrorEnabled();
> + }
> + catch (Exception e) { ; }
> + finally { return false; }
> + }
> +
> + public boolean isFatalEnabled()
> + {
> + if (oac_logger==null) return false; // no org.apache.commons.logging.Log object ?
> +
> + try
> + {
> + return ((org.apache.commons.logging.Log) oac_logger).isFatalEnabled();
> + }
> + catch (Exception e) { ; }
> + finally { return false; }
> + }
> +
> + public boolean isInfoEnabled ()
> + {
> + if (oac_logger==null) return false; // no org.apache.commons.logging.Log object ?
> +
> + try
> + {
> + return ((org.apache.commons.logging.Log) oac_logger).isInfoEnabled();
> + }
> + catch (Exception e) { ; }
> + finally { return false; }
> + }
> +
> + public boolean isTraceEnabled()
> + {
> + if (oac_logger==null) return false; // no org.apache.commons.logging.Log object ?
> +
> + try
> + {
> + return ((org.apache.commons.logging.Log) oac_logger).isTraceEnabled();
> + }
> + catch (Exception e) { ; }
> + finally { return false; }
> + }
> +
> + public boolean isWarnEnabled ()
> + {
> + if (oac_logger==null) return false; // no org.apache.commons.logging.Log object ?
> +
> + try
> + {
> + return ((org.apache.commons.logging.Log) oac_logger).isWarnEnabled();
> + }
> + catch (Exception e) { ; }
> + finally { return false; }
> + }
> +
> +
> + // for development purposes only (to debug this class on its own)
> + public static void main (String args[]) {
> + System.out.println("in BSF_Log ...");
> + System.out.println("--------------------------------------------------------");
> + System.out.println("--------------------------------------------------------");
> + BSF_Log bl=new BSF_Log();
> + dump(bl);
> + bl=new BSF_Log(Class.class);
> + dump(bl);
> + bl=new BSF_Log("Rony was here...");
> + dump(bl);
> +
> + }
> +
> + static void dump(BSF_Log bl)
> + {
> + System.out.println("\n\tbl=["+bl+"] <<<--- <<<--- <<<---");
> + bl.debug("debug message. ");
> + bl.error("error message. ");
> + bl.fatal("fatal message. ");
> + bl.info ("info message. ");
> + bl.trace("trace message. ");
> + bl.warn ("warn message. ");
> +
> + System.out.println("\tisDebugEnabled: "+bl.isDebugEnabled());
> + System.out.println("\tisErrorEnabled: "+bl.isErrorEnabled());
> + System.out.println("\tisFatalEnabled: "+bl.isFatalEnabled());
> + System.out.println("\tisInfo Enabled: "+bl.isInfoEnabled());
> + System.out.println("\tisTraceEnabled: "+bl.isTraceEnabled());
> + System.out.println("\tisWarn Enabled: "+bl.isWarnEnabled());
> +
> + System.out.println("\tbl=["+bl+"] --->>> --->>> --->>>");
> + System.out.println("--------------------------------------------------------");
> + }
> +}
> +
>
> Property changes on: src/org/apache/bsf/BSF_Log.java
> ___________________________________________________________________
> Name: svn:executable
> + *
> Name: svn:keywords
> + Author Date Rev Id URL
>
> Index: src/org/apache/bsf/util/event/generator/EventAdapterGenerator.java
> ===================================================================
> --- src/org/apache/bsf/util/event/generator/EventAdapterGenerator.java (revision 483957)
> +++ src/org/apache/bsf/util/event/generator/EventAdapterGenerator.java (working copy)
> @@ -1,12 +1,12 @@
> /*
> * Copyright 2004,2004 The Apache Software Foundation.
> - *
> + *
> * Licensed under the Apache License, Version 2.0 (the "License");
> * you may not use this file except in compliance with the License.
> * You may obtain a copy of the License at
> - *
> + *
> * http://www.apache.org/licenses/LICENSE-2.0
> - *
> + *
> * Unless required by applicable law or agreed to in writing, software
> * distributed under the License is distributed on an "AS IS" BASIS,
> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> @@ -16,16 +16,18 @@
>
> package org.apache.bsf.util.event.generator;
>
> +import org.apache.bsf.BSF_Log;
> +import org.apache.bsf.BSF_LogFactory;
> +
> import java.io.FileOutputStream;
> import java.io.IOException;
>
> -import org.apache.commons.logging.Log;
> -import org.apache.commons.logging.LogFactory;
>
> /** EventAdapterGenerator
> *
> * Generate an "Event Adapter" dynamically during program execution
> *
> + * @author Rony G. Flatscher (added BSF_Log[Factory] to allow BSF to run without org.apache.commons.logging present)
> **/
> public class EventAdapterGenerator
> {
> @@ -44,13 +46,13 @@
> // the initialization method, noargs constructor
> static byte INITMETHOD[];
>
> - private static Log logger;
> + private static BSF_Log logger=null;
>
> /* The static initializer */
> static
> {
> - logger = LogFactory.getLog(
> - (org.apache.bsf.util.event.generator.EventAdapterGenerator.class).getName());
> + // logger = LogFactory.getLog((org.apache.bsf.util.event.generator.EventAdapterGenerator.class).getName());
> + logger = BSF_LogFactory.getLog((org.apache.bsf.util.event.generator.EventAdapterGenerator.class).getName());
>
> String USERCLASSPACKAGE = System.getProperty("DynamicEventClassPackage",
> "");
> Index: src/org/apache/bsf/util/event/generator/AdapterClassLoader.java
> ===================================================================
> --- src/org/apache/bsf/util/event/generator/AdapterClassLoader.java (revision 483957)
> +++ src/org/apache/bsf/util/event/generator/AdapterClassLoader.java (working copy)
> @@ -1,36 +1,41 @@
> /*
> * Copyright 2004,2004 The Apache Software Foundation.
> - *
> + *
> * Licensed under the Apache License, Version 2.0 (the "License");
> * you may not use this file except in compliance with the License.
> * You may obtain a copy of the License at
> - *
> + *
> * http://www.apache.org/licenses/LICENSE-2.0
> - *
> + *
> * Unless required by applicable law or agreed to in writing, software
> * distributed under the License is distributed on an "AS IS" BASIS,
> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> * See the License for the specific language governing permissions and
> * limitations under the License.
> + *
> + * @author Rony G. Flatscher (added BSF_Log[Factory] to allow BSF to run without org.apache.commons.logging present)
> */
>
> package org.apache.bsf.util.event.generator;
>
> +import org.apache.bsf.BSF_Log;
> +import org.apache.bsf.BSF_LogFactory;
> +
> import java.util.Hashtable;
>
> -import org.apache.commons.logging.Log;
> -import org.apache.commons.logging.LogFactory;
>
> public class AdapterClassLoader extends ClassLoader
> {
> private static Hashtable classCache = new Hashtable();
> private Class c;
>
> - private Log logger = LogFactory.getLog(this.getClass().getName());
> + // private Log logger = LogFactory.getLog(this.getClass().getName());
> + private BSF_Log logger = null;
>
> public AdapterClassLoader()
> {
> super();
> + logger = BSF_LogFactory.getLog(this.getClass().getName());
> }
> public synchronized Class defineClass(String name, byte[] b)
> {
> Index: src/org/apache/bsf/util/JavaUtils.java
> ===================================================================
> --- src/org/apache/bsf/util/JavaUtils.java (revision 483957)
> +++ src/org/apache/bsf/util/JavaUtils.java (working copy)
> @@ -1,34 +1,36 @@
> /*
> * Copyright 2004,2004 The Apache Software Foundation.
> - *
> + *
> * Licensed under the Apache License, Version 2.0 (the "License");
> * you may not use this file except in compliance with the License.
> * You may obtain a copy of the License at
> - *
> + *
> * http://www.apache.org/licenses/LICENSE-2.0
> - *
> + *
> * Unless required by applicable law or agreed to in writing, software
> * distributed under the License is distributed on an "AS IS" BASIS,
> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> * See the License for the specific language governing permissions and
> * limitations under the License.
> + *
> + * @author Rony G. Flatscher (added BSF_Log[Factory] to allow BSF to run without org.apache.commons.logging present)
> */
>
> package org.apache.bsf.util;
>
> +import org.apache.bsf.BSF_Log;
> +import org.apache.bsf.BSF_LogFactory;
> +
> import java.io.IOException;
>
> -import org.apache.commons.logging.Log;
> -import org.apache.commons.logging.LogFactory;
> -
> public class JavaUtils {
> // Temporarily copied from JavaEngine...
>
> - private static Log logger;
> + private static BSF_Log logger=null;
>
> static {
> - logger = LogFactory.getLog((org.apache.bsf.util.JavaUtils.class)
> - .getName());
> + // handle logger
> + logger = BSF_LogFactory.getLog((org.apache.bsf.util.JavaUtils.class).getName());
> }
>
> public static boolean JDKcompile(String fileName, String classPath) {
> Index: build-properties.xml
> ===================================================================
> --- build-properties.xml (revision 483957)
> +++ build-properties.xml (working copy)
> @@ -2,7 +2,7 @@
> <project name="props">
> <property name="project.name" value="bsf"/>
> <property name="project.fullName" value="Bean Scripting Framework"/>
> - <property name="project.version" value="2.4.0-20061006"/>
> + <property name="project.version" value="2.4.1-20061208"/>
> <property name="project.debug" value="on"/>
> <property name="project.deprecation" value="on"/>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: bsf-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: bsf-dev-help@jakarta.apache.org
--
Sanjiva Weerawarana, Ph.D.
Founder & Director; Lanka Software Foundation; http://www.opensource.lk/
Founder, Chairman & CEO; WSO2, Inc.; http://www.wso2.com/
Director; Open Source Initiative; http://www.opensource.org/
Member; Apache Software Foundation; http://www.apache.org/
Visiting Lecturer; University of Moratuwa; http://www.cse.mrt.ac.lk/
---------------------------------------------------------------------
To unsubscribe, e-mail: bsf-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: bsf-dev-help@jakarta.apache.org
Re: Question ad logging ...
Posted by "Rony G. Flatscher" <Ro...@wu-wien.ac.at>.
Hi there,
in the meantime I was able to work on the logging problem.
The problem: BSF 2.4.0 needs org.apache.commons.logging to be available.
Depending on the location where BSF and commons-logging gets installed,
problems may pop up (e.g. if commons-logging is located in an
ext-directory and an app is employing an own copy of commons-logging).
This solution creates a BSF_LogFactory and BSF_Log class which will by
default behave as an no-op logger. In case commons-logging LogFactory
and Log is available, it will be used. Hence the functionality remains
the same, but the change will allow BSF to run without commons-logging
present.
A build incorporating all the necessary changes can be downloaded from
<http://wi.wu-wien.ac.at/rgf/tmp/bsf.tmp/>.
The diff file is attached to this e-mail .
If I do not hear anything back until the end of the next week, I will
check the changes in.
Regards,
---rony
Re: Question ad logging ...
Posted by Sanka Samaranayke <ss...@gmail.com>.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Rony G. Flatscher wrote:
> Hi there,
>
> at the moment BSF needs commons logging to run. Now, how about
> allowing BSF to work even in the case that no commons-logging is
> available to it?
>
> Would anyone object if I changed the code such that BSF runs
> without commons logging available (doing no logging at all then),
> and if commons logging is available, BSF uses it?
I don't see any problem with that. Pls go ahead.
Best,
Sanka
>
> Regards,
>
> ---rony
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: bsf-dev-unsubscribe@jakarta.apache.org For
> additional commands, e-mail: bsf-dev-help@jakarta.apache.org
>
>
- --
Sanka Samaranayake
WSO2 Inc.
http://sankas.blogspot.com/
http://www.wso2.net/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.1 (GNU/Linux)
iD8DBQFFdGJu/Hd0ETKdgNIRAhNmAJ4juV8dNMn3fet0dKj3c0cfGCs+uACeOjg8
IDjYqSn+LUj+VQtklnWt3S0=
=sP5g
-----END PGP SIGNATURE-----
---------------------------------------------------------------------
To unsubscribe, e-mail: bsf-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: bsf-dev-help@jakarta.apache.org