Мое приложение развернуто в EJBContainer на сервере Glassfish. Я вызываю один метод с использованием Callable и future в сессионном компоненте, и в этом методе я использую EntityManager для некоторой транзакции, но получаю исключение NullPointerException всякий раз, когда есть какой-либо вызов EntityManager. Ниже приведена трассировка стека ошибок:
Severe: java.lang.NullPointerException
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.getNonTxEMsFromCurrentInvocation(EntityManagerWrapper.java:276)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.getNonTxEMFromCurrentInvocation(EntityManagerWrapper.java:260)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper._getDelegate(EntityManagerWrapper.java:213)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.createQuery(EntityManagerWrapper.java:455)
at LogisticsEngineSessionBean.getAllPackSerialsForProcess(LogisticsEngineSessionBean.java:3137)
at LogisticsEngineSessionBean.processSalesOutLines(LogisticsEngineSessionBean.java:3462)
at LogisticsEngineSessionBean.lambda$updateSKULocationStatusOnSell$0(LogisticsEngineSessionBean.java:2972)
at LogisticsEngineSessionBean$$Lambda$7/1138463255.call(Unknown Source)
at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1689)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Подскажите, пожалуйста, связано ли это с тем, что я пытаюсь использовать многопоточность, или есть какая-либо альтернатива для этого. Я использую EclipseLink JPA. Это исключение NullPointerException отсутствует в моем коде, оно поступает в EntityManager, который отлично работает, когда я не выполняю MultiThreading. И объект EntityManager не является нулевым, пожалуйста, внимательно прочтите вопрос, прежде чем давать отрицательный голос.
Тогда что я могу сделать, чтобы исправить это, мне нужна эта вызываемая функция для лучшей обработки, поскольку я обрабатываю большое количество данных. Что я могу сделать, чтобы поместить туда контекст транзакции.





Это связано с вашим контейнером, а не с вашим провайдером JPA - оболочка EM не равна нулю, но контекст под ней есть. В любом случае EntityManager не являются потокобезопасными, поэтому каждому потоку понадобится свой собственный.