вызов управляемых компонентов, которые находятся в других приложениях

В приложении XPages мне нужно отобразить информацию, которая находится в другом приложении XPage.

Я привык использовать элемент управления Repeat и использовать JavaScript для вызова управляемого компонента для привязки данных.

Пример:

<xp:repeat value="{#javascript:ArticleController.loadArticles();};> 

Я хотел бы сохранить код и логику в существующем приложении, но вызывать и отображать результаты во втором приложении. Возможно ли это и как мне это сделать?


person Malin    schedule 16.03.2016    source источник
comment
Открыты многие возможности, такие как веб-служба или перемещение кода Java в файл jar на сервере.   -  person pipalia    schedule 16.03.2016
comment
Я думаю, вы можете сделать это с помощью ajax   -  person SpringLearner    schedule 16.03.2016
comment
Можете ли вы дать еще несколько рекомендаций по веб-сервису? Я предполагаю, что вы имеете в виду элемент управления xe:restService, так как там я могу определить serviceBean.   -  person Malin    schedule 16.03.2016


Ответы (2)


попробуй это:

String text = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";        
try {
    response.getWriter().write(text);
    response.getWriter().close();
    return;
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return;
}

Вы можете просмотреть json в своем браузере с помощью плагина, например. JSONView для Firefox

person Patrick Kwinten    schedule 16.03.2016

Каждый XPage работает в своей собственной JVM, поэтому с управляемым компонентом в приложении B нельзя напрямую взаимодействовать из приложения A. Используя службу JSON RPC в библиотеке расширений, вы сможете вызывать XAgent из приложения B (это фактически то же самое, что и веб-сервис, но возвращающий JSON, а не XML).

Возможно, стоит пересмотреть разделение логики приложения. Я делал это в прошлом, но теперь я предпочитаю хранить всю логику веб-приложения в одной базе данных, потому что каждое из них является отдельной JVM:

  • Первоначальный удар по производительности для обоих приложений XPages.
  • У каждого будут отдельные области, поэтому applicationScope, sessionScope и т. д. не могут использоваться совместно.
  • Вы можете делиться не только управляемыми bean-компонентами, но и служебным кодом
  • Это метод архитектуры Bluemix, разделяющий данные и приложения.
  • Вы можете дополнительно ограничить доступ к данным, запретив доступ по URL-адресу к самому NSF.
person Paul Stephen Withers    schedule 16.03.2016
comment
Я прочитал следующее сообщение в блоге: wissel.net/blog/d6plinks/SHWL-9Q55QL так как мне было приказано использовать управление отдыхом и сервисный компонент. Но я не уверен, как продолжить после установки заголовка ответа? (читай: создание json). Могу ли я использовать генератор ответов как знакомый с xagent? Я не нашел много примеров кода для сервисного компонента, создающего jspon... - person Malin; 16.03.2016
comment
@PaulStephenWithers: каждый XPage запускается на своей собственной JVM? Это не может быть правдой, иначе проблема SSJS (расширение прототипа массива на весь сервер) не существовала бы... - person Sven Hasselbach; 18.03.2016
comment
Может быть, это работает так же, как плагины, с кодом SSJS, ограниченным на уровне сервера? Я знаю, что испортил среду выполнения XPages для одного приложения (например, бесконечный цикл), что влияет на все попытки открыть XPage в этом приложении, но это нормально для других приложений. - person Paul Stephen Withers; 18.03.2016
comment
@PaulStephenWithers: Если вы делаете что-то вроде бесконечного цикла, на сервере есть защита, чтобы не открывать новые потоки для экземпляра XPages (предотвращает DOS / DDOS и т. д.). Но есть только одна базовая JVM. - person Sven Hasselbach; 18.03.2016