由parallelStream处理的线程与JPA / eclipse链接不兼容

时间:2018-10-06 00:28:10

标签: java multithreading jpa eclipselink

我正在尝试利用Java 8并行流并行运行批处理作业:

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

在getDataPerTenant(tenant)中,我正在使用jpa访问数据库,并且正在运行一堆查询。我遇到的第一个问题是ContextClassLoader为空。然后,我尝试设置ContextClassLoader,但关注这篇文章:Parallel stream doesn't set Thread.contextClassLoader after tomcat upgrade,并尝试创建ForkJoinPool。

但是,由ForkJoinPool维护的线程在创建EntityManager时会引发异常:

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

我相信这是因为无法解决持久性提供程序。

总有没有设置线程的持久性提供程序? 为了澄清一下,我有一个persistence.xml,当Web应用程序创建线程时,JPA可以工作。

仅当我尝试生成要访问JPA层的新线程时,才会出现此问题。

任何帮助将不胜感激 谢谢!

0 个答案:

没有答案