Nano Hash - криптовалюты, майнинг, программирование

Возникло исключение при вызове метода NotesAgent.runWithDocumentContext(lotus.domino.local.Document) null

Я работаю с XPages довольно давно и всегда игнорировал эту ошибку, но хотел бы понять причину (и/или решение, если возможно).

Итак, мой агент XPage при вызове из моей сети работает отлично. Однако добавление библиотеки сценариев JAVA к агенту приведет к ошибке, упомянутой в заголовке моего вопроса. Я видел эту ошибку много раз, и очевидной причиной, по которой я знаю, является то, что документ является нулевым, но в этом случае я уверен, что документ не является нулевым (поскольку он работает без дополнительного скрипта). Пожалуйста, найдите ниже код для каждого из них.

// Javascript: default.js
var uId = myList.get(0); // this contains the document unique id
var doc:NotesDocument = database.getDocumentByUNID(uId);
var agentName = "groupRobot" ;
var agent:NotesAgent = database.getAgent(agentName);
if (agent != null)
{
if(doc == null){
// do nothing
}else{
agent.runWithDocumentContext(doc);
}
}
else {
getComponent("warningmessageBox").setValue("Failed to run the agent");
}


// Agent : groupRobot

public class JavaAgent extends AgentBase {
Session session;
public void NotesMain() {
session = getSession();
//       ExtractGroup extract_group = new ExtractGroup();
//        extract_group.setSession(session);
//        boolean populatePersons = extract_group.start(); // calling the attached script library to replace group by persons
if(true){
System.out.println("Script finished sucessfully");
}
} // End of Notes Main
} // End of Class

// JAVA SCRIPT LIBRARY : extract_group

public class ExtractGroup {
Session session;
Vector<String> users= new Vector<String>();
Vector<String> groups= new Vector<String>();

public void setSession(Session session) {
this.session = session;
}
public boolean start() {
return true; // removed original code for being more clear
}
} // End of Class

Я не могу понять причину этого. Любая помощь будет действительно оценена.

Спасибо!

P.S. Я разрешил ограниченные операции с правами администратора для агента, а также выбрал опцию «Запуск от имени веб-пользователя».

Редактировать 1: Основываясь на предложении Кнута Херрманна, я попытался создать те же библиотеки и файлы в новой базе данных и оказалось, что это работает. Что ж, теперь проблема в том, что моя рабочая база данных не работает, и я не могу воспроизвести ошибку в новой базе данных. Любые предложения по созданию этой ошибки в новой базе данных и/или удалению этой ошибки из старой базы данных были бы замечательными. Спасибо..!


23.05.2014

  • Похоже, ваша переменная документа имеет значение null. Без источника, откуда он взялся и что вы с ним сделали, остается только гадать. 23.05.2014
  • Нет, это не null. Как я уже упоминал в своем вопросе, он хорошо работает без библиотеки сценариев Java. . 23.05.2014
  • все же вы оставляете зрителям гадать: смотрите, работает, но когда я что-то добавляю, оно перестает работать, но я не говорю ни откуда взялся документ, ни что внутри библиотеки ломает мой код. РОФЛ 23.05.2014
  • Прошу прощения, если было не ясно. Я добавлю библиотеку через несколько минут, чтобы сделать ее еще более понятной. 23.05.2014
  • Пожалуйста, проверьте улучшенный вопрос. Извините, если это было неясно..!.. Спасибо за предложение. 23.05.2014
  • Возможно, session имеет значение null в библиотеке Java. 23.05.2014
  • @Lauri: Он даже не доходит туда. Он генерирует исключение перед вызовом агента. Странно то, что я даже не использую библиотеку сценариев Java. Я только что импортировал его. 23.05.2014
  • Создал тестовое приложение. Ваш пример кода отлично работает для меня. 23.05.2014
  • Да, позвольте мне попробовать еще раз. Я точно не пробовал тот же самый пример. У меня есть больше кода внутри агента (только что удалил его здесь). Но я создам нового агента, чтобы найти источник ошибки. Спасибо :) 23.05.2014
  • Вы можете добавить блоки java try...catch с exception.printStackTrace() как в свой агент, так и в библиотеку. Таким образом, вы получите точную строку кода, которая вызывает ошибку (если причина в Java, а не в SSJS). Следует следить за кодом в блоке инициализации (например, new Vector()). 23.05.2014

Ответы:


1

Установите «Запуск от имени веб-пользователя» на вкладке «Безопасность агентов».

Подробнее см. здесь.

