Параллельные стримы в @Service выбивают ошибку

в сервисе(класс под аннотацией @Service, “подключается” в используемый через @Autowired …) есть такой код и в таком виде он работает нормально -

    @Override
    public List<InventoryUnitDto> getFiltredInventoryUnitDto(@NonNull Set<InventoryUnitDto> excludeItemsList) {
        return dataManager.load(InventoryUnit.class)
                .query("select u from Item u.......................")
                .parameter("excludeItemsList", excludeItemsList)
                .list()
                .stream()
                .map(inventoryUnitMapper::domainToDto)
                .collect(Collectors.toList());
    }

если заменить stream() на parallelstream() или stream().parallel() странную ошибку -

IllegalStateException: Authentication is not set. Use SystemAuthenticator in non-user requests like schedulers or asynchronous calls.

тут есть алгоритм её решения(повесить на метод аннотации @ManagedOperation, @Authenticated), но это не помогает.
Очевидно, что даже у системного пользователя нет права запускать асинхронные процессы. Вероятно это исправляется какими-то настройками проекта в app.properties ?

Куда вы повесили @ManagedOperation, @Authenticated?

Скорее всего у вас в inventoryUnitMapper::domainToDto идет какой-то запрос в бд или еще чего, что требует аутентификацию. И именно на этот метод надо повесить аннотации. Ибо этот метод асинхронно работает.

или если inventoryUnitMapper::domainToDto вызывается еще где, то внутри map сделать

return systemAuthenticator.withUser(currentAuthentication.getUser().getUsername(), () -> {
    return inventoryUnitMapper.domainToDto(item)
}

@ManagedOperation - кстати отвечает ток за то, чтобы представить данный метод как операцию JMX. Эта аннотация не обязательна, если вы в консоль JMX не хотите метод высветить.

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

.stream().parallel().collect(Collectors.toList());
.stream().parallel().findFirst().isPresent();

ошибка та же.

А можно весь StackTrace из

Не ясно к чему именно у него претензия.

IllegalStateException: Authentication is not set. Use SystemAuthenticator in non-user requests like schedulers or asynchronous calls.

java.lang.IllegalStateException: Authentication is not set. Use SystemAuthenticator in non-user requests like schedulers or asynchronous calls.
at io.jmix.core.security.impl.CurrentAuthenticationImpl.getAuthentication(CurrentAuthenticationImpl.java:47)
at io.jmix.security.impl.constraint.AuthenticationPolicyStore.extractFromAuthentication(AuthenticationPolicyStore.java:143)
at io.jmix.security.impl.constraint.AuthenticationPolicyStore.getRowLevelPolicies(AuthenticationPolicyStore.java:53)
at io.jmix.securitydata.constraint.InMemoryCrudEntityConstraint.applyTo(InMemoryCrudEntityConstraint.java:49)
at io.jmix.securitydata.constraint.InMemoryCrudEntityConstraint.applyTo(InMemoryCrudEntityConstraint.java:30)
at io.jmix.core.AccessManager.lambda$applyConstraints$2(AccessManager.java:77)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
at io.jmix.core.AccessManager.applyConstraints(AccessManager.java:76)
at io.jmix.data.impl.DataStoreInMemoryCrudListener.lambda$hasInMemoryRead$1(DataStoreInMemoryCrudListener.java:174)
at java.base/java.util.stream.MatchOps$1MatchSink.accept(MatchOps.java:90)
at java.base/java.util.Collections$2.tryAdvance(Collections.java:4853)
at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129)
at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:230)
at java.base/java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:196)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.anyMatch(ReferencePipeline.java:632)
at io.jmix.data.impl.DataStoreInMemoryCrudListener.hasInMemoryRead(DataStoreInMemoryCrudListener.java:172)
at io.jmix.data.impl.DataStoreInMemoryCrudListener.beforeEntityLoad(DataStoreInMemoryCrudListener.java:57)
at io.jmix.core.datastore.DataStoreBeforeEntityLoadEvent.sendTo(DataStoreBeforeEntityLoadEvent.java:50)
at io.jmix.core.datastore.AbstractDataStore.fireEvent(AbstractDataStore.java:343)
at io.jmix.core.datastore.AbstractDataStore.load(AbstractDataStore.java:77)
at io.jmix.core.impl.UnconstrainedDataManagerImpl.load(UnconstrainedDataManagerImpl.java:97)
at io.jmix.eclipselink.impl.lazyloading.SingleValueOwningPropertyHolder.loadValue(SingleValueOwningPropertyHolder.java:61)
at io.jmix.eclipselink.impl.lazyloading.AbstractValueHolder.getValue(AbstractValueHolder.java:277)
at ru.argustelecom.ams.core.domain.entity.inventoryunit.InventoryUnit._persistence_get_location(InventoryUnit.java)
at ru.argustelecom.ams.core.domain.entity.inventoryunit.InventoryUnit.getLocation(InventoryUnit.java:57)
at ru.argustelecom.ams.core.domain.entity.inventoryunit.InventoryUnitMapperImpl.domainToDto(InventoryUnitMapperImpl.java:33)
at ru.argustelecom.ams.core.domain.entity.inventoryunit.InventoryUnitMapperImpl.domainToDto(InventoryUnitMapperImpl.java:10)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.Vector$VectorSpliterator.forEachRemaining(Vector.java:1470)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:960)
at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:934)
at java.base/java.util.stream.AbstractTask.compute(AbstractTask.java:327)
at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:754)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)

Ну вот как я вижу он переходи в метод.

Там идет запрос getLocation из InventoryUnit

Пошла ленивая загрузка Location

И в итоге он упал на том что нет авторизации при проверке прав на сущность.

Мб сразу загрузить InventoryUnit с fetchPlan содержащим Location? Таким образом он не будет в стриме обращаться к базе что все ускорит. И проверки на аутентификацию не будет. Если там канечн еще чего не происходит в InventoryUnitMapperImpl.domainToDto