Проблема с запуском нового JRuby ScriptingContainer и настройкой Output & Error PrintStreams - PullRequest
1 голос
/ 02 августа 2011

Я встраиваю JRuby с помощью Red Bridge в приложение и, похоже, возникают проблемы с установкой и ошибкой. В моих тестах используется PrintStream, который записывает в StringBuilder, после выполнения каких-либо действий с JRuby я проверяю материал, напечатанный с помощью puts. Проблема только в первых setOutput работах, на которые печатается каждый.

Простой пример ниже демонстрирует проблему. Он использует PrintStream s, которые пишут в разные файлы, чтобы продемонстрировать проблему. Просмотр вашей файловой системы покажет, что все идет к первому «файлу», когда можно ожидать, что файлы 2 и 3 также будут записаны.

package XXX.jruby;

import java.io.PrintStream;

import org.jruby.embed.LocalContextScope;
import org.jruby.embed.LocalVariableBehavior;
import org.jruby.embed.ScriptingContainer;

public class JRubyShellPutsProblem {

    public static void main(String[] args) throws Exception {
        for (int i = 0; i < 3; i++) {
            final ScriptingContainer container = new ScriptingContainer(LocalContextScope.CONCURRENT, LocalVariableBehavior.PERSISTENT);
            // container.resetWriter();
            // container.resetErrorWriter();

            final PrintStream printStream = new PrintStream("d:\\out" + i + ".txt");
            container.setOutput(printStream);
            container.setError(printStream);

            container.runScriptlet("puts \"hello" + i + "\"\n");
            printStream.flush();
            container.terminate();
        }
    }
}

Я пробовал ScriptingContainer.resetWriter, но это не работает, как можно было ожидать. Иногда вещи записываются в файлы 1 и 2, но ничего не записываются в 3.

1 Ответ

0 голосов
/ 05 августа 2011

Я изменил LocalContextScope на THREADSAFE с CONCURRENT, и это, похоже, решило проблему.

...