23.05.2014
  • Забыл сказать, уже сделал. :). Как я уже упоминал в своем вопросе, он отлично работает без сценария JAVA. 23.05.2014
  • Хм, без опции «Запуск от имени веб-пользователя» я получил точно такое же сообщение об ошибке, как и вы :-) 23.05.2014
  • Да, это правда, без выбора этой опции мы получаем эту ошибку. Однако это что-то другое, я думаю. Вы пытались добавить внешний JAVA SCRIPT (НЕ JAVASCRIPT)? 23.05.2014
  • Да, именно ваш пример. 23.05.2014
  • Да, позвольте мне попробовать еще раз. Я точно не пробовал тот же самый пример. У меня есть больше кода внутри агента. Но я создам нового агента, чтобы найти источник ошибки. Спасибо :) 23.05.2014
  • Все еще получаю ту же ошибку. Я создал новый агент и только что импортировал библиотеку java-скриптов, и он выдает ошибку. 23.05.2014
  • Попробуйте с новой пустой базой данных... Сейчас у меня версия 8.5.3. Ты тоже? 23.05.2014
  • Да, в той же версии... позвольте мне протестировать новую базу данных (через несколько часов, просто вне офиса) и отправить вам ответ... спасибо за ваш ответ :) 23.05.2014
  • Сбивает с толку. Вы можете импортировать классы Java или файлы jar. Нет ничего лучше Java-скрипта. Java компилируется. Значит что-то не так в классе или настройках компилятора. 23.05.2014
  • Кстати: вы уверены, что в этом случае лучше использовать агента? Это имеет смысл только в том случае, если вы также используете агент из классического клиента Notes. В противном случае гораздо эффективнее выполнять код Java из XPages SSJS напрямую. Агент имеет свою собственную полную среду JVM и в значительной степени отделен от мира XPages. 24.05.2014
  • @stwissel: сбивает с толку? ... это старый мир Java в Notes Domino. Один из способов совместного использования классов Java между агентами Java заключается в создании библиотек ScriptLibraries типа Java и их импорте в агент как библиотека сценариев. Затем они появляются в папке Lib. 24.05.2014
  • Привет, извините за поздний ответ. Я попробовал это на новой базе данных, и она работает хорошо, однако я не могу воспроизвести ошибку в новой базе данных. Есть идеи, что здесь может быть не так? 27.05.2014
  • @предыдущий комментарий: Да, вроде как нужно запустить агент, так как у него есть опции для работы с контекстом документа, которые, я не думаю, что у нас есть с библиотекой сценариев JAVA. Кроме того, я не знаю, как именно библиотека сценариев JAVA может использоваться независимо. Может ли быть лучший подход к этому? 27.05.2014
  • Вы бы поместили свои классы Java в Code / Java. Вы можете вызвать класс Java из SSJS следующим образом: var extract_group = new com.company.ExtractGroup(); extract_group.setSession(session); ... Текущий документ, который вы можете передать в качестве аргумента. 27.05.2014
  • Да, это один из подходов. Моя проблема в том, что у меня есть запланированный агент, который работает, скажем, каждую ночь, и я хотел бы запустить тот же самый агент через Интернет, который вызывает проблему. (на данный момент у меня есть 2 агента, запланированный агент (со сценарием JAVA) и обычный агент (без сценария JAVA). Я планировал объединить его в один, но сейчас не вижу в этом возможности. В любом случае, большое спасибо. загляни в него.›! 27.05.2014
  • Теперь у вас есть рабочая версия (новая база данных) и неисправная версия (рабочая база данных). Вы можете поместить элемент дизайна за элементом из производственной базы данных в новую базу данных, чтобы посмотреть, когда она начнет падать. Или удалите мир за миром из копии вашей производственной базы данных и посмотрите, когда это сработает. У вас есть лучшие инструменты прямо сейчас, чтобы выяснить причину, если проблема :-) 28.05.2014

  • 2

    Каков ваш исходный уровень Java? У вас есть параметр в new Vector(), который по умолчанию недоступен в Java-библиотеке Domino. Проверьте уровни проекта и редактора:

    Файл --> Настройки --> Java --> Компилятор --> Уровень соответствия компилятора

    (второе нажатие кнопки) --> Свойства проекта --> Компилятор Java --> Соответствие JDK

    Это может привести к сбою инициализации класса до запуска конструктора.

    23.05.2014
  • Я не думаю, что это как-то связано с уровнем соответствия Java, поскольку даже после удаления этой части он не будет работать. 23.05.2014

  • 3

    Исходные файлы Java должны соответствовать классу, который они содержат. Ваш вопрос предполагает, что файл, который вы импортируете, — это extract_group, а ваш класс — ExtractGroup. Однако вы должны получить предупреждение или ошибку во время компиляции.

    23.05.2014
  • Да, я думаю, что пропустил это. Но ошибки времени компиляции нет. Позвольте мне проверить это, как только я буду в офисе. Большое спасибо. 23.05.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..