Проблема при выполнении задач отдельным потоком

Добрый день коллеги, есть проблема.
Есть Сервис(бин), который по шедулеру запускается вручную(один раз, один метод), далее запускает отдельные потоки(пробовал разные способы запуска), в потоке происходит обращение к другим сервисам(бинам), инжектированные в основной сервис, которые не выполняют каких либо задач связанных с бд или подгрузкой других сущностей. Далее поток комиттит сущность которая была передана при запуске, и продолжает работать с закомиченной сущностью дальше, продолжая ее комитить(обновлять статус). 1 поток комиттит только одну сущность(самих потоков много). В момент работы, в консоли появляется флуд следующей строкой:
"20:03:31.606 WARN eclipselink.propagation - Warning: EntityCacheConnection[Service[EclipseLinkCommandChannel, 05a6bf99-b09f-4402-a25e-d03eba51a7b6, null]]: ignoring request to publish command while connection is closing."

а перед ней появляется одно сообщение:
21:16:28.240 WARN eclipselink.propagation - Warning: Dropping remote command connection to Service[EclipseLinkCommandChannel, 05a6bf99-b09f-4402-a25e-d03eba51a7b6, null] on error java.lang.RuntimeException: java.lang.ClassNotFoundException: мой класскоторый существует и написан верно

Ранее я уже сталкивался с этим сообщением, решилось путем выноса какого либо коммита из паралельного потока, но сейчас делать это необходимо. Гугл ничего не выдает на этот варн, при этом сама задача выполняется вроде корректно. Пробовал коммит как через EM так и через DataManager. Соответственно, если закоммитить строку с коммитом, то сообщение не появляется, что означает что проблема возникает именно при коммите сущности из паралельного потока. Аутификация паралельного потока происходила как через auth.begin, так и через передачу AppContext.getSecurityContext() от основного потока который запустил паралельные.

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

этот UUID Не принадлежит ни одной из закомиченных сущностей с которой происходит работа(но в процессе работы, происходит создание сущностей, которые не комитятся, созданные через DataManager.create()(пробовал просто new …), целенаправленно, они временные, и не комитятся после окончания цикла, предположительно удаляются сборщиком мусора, поэтому предполагаю, что UUID принадлежит одной из таких временных сущностей, но их создается тысячи за цикл, а показывается только один uuid).

Что вообще это сообщение значит, и как от него избавится?)

Здравствуйте,
Может в логах есть stacktrace (в тех местах где WARN сообщения)?

Нет ли такого, что вы managed сущность передаете между потоками разными? Между потоками возможно только передавать сущности в состояние DETACHED

В дефолтных логах(app) никакой доп информации не идет.

Нет ли такого, что вы managed сущность передаете между потоками разными? Между потоками возможно только передавать сущности в состояние DETACHED

В поток единоразово при запуске заносится сущность Detached, и далее никем более не используется.

Пока что вопрос решил костыльно, опять таки вынося сущности для коммита за паралельные потоки(создал мапу, в которую помещаются сущности на коммит), а по мапе уже проходится отдельный поток из Cron’a(назначенные задачи) обновляя статус,работает, но это костыль, хотелось бы решить вопрос по нормальному.

Может у вас получится сделать пример проекта на котором возможно воспроизвести ошибку? Сейчас трудно что то сказать по проблеме. В целом работа с EntityManager/DataManager должна выполняться без проблем в отдельных потоках.

А есть где-нибудь рабочий пример многопоточной работы с данными, например загрузка/выгрузка с сохранением в базе приложения. У меня что-то с первого раза не получилось. Как правильно объявить/инжектировать DataManager? Должен ли класс процесса, выполняемый в потоке быть бином и пр.? Много непонятного.

В com.haulmont.cuba.core.app.Emailer есть многопоточное исполнение.
Класс задачи, которую вы передаете в executor на исполнение, не должен быть бином. Но при желании можно создавать prototype бин, реализующий интерфейс Runnable или Callable если вам так хочется.
В этом примере в другой поток в com.haulmont.cuba.core.app.Emailer.EmailSendTask
передается сущность SendingMessage. Она detached (транзакция, где она была загружена, уже завершилась).
В другой поток нельзя передавать managed-сущности. Даже косвенным образом.
Например если вы открываете транзакцию, загружаете User из БД, тут же создаете сущность Order и проставляете ссылку Order.setUser(user), а затем передаете Order в другой поток и в другом потоке пытаетесь сохранить order.
Так делать нельзя, EclipseLink будет выдавать ошибку, из-за того, что при сохранении order просматриваются все его поля, включая user, который будет еще “принадлежать” другой еще не завершившейся транзакции.

А где Emailer посмотреть можно? Надо исходники CUBA качать?

В любом CUBA-проекте нажать Ctrl+N
Ввести “Emailer”
В списке выпадающих вариантов выбрать класс из cuba-core библиотеки.