XPages: почему мой компонент приложения создается дважды? - PullRequest
0 голосов
/ 26 октября 2018

XPages снова движется таинственным образом.Он отображает поведение, которое я могу объяснить, только предполагая, что управляемый компонент приложения создается дважды.Управляемый компонент содержит карту для сохранения данных, зависящих от сеанса, фактически основанных на SessionID.Я спрашиваю компонент для данных сеанса, используя тот же SessionID, и я получаю разные результаты.Консоль дважды отображает новые SystemData ...

Это часть того, что у меня есть в моем файлеface-config.xml:

<managed-bean>
<managed-bean-name>SystemData</managed-bean-name>
<managed-bean-class>nl.domain.SystemData</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>

Класс SystemData начинается с:

public class SystemData implements Serializable {
    private static Map<String, WebLog> webLogs = new HashMap<String, WebLog>();

    private static final long serialVersionUID = -1L;
    public SystemData() throws NotesException {
        System.out.print("new SystemData");
        init();
    }

    public static WebLog getWebLog() throws NotesException {
        if (!isWebLogActive())
            return null;
        BaseXPage baseXPage = new BaseXPage();
        Cookie sessionCookie = (Cookie) baseXPage.getCookie().get("SessionID");
        if (sessionCookie == null)
            return null;
        String sessionId = sessionCookie.getValue();
        if (!webLogs.containsKey(sessionId))
            webLogs.put(sessionId, new WebLog(sessionId));
        return webLogs.get(sessionId);
    }

    ...

И класс WebLog:

public class WebLog implements Serializable {
    private String id = null;
    private Map<String, Object> logMap = null;
    private Date started = null;

    public WebLog(String id) throws NotesException {
//      System.out.print("new WebLog");
        started = new Date();
        this.id = id;
    }

    public void open() {
        if (logMap == null) {
            logMap = new HashMap<String, Object>();
            logMap.put("Form", "BWLog");
            logMap.put("SessionStarted", started);
            logMap.put("SessionID", id);
        }
    }
    ...

Что я вижу в создаваемых журналах:

View with log documents

Журналы классифицируются по SessionStarted, 1-я и 3-я страницы имеют одинаковую дату / время начала, но 2-я отличается.

Другая информация:

  • это просто простой веб-сайт,анонимно, без логинов
  • на первых страницах создаются первые SystemData
  • при щелчке открывается следующая страница, с новыми SystemData
  • при следующем щелчке открывается еще одна страница, которая занимаетпервый SystemData создал
  • как ни странно, 2-я страница всегда создает новые SystemData
  • нет кластера, насколько я знаю

Я полностью сбит с толку ...Любые советы по решению этой проблемы будут более чем приветствоваться !!

Спасибо всем!

1 Ответ

0 голосов
/ 26 октября 2018

Несмотря на все усилия по очистке кода, ничего не помогло.Поэтому я начал задумываться, почему всегда на 2-й странице запускает создание (если это было так) нового управляемого бина.

На самом деле, есть много перенаправлений для веб-сайта в их адресной книге.Большинство из них, например, для домашней страницы, указывают на SITE.nsf, но некоторые используют Site.nsf.Очевидно, сервер Domino (на базе Linux) видит это как 2 разные ссылки, он обрабатывает их одинаково (все работает), но внутренне он создает 2 различных управляемых компонента (область приложения).

Это для Domino R9.0.1FP7.

...