variables not visible when log4j jar is missing
-----------------------------------------------

                 Key: JRUBY-5305
                 URL: http://jira.codehaus.org/browse/JRUBY-5305
             Project: JRuby
          Issue Type: Bug
          Components: Java Integration
    Affects Versions: JRuby 1.5.5
         Environment: Java 1.6, MacOSX 10.6.5
            Reporter: Christoph Rueger
            Priority: Minor


I discovered a strange phenomenon today where a ruby script stopped working 
when log4j-1.2.14.jar was removed from the classpath. 

This is the java code starting the scripting environment:
{code}
// Ruby code in a String
        String script = requestObj.getCode(); // this is the ruby script..see 
below
        
        ScriptingContainer container = new 
ScriptingContainer(LocalVariableBehavior.GLOBAL);
        container.put("xml","<xml>some xml content...etc.</xml>")        
        
        EmbedEvalUnit parse = container.parse(script, 0);
        IRubyObject run = parse.run();
        String scriptResultString = container.callMethod(run, "getString", 
String.class);
{code}

Here is the ruby code which is inside the *script* variable above:
{code}
def getString
    puts "test" + $xml
end
{code}


Here is the situation:
The output until today was that the *getString* method was executed and the 
output was:
{code}
<xml>some xml content...etc.</xml>
{code}

Today I discovered an unneeded log4j-1.2.14.jar in my classpath, which I wanted 
to be removed (more to this later). 
After I removed the log4j-1.2.14.jar from the classpath the code above suddenly 
stopped working with the following stacktrace in the console:

{code}
<script>:4:in `getString': can't convert nil into String (TypeError)
        from <script>:2
{code}

and the following stacktrace in the logfile:
{code}
org.jruby.embed.InvokeFailedException: can't convert nil into String
        at 
org.jruby.embed.internal.EmbedRubyObjectAdapterImpl.call(EmbedRubyObjectAdapterImpl.java:397)
        at 
org.jruby.embed.internal.EmbedRubyObjectAdapterImpl.callMethod(EmbedRubyObjectAdapterImpl.java:144)
        at 
org.jruby.embed.ScriptingContainer.callMethod(ScriptingContainer.java:1275)
        at 
com.synesty.myapplication.scripting.ruby.internal.JRubyExecutorImpl.executeStep(JRubyExecutorImpl.java:113)
...

Caused by: org.jruby.exceptions.RaiseException: can't convert nil into String
        at (unknown).new(<script>:4)
        at Object.getString(<script>:2)
        at (unknown).(unknown)(:1)
{code}


*Why I want to remove the log4j jar?*
I am running a web-app in an OSGI environment using SLF4J for logging and the 
accordant bridges so that I can capture the logging calls of the other 
frameworks (Java.util (JUL) and apache.commons.logging (JCL)) and pipe it into 
my slf4j implementation (i am using logback). In order to do that, all native 
log4j and jcl  implementations need to be removed from the classpath, as the 
slf4j bridges are exposing the 'fake' jcl and log4j packages. anyway, that's 
just for the background and that generally works. 

But today I discovered that there is still a log4j jar in the classpath, and as 
I wanted to clean this up to avoid possible side effects I removed it from the 
classpath.
But this has introduced the problem described above that my ruby code stopped 
working. 


*Is there some exception swallowed somewhere which I don't see?*
I am puzzled. I don't see how the absence or presence of log4j jar should 
affect the Scripting environment for jRuby in java. Is there maybe something I 
haven't seen yet? Maybe some more logging output, which I am not capturing 
right now or which is swallowed? Any hints what else I could do to debug?

*Is this reproducible?*
Yes. As soon as I put back the log4j jar the ruby code starts working again. 
Other parts of my application seem to be unaffected by the absence of the log4j 
jar. 


Thanks for your help, and sorry if this was the wrong place for this kind of 
problem.

Christoph


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to