JRuby 1.6.1- ошибка константы в зависимости от factory.getEngineByName(«jruby»)

#jruby #nameerror #scriptengine

#jruby #ошибка nameerror #scriptengine

Вопрос:

Я столкнулся с интересной проблемой при обновлении JRuby с 1.5.2 до 1.6.1. Она не давала мне покоя все выходные, пока я не свел ее к нескольким строкам. Похоже, что где-то могла быть введена ошибка, которая вызывает сбой, когда getEngineByName вызывается слишком много раз. Например, следующий суперпростой код работает в 1.5.2, но завершается сбоем в 1.6.1 примерно после 10-20 итераций:

     ScriptEngineManager factory = new ScriptEngineManager();
    for (int i = 0; i < 10000; i  ) {
        System.out.println(i);
        ScriptEngine engine = factory.getEngineByName("jruby");
        engine.eval("puts 'hello'");
    }
  

Результат в 1.6.1 после #16:

 NameError: uninitialized constant #<Class:0x101a41cc7>::ARGV
  const_missing at org/jruby/RubyModule.java:2526
Exception in thread "main" java.lang.NullPointerException
    at org.jruby.embed.jsr223.JRubyEngine.wrapException(JRubyEngine.java:110)
    at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:93)
    at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:154)
    at JRubyTestFailure.main(JRubyTestFailure.java:16)
  

Чтобы избежать проблемы, все, что вам нужно сделать, это переместить getEngineByName за пределы цикла:

     ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("jruby");
    for (int i = 0; i < 10000; i  ) {
        System.out.println(i);
        engine.eval("puts 'hello'");
    }
  

К сожалению, это не так просто для моего приложения по архитектурным причинам. Возможно, мне придется поместить отдельные экземпляры ScriptEngine в ThreadLocal. Однако меня беспокоит непонимание того, почему это не удается.

Есть идеи о том, почему я получаю эту ошибку «NameError: неинициализированная константа» от? Нет, я еще не пробовал проверять исходный код…

Комментарии:

1. Ой, только что столкнулся с этим сам. У вас возникла проблема с jruby?

2. Возникло здесь: jira.codehaus.org/browse/JRUBY-5734