Добрый день!
Если создать чарт в UI потоке таким образом:
SerialChart serialChart=componentsFactory.create(SerialChart.class);
и добавить полученный пустой компонент в layout то все ОК!
Но если этот же код поместить в BackgroundTask то страница ломается и не только страница, весь проект ломается. В логах томката все чисто, в логах браузера вот такая ошибка:
В чем проблема? Может, нельзя рендерить чарты в backgroundTask?
Не совсем, там открытие фрейма в фоновой задаче, здесь компонент чарта!
А Вы создаете чарт именно в методе run
, а не done
?
Сами чарты рендерятся долго, минимум 3-4 секунды (хоть и минимум конфига).
Так как на странице может быть около 5 чартов, время загрузки страницы 5-10 секунд.
Я хотел чарты загрузить в отдельном потоке, т.е в методе run(). Ищу обходные пути стандартными Thread, но тут встает проблема в SecurityContext и реализация Timeout-а для каждого потока.
Аналогично предыдущей теме, могу посоветовать использовать фоновую задачу именно для загрузки данных, в а методе done
и проставлять полученные данные в график.
Не могли бы Вы так же уточнить, что значит, что сам график рендерится долго? Долго данные подгружаются или еще что то?
Данные из БД загружаются быстро, отрисовка страницы тормозит с того момента где вызывается
PieChart pieChart=componentsFactory.createComponent(PieChart.class);
Я и хотел этот кусок кода перенести в run(), а в done() просто сделать layout.add(pieChart);
Если Вы приложите тестовый проект, в котором воспроизводится проблема, я попробую разобраться в причине.
Вот весь проект:
Исходники страниц (во вложении только контроллеры, дескрипторы пустые, т.е. пустой layout)
ChartRender.txt (1,5 КБ)
PageRender.txt (1,2 КБ)
К сожалению я не могу воспроизвести проблему. График загружается практически мгновенно, даже без фоновой задачи.
Вы запускали мой код?
Ваш код, к сожалению не заработал, т.к. вызов openFrame
в методе run
, приводит к тому, что сам метод не завершается и фрейм не инициализируется. Поэтому, чтобы убедиться, что фрейм с графиком открывается долго, я вынес открытие фрейма за пределы фоновой задачи. Так же? я не получаю clent-side исключений, как в описании топика.
Если у Вас получится сделать тестовый проект на котором воспроизводится проблема с долгой загрузкой графика, это очень помогло бы решить вашу проблему. Если я правильно понимаю, то изначальная проблема именно в этом, а фоновые задачи лишь способ решить ее.
У меня получилось открыть в фоновом процессе, через UIAcessor. В итоге получилось рендерить чарты в фоновом процессе до их готовности для отображения.
То что, долго отображается, мне кажется все из за аннотации @WebJarResource в классе CubaAmchartsIntegration.java. Если инициализацию @WebJarResource сделать после перехвата события AppContextStartedEvent то все отображается быстро.
Если вы приложите тестовый проект на котором воспроизводится проблема с долгой загрузкой графика, это очень помогло бы решить вашу проблему. На даный момент, проблему воспроизвети не получается.
Думаю, можно и без проекта проверить. Можно увидеть эффект торможения при открытии любого чарта на 2-4 секунды, в демо . Торможение наблюдается только при первичном открытие страницы с чартами, а дальше все из кэша тянется и все быстро работает.
Не могла бы Вы указать свой браузер и версию? Как я писал выше, я не наблюдаю таких длительных загрузок графиков.
Относительно ошибки, я завел тикет https://youtrack.cuba-platform.com/issue/PL-10710. Спасибо, что сообщили о проблеме.