Потоки, обрабатываемые параллельным потоком, не совместимы со ссылкой JPA / eclipse. - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь запустить пакетное задание параллельно, используя параллельные потоки java 8:

 ForkJoinPool forkJoinPool = new ForkJoinPool(8);
 forkJoinPool.execute(() -> tenants.parallelStream()
                .forEach((tenant) -> getDataPerTenant(tenant)));

В getDataPerTenant (tenant) я использую jpa для доступа к базе данных и выполняю несколько запросов,Первая проблема, с которой я столкнулся, заключалась в том, что ContextClassLoader был нулевым.Затем я попытался установить ContextClassLoader, но следовал этому сообщению: Параллельный поток не устанавливает Thread.contextClassLoader после обновления tomcat и попытался создать ForkJoinPool.

Однако потоки, поддерживаемые ForkJoinPool, выдают исключение при создании EntityManager:

No Persistence provider for EntityManager named TestService
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85)

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

Есть ли в любом случаеустановить поставщик постоянства для потока?Просто чтобы уточнить, у меня есть persistence.xml, и JPA работает, когда потоки создаются веб-приложением.

Эта проблема возникает, только когда я пытаюсь создать новые потоки, которые хотят получить доступ к слою JPA.

Любая помощь будет принята с благодарностью. Спасибо!

...