Нэшорн нажимает лимит с парами значений ключей?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Нэшорн нажимает лимит с парами значений ключей?

Сообщение Anonymous »

Я внезапно сталкиваюсь с проблемой с Нашорном с момента внесения изменений, но я не уверен в фактической основной причине проблемы , но, похоже, связано с тем, сколько пары ключевых значений добавлено в двигатель .
Я использую Nashorn (Nashorn 15.3). Переменные, существует о 200 переменных маски .
Например, пользователь определяет маску как артист - альбом
Затем для каждой песни мы делаем следующее:

ScriptEngine engine = new org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory().getScriptEngine();
for(SongFieldName next:SongFieldName.values())
{
engine.put(next.getScriptVar(), song.getFieldValue(next.getSongFieldKey());
}
file.setFilename((String)engine.eval(mask));
< /code>
Итак, мы получаем двигатель скрипта, а затем для песни мы размещаем пары значений ключей, содержащую переменную маски (например, артист) и фактическое значение в песне (например, Stevie Wonder), затем мы оцениваем маску и используем ее для установки имени файла, это работало нормально в течение многих лет. < /p>
Однако значения. Например, значение художника может содержать несколько человек, поэтому я хотел, чтобы у меня было простой способ использования, чтобы просто получить индексированное значение. Таким образом, для каждой переменной я создавал 10 версий, каждая из которых отображается со следующим индексированным значением или пустым, если не имеет значения следующим образом. < /P>
List values = song.getFieldValues(next.getSongFieldKey());
for(int i=0; i < 10;i++)
{
if(values.size()>i)
{
engine.put(next.getScriptVar() + "_index" + i,values.get(i));
}
else
{
engine.put(next.getScriptVar() + "_index" + i, "");
}
}

Это казалось хорошим, но клиент сообщил о проблеме, и я повторил проблему, которая возникает только тогда, когда добавляется этот дополнительный код.javax.script.ScriptException: ReferenceError: "discno" is not defined in at line number 81
at org.openjdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:463)
at org.openjdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:447)
at org.openjdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:399)
at org.openjdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:395)
at org.openjdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:151)
at java.scripting/javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:262)

Таким образом, кажется, что, возможно, я достигаю некоторого предела, и теперь он перезаписывается, когда вместо добавления 200 переменных я добавляю приблизительно 2000 переменных в двигатель? /> Или мне нужно синхронизировать использование сценаризма, так как он возвращается с фабрики? /> Код Factory getScriptengine () выглядит следующим образом < /p>
< /li>
< /ol>

public ScriptEngine getScriptEngine()
{
try {
return new NashornScriptEngine(this, DEFAULT_OPTIONS, getAppClassLoader(), (ClassFilter)null);
} catch (RuntimeException var2) {
RuntimeException e = var2;
if (Context.DEBUG) {
e.printStackTrace();
}

throw e;
}
}

Таким образом, мы не повторно используем тот же двигатель сценария, но, возможно, двигатель скрипта разделяет переменную кеш? /> Обновление 2 < /h2>
Я изменил код для индексированных переменных, чтобы сохранить массив для каждого имени FieldName, и это имеет решающую проблему, хотя я не знаю, почему. < /p>
engine.put(next.getScriptVar(), cleanValue(next.getSongFieldKey(), song.getFieldValueSemiColonAndSpaceSeparatedOrEmptyString(next.getSongFieldKey())));
addIndexedValues( engine, song, next);

private static void addIndexedValues( ScriptEngine engine, Song song, SongFieldName fieldName)
{
List values = song.getFieldValues(fieldName.getSongFieldKey());
String[] value = new String[INDEX_SIZE];
for(int i=0; i < INDEX_SIZE;i++)
{
if(values.size()>i)
{
value = cleanValue(fieldName.getSongFieldKey(), values.get(i));
}
else
{
value = "";
}
}
engine.put(fieldName.getScriptVar() + "_index", value);
}


Подробнее здесь: https://stackoverflow.com/questions/789 ... alue-pairs
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Гибридное шифрование с открытым ключом (HPKE) с детерминированно генерируемыми парами ключей с помощью Tink
    Anonymous » » в форуме JAVA
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous
  • Как эффективно структурировать логику преобразования между парами моделей в Django?
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Замена узлов парами в Java
    Anonymous » » в форуме JAVA
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Замена узлов парами в Java
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Получить среднее значение между последовательными парами массива numpy
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»