Ошибка при создании чарта

Добрый день!
Если создать чарт в UI потоке таким образом:
SerialChart serialChart=componentsFactory.create(SerialChart.class);
и добавить полученный пустой компонент в layout то все ОК!
Но если этот же код поместить в BackgroundTask то страница ломается и не только страница, весь проект ломается. В логах томката все чисто, в логах браузера вот такая ошибка:
30
В чем проблема? Может, нельзя рендерить чарты в 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 секунды, в демо . Торможение наблюдается только при первичном открытие страницы с чартами, а дальше все из кэша тянется и все быстро работает.

Не могла бы Вы указать свой браузер и версию? Как я писал выше, я не наблюдаю таких длительных загрузок графиков.

50

Относительно ошибки, я завел тикет https://youtrack.cuba-platform.com/issue/PL-10710. Спасибо, что сообщили о проблеме.