You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@openwebbeans.apache.org by Matthias Knappik <Ma...@faktorzehn.de> on 2019/09/11 07:24:21 UTC

NoSuchElementException in InstanceImpl#iterator() after upgrading openejb-core to 8.0.0-M3

Hi,
after upgrading the openejb-core dependency in one of our projects from 7.1.0 to 8.0.0-M3 in order to support java 11, one of our tests was failing due to an NoSuchElementException in org.apache.webbeans.inject.instance.InstanceImpl#iterator().
Our last executed code is:
    private Stream<PolicyPermissionService> permissionServices() {
        return StreamSupport.stream(permissionServices.spliterator(), false);
    }

A little bit of research showed, that this method is being executed in parallel by an batch job, which explains the Exception: InstanceImpl#iterator() seems not to be threadsafe. As a consequence, removeFirst() gets executed, even if there is no Element in the List.

A quick fix for us was to put the call into an synchronized block:
    private synchronized Stream<PolicyPermissionService> permissionServices() {
        return StreamSupport.stream(permissionServices.spliterator(), false);
    }

However, I think it should not be required to do so and it was working fine in 7.1.0.

Stacktrace:
java.util.NoSuchElementException
        at java.util.LinkedList.removeFirst(LinkedList.java:270)
        at java.util.LinkedList.pop(LinkedList.java:801)
        at org.apache.webbeans.context.creational.CreationalContextImpl.removeInjectionPoint(CreationalContextImpl.java:142)
        at org.apache.webbeans.inject.instance.InstanceImpl.iterator(InstanceImpl.java:256)
        at java.lang.Iterable.spliterator(Iterable.java:101)
        at de.faktorzehn.ipm.core.services.user.PolicyPermissionServiceProvider.permissionServices(PolicyPermissionServiceProvider.java:46)
        at de.faktorzehn.ipm.core.services.user.PolicyPermissionServiceProvider.getPermissionService(PolicyPermissionServiceProvider.java:38)
        at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.hasReadPermission(JpaPolicyRepository.java:383)
        at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.lambda$readPermissionFor$0(JpaPolicyRepository.java:110)
        at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.internalGetPolicy(JpaPolicyRepository.java:121)
        at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.getPolicy(JpaPolicyRepository.java:106)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113)
        at org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106)
        at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:78)
        at org.apache.openejb.cdi.transactional.InterceptorBase.intercept(InterceptorBase.java:67)
        at org.apache.openejb.cdi.transactional.RequiredInterceptor.intercept(RequiredInterceptor.java:35)
        at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136)
        at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:65)
        at org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139)
        at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository$$OwbInterceptProxy1.getPolicy(de/faktorzehn/ipm/core/services/persistence/JpaPolicyRepository.java)
        at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository$$OwbNormalScopeProxy1.getPolicy(de/faktorzehn/ipm/core/services/persistence/JpaPolicyRepository.java)
        at de.faktorzehn.ipm.core.batch.services.EditPolicyService.getPolicy(EditPolicyService.java:214)
        at de.faktorzehn.ipm.core.batch.services.EditPolicyService.lambda$editPolicy$2(EditPolicyService.java:89)
        at de.faktorzehn.ipm.core.batch.services.FailCheckedEditing.withPolicy(FailCheckedEditing.java:236)
        at de.faktorzehn.ipm.core.batch.services.EditPolicyService.editPolicy(EditPolicyService.java:89)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113)
        at org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106)
        at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:78)
        at org.apache.openejb.cdi.transactional.InterceptorBase.intercept(InterceptorBase.java:67)
        at org.apache.openejb.cdi.transactional.RequiredInterceptor.intercept(RequiredInterceptor.java:35)
        at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136)
        at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:65)
        at org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139)
        at de.faktorzehn.ipm.sample.batch.hranpassung.HrAnpassungService$$OwbInterceptProxy1.editPolicy(de/faktorzehn/ipm/sample/batch/hranpassung/HrAnpassungService.java)
        at de.faktorzehn.ipm.sample.batch.hranpassung.HrAnpassungService$$OwbNormalScopeProxy0.editPolicy(de/faktorzehn/ipm/sample/batch/hranpassung/HrAnpassungService.java)
        at de.faktorzehn.ipm.core.batch.ParameterizedPolicyWriter.lambda$doWriteItems$0(ParameterizedPolicyWriter.java:59)
        at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
        at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
        at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
        at de.faktorzehn.ipm.core.batch.ParameterizedPolicyWriter.doWriteItems(ParameterizedPolicyWriter.java:60)
        at org.apache.batchee.extras.typed.TypedItemWriter.writeItems(TypedItemWriter.java:35)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.batchee.container.proxy.BatchProxyInvocationHandler.invoke(BatchProxyInvocationHandler.java:55)
        at com.sun.proxy.$Proxy204.writeItems(Unknown Source)
        at org.apache.batchee.container.impl.controller.chunk.ChunkStepController.writeChunk(ChunkStepController.java:433)
        at org.apache.batchee.container.impl.controller.chunk.ChunkStepController.invokeChunk(ChunkStepController.java:579)
        at org.apache.batchee.container.impl.controller.chunk.ChunkStepController.invokeCoreStep(ChunkStepController.java:732)
        at org.apache.batchee.container.impl.controller.BaseStepController.execute(BaseStepController.java:157)
        at org.apache.batchee.container.impl.controller.ExecutionTransitioner.doExecutionLoop(ExecutionTransitioner.java:106)
        at org.apache.batchee.container.impl.controller.JobThreadRootController.originateExecutionOnThread(JobThreadRootController.java:110)
        at org.apache.batchee.container.util.BatchWorkUnit.run(BatchWorkUnit.java:62)
        at org.apache.batchee.tools.services.thread.ThreadExecutorEjb.executeTask(ThreadExecutorEjb.java:51)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:205)
        at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:186)
        at org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:191)
        at org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:102)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:205)
        at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:186)
        at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85)
        at org.apache.openejb.core.singleton.SingletonContainer._invoke(SingletonContainer.java:272)
        at org.apache.openejb.core.singleton.SingletonContainer.invoke(SingletonContainer.java:221)
        at org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:265)
        at org.apache.openejb.core.ivm.EjbObjectProxyHandler$1.call(EjbObjectProxyHandler.java:252)
        at org.apache.openejb.threads.task.CUTask.invoke(CUTask.java:100)
        at org.apache.openejb.threads.task.CUCallable.call(CUCallable.java:31)
        at org.apache.openejb.async.AsynchronousPool$AsynchronousCall.call(AsynchronousPool.java:113)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

Best Regards


Matthias Knappik
Senior Developer

Faktor Zehn GmbH
Friedenheimer Brücke 21
80639 München

Phone    +49 89 520311-683
Fax        +49 89 520311-8683
Mobile    +49 151 582 56644

Matthias.Knappik@faktorzehn.de<ma...@faktorzehn.de>
http://www.ConVista.com


________________________________
Faktor Zehn GmbH       Sitz der Gesellschaft: München  Registernummer: HRB 242535 Registergericht: Amtsgericht München
Geschaeftsfuehrung: Dr. Florian Schwandt, Joerg Renger

Re: NoSuchElementException in InstanceImpl#iterator() after upgrading openejb-core to 8.0.0-M3

Posted by Mark Struberg <st...@yahoo.de>.
Added some more fixes. Should now fully work for your use case.

have fun!

LieGrue,
strub


> Am 11.09.2019 um 13:48 schrieb Romain Manni-Bucau <rm...@gmail.com>:
> 
> Pushed a first enhancement around that on master if you want to give a try building the snapshot and patching tomee.
> Still some work to do around tests and harnessing but sounds promising.
> 
> Romain Manni-Bucau
> @rmannibucau |  Blog | Old Blog | Github | LinkedIn | Book
> 
> 
> Le mer. 11 sept. 2019 à 12:24, Mark Struberg <st...@yahoo.de> a écrit :
> And we are still looking into it whether we can make it go away (again).
> But that isn't a guarantee that this will not cause any pains in other containers as well. At least under heavy load. 
> And yikes, that's hard to test :(
> 
> LieGrue,
> strub
> 
> > Am 11.09.2019 um 11:54 schrieb Romain Manni-Bucau <rm...@gmail.com>:
> > 
> > We got some perf enhancements about Instance so it can be visible now whereas it was hidden before cause slower.
> > 
> > Romain Manni-Bucau
> > @rmannibucau |  Blog | Old Blog | Github | LinkedIn | Book
> > 
> > 
> > Le mer. 11 sept. 2019 à 11:51, Matthias Knappik <Ma...@faktorzehn.de> a écrit :
> > Hi,
> > Thank you for your response. I'll change our behavior in regards to concurrency.
> > However, I would like to point out,  that the test in our project was executed thousands of times without any problem in 7.1.0 and prior releases, while the issue is 100% reproducible with 8.0.0-M3. So I really wonder what causes this difference.
> > 
> > Best Regards
> > 
> > Matthias Knappik
> > 
> > Senior Developer
> > 
> > Faktor Zehn GmbH
> > Friedenheimer Brücke 21
> > 80639 München
> > 
> > Phone   +49 89 520311-683
> > Fax     +49 89 520311-8683
> > Mobile  +49 151 582 56644
> > 
> > Matthias.Knappik@faktorzehn.de
> > http://www.ConVista.com
> > 
> > -----Ursprüngliche Nachricht-----
> > Von: Mark Struberg <st...@yahoo.de>
> > Gesendet: Mittwoch, 11. September 2019 10:02
> > An: openwebbeans-user <us...@openwebbeans.apache.org>
> > Betreff: Re: NoSuchElementException in InstanceImpl#iterator() after upgrading openejb-core to 8.0.0-M3
> > 
> > To be honest, I'm not sure this is really a bug.
> > 
> > a.) the CDI architecture guide basically says that whenever you use @ApplicationScoped in a multi-threaded scenario then you have to deal with concurrency yourself. After all those are not @Stateless EJBs...
> > b.) The Instance definition also doesn't define that Instance is thread safe.
> > 
> > So even if WE fix it, it is not guaranteed that you will be blowing up on many different containers. As it's not defined by the spec.
> > 
> > LieGrue,
> > strub
> > 
> > > Am 11.09.2019 um 09:43 schrieb Romain Manni-Bucau <rm...@gmail.com>:
> > >
> > > Hi Matthias,
> > >
> > > I don't think it is a regression by itself since this is the behavior since a long time but it is clearly a bug.
> > > Will work on it very soon.
> > >
> > > Romain Manni-Bucau
> > > @rmannibucau |  Blog | Old Blog | Github | LinkedIn | Book
> > >
> > >
> > > Le mer. 11 sept. 2019 à 09:24, Matthias Knappik <Ma...@faktorzehn.de> a écrit :
> > > Hi,
> > >
> > > after upgrading the openejb-core dependency in one of our projects from 7.1.0 to 8.0.0-M3 in order to support java 11, one of our tests was failing due to an NoSuchElementException in org.apache.webbeans.inject.instance.InstanceImpl#iterator().
> > >
> > > Our last executed code is:
> > >
> > >     private Stream<PolicyPermissionService> permissionServices() {
> > >
> > >         return StreamSupport.stream(permissionServices.spliterator(), false);
> > >
> > >     }
> > >
> > >
> > >
> > > A little bit of research showed, that this method is being executed in parallel by an batch job, which explains the Exception: InstanceImpl#iterator() seems not to be threadsafe. As a consequence, removeFirst() gets executed, even if there is no Element in the List.
> > >
> > >
> > >
> > > A quick fix for us was to put the call into an synchronized block:
> > >
> > >     private synchronized Stream<PolicyPermissionService> permissionServices() {
> > >
> > >         return StreamSupport.stream(permissionServices.spliterator(), false);
> > >
> > >     }
> > >
> > >
> > >
> > > However, I think it should not be required to do so and it was working fine in 7.1.0.
> > >
> > >
> > >
> > > Stacktrace:
> > >
> > > java.util.NoSuchElementException
> > >
> > >         at java.util.LinkedList.removeFirst(LinkedList.java:270)
> > >
> > >         at java.util.LinkedList.pop(LinkedList.java:801)
> > >
> > >         at org.apache.webbeans.context.creational.CreationalContextImpl.removeInjectionPoint(CreationalContextImpl.java:142)
> > >
> > >         at org.apache.webbeans.inject.instance.InstanceImpl.iterator(InstanceImpl.java:256)
> > >
> > >         at java.lang.Iterable.spliterator(Iterable.java:101)
> > >
> > >         at de.faktorzehn.ipm.core.services.user.PolicyPermissionServiceProvider.permissionServices(PolicyPermissionServiceProvider.java:46)
> > >
> > >         at de.faktorzehn.ipm.core.services.user.PolicyPermissionServiceProvider.getPermissionService(PolicyPermissionServiceProvider.java:38)
> > >
> > >         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.hasReadPermission(JpaPolicyRepository.java:383)
> > >
> > >         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.lambda$readPermissionFor$0(JpaPolicyRepository.java:110)
> > >
> > >         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.internalGetPolicy(JpaPolicyRepository.java:121)
> > >
> > >         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.getPolicy(JpaPolicyRepository.java:106)
> > >
> > >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > >
> > >         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > >
> > >         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > >
> > >         at java.lang.reflect.Method.invoke(Method.java:498)
> > >
> > >         at org.apache.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113)
> > >
> > >         at org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106)
> > >
> > >         at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:78)
> > >
> > >         at org.apache.openejb.cdi.transactional.InterceptorBase.intercept(InterceptorBase.java:67)
> > >
> > >         at org.apache.openejb.cdi.transactional.RequiredInterceptor.intercept(RequiredInterceptor.java:35)
> > >
> > >         at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
> > >
> > >         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > >
> > >         at java.lang.reflect.Method.invoke(Method.java:498)
> > >
> > >         at org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136)
> > >
> > >         at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:65)
> > >
> > >         at org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139)
> > >
> > >         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository$$OwbInterceptProxy1.getPolicy(de/faktorzehn/ipm/core/services/persistence/JpaPolicyRepository.java)
> > >
> > >         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository$$OwbNormalScopeProxy1.getPolicy(de/faktorzehn/ipm/core/services/persistence/JpaPolicyRepository.java)
> > >
> > >         at de.faktorzehn.ipm.core.batch.services.EditPolicyService.getPolicy(EditPolicyService.java:214)
> > >
> > >         at de.faktorzehn.ipm.core.batch.services.EditPolicyService.lambda$editPolicy$2(EditPolicyService.java:89)
> > >
> > >         at de.faktorzehn.ipm.core.batch.services.FailCheckedEditing.withPolicy(FailCheckedEditing.java:236)
> > >
> > >         at de.faktorzehn.ipm.core.batch.services.EditPolicyService.editPolicy(EditPolicyService.java:89)
> > >
> > >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > >
> > >         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > >
> > >         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > >
> > >         at java.lang.reflect.Method.invoke(Method.java:498)
> > >
> > >         at org.apache.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113)
> > >
> > >         at org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106)
> > >
> > >         at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:78)
> > >
> > >         at org.apache.openejb.cdi.transactional.InterceptorBase.intercept(InterceptorBase.java:67)
> > >
> > >         at org.apache.openejb.cdi.transactional.RequiredInterceptor.intercept(RequiredInterceptor.java:35)
> > >
> > >         at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
> > >
> > >         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > >
> > >         at java.lang.reflect.Method.invoke(Method.java:498)
> > >
> > >         at org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136)
> > >
> > >         at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:65)
> > >
> > >         at org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139)
> > >
> > >         at de.faktorzehn.ipm.sample.batch.hranpassung.HrAnpassungService$$OwbInterceptProxy1.editPolicy(de/faktorzehn/ipm/sample/batch/hranpassung/HrAnpassungService.java)
> > >
> > >         at de.faktorzehn.ipm.sample.batch.hranpassung.HrAnpassungService$$OwbNormalScopeProxy0.editPolicy(de/faktorzehn/ipm/sample/batch/hranpassung/HrAnpassungService.java)
> > >
> > >         at de.faktorzehn.ipm.core.batch.ParameterizedPolicyWriter.lambda$doWriteItems$0(ParameterizedPolicyWriter.java:59)
> > >
> > >         at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
> > >
> > >         at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
> > >
> > >         at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
> > >
> > >         at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
> > >
> > >         at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
> > >
> > >         at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
> > >
> > >         at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
> > >
> > >         at de.faktorzehn.ipm.core.batch.ParameterizedPolicyWriter.doWriteItems(ParameterizedPolicyWriter.java:60)
> > >
> > >         at org.apache.batchee.extras.typed.TypedItemWriter.writeItems(TypedItemWriter.java:35)
> > >
> > >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > >
> > >         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > >
> > >         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > >
> > >         at java.lang.reflect.Method.invoke(Method.java:498)
> > >
> > >         at org.apache.batchee.container.proxy.BatchProxyInvocationHandler.invoke(BatchProxyInvocationHandler.java:55)
> > >
> > >         at com.sun.proxy.$Proxy204.writeItems(Unknown Source)
> > >
> > >         at org.apache.batchee.container.impl.controller.chunk.ChunkStepController.writeChunk(ChunkStepController.java:433)
> > >
> > >         at org.apache.batchee.container.impl.controller.chunk.ChunkStepController.invokeChunk(ChunkStepController.java:579)
> > >
> > >         at org.apache.batchee.container.impl.controller.chunk.ChunkStepController.invokeCoreStep(ChunkStepController.java:732)
> > >
> > >         at org.apache.batchee.container.impl.controller.BaseStepController.execute(BaseStepController.java:157)
> > >
> > >         at org.apache.batchee.container.impl.controller.ExecutionTransitioner.doExecutionLoop(ExecutionTransitioner.java:106)
> > >
> > >         at org.apache.batchee.container.impl.controller.JobThreadRootController.originateExecutionOnThread(JobThreadRootController.java:110)
> > >
> > >         at org.apache.batchee.container.util.BatchWorkUnit.run(BatchWorkUnit.java:62)
> > >
> > >         at org.apache.batchee.tools.services.thread.ThreadExecutorEjb.executeTask(ThreadExecutorEjb.java:51)
> > >
> > >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > >
> > >         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > >
> > >         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > >
> > >         at java.lang.reflect.Method.invoke(Method.java:498)
> > >
> > >         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:205)
> > >
> > >         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:186)
> > >
> > >         at org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:191)
> > >
> > >         at org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:102)
> > >
> > >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > >
> > >         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > >
> > >         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > >
> > >         at java.lang.reflect.Method.invoke(Method.java:498)
> > >
> > >         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:205)
> > >
> > >         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:186)
> > >
> > >         at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85)
> > >
> > >         at org.apache.openejb.core.singleton.SingletonContainer._invoke(SingletonContainer.java:272)
> > >
> > >         at org.apache.openejb.core.singleton.SingletonContainer.invoke(SingletonContainer.java:221)
> > >
> > >         at org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:265)
> > >
> > >         at org.apache.openejb.core.ivm.EjbObjectProxyHandler$1.call(EjbObjectProxyHandler.java:252)
> > >
> > >         at org.apache.openejb.threads.task.CUTask.invoke(CUTask.java:100)
> > >
> > >         at org.apache.openejb.threads.task.CUCallable.call(CUCallable.java:31)
> > >
> > >         at org.apache.openejb.async.AsynchronousPool$AsynchronousCall.call(AsynchronousPool.java:113)
> > >
> > >         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> > >
> > >         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> > >
> > >         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> > >
> > >         at java.lang.Thread.run(Thread.java:748)
> > >
> > >
> > >
> > > Best Regards
> > >
> > >
> > >
> > >
> > > Matthias Knappik
> > > Senior Developer
> > >
> > > Faktor Zehn GmbH
> > > Friedenheimer Brücke 21
> > > 80639 München
> > >
> > > Phone    +49 89 520311-683
> > > Fax        +49 89 520311-8683
> > > Mobile    +49 151 582 56644
> > >
> > > Matthias.Knappik@faktorzehn.de
> > > http://www.ConVista.com
> > >
> > >
> > >
> > > Faktor Zehn GmbH       Sitz der Gesellschaft: München  Registernummer: HRB 242535 Registergericht: Amtsgericht München
> > > Geschaeftsfuehrung: Dr. Florian Schwandt, Joerg Renger
> > 
> > 
> > 
> > ----------------------------------------------------------------------------------
> > 
> > Faktor Zehn GmbH      Sitz der Gesellschaft: Muenchen   Registernummer: HRB 242535 Registergericht: Amtsgericht Muenchen
> > Geschaeftsfuehrung: Dr. Florian Schwandt, Joerg Renger
> > 
> 


Re: NoSuchElementException in InstanceImpl#iterator() after upgrading openejb-core to 8.0.0-M3

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Pushed a first enhancement around that on master if you want to give a try
building the snapshot and patching tomee.
Still some work to do around tests and harnessing but sounds promising.

Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://rmannibucau.metawerx.net/> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
<https://www.packtpub.com/application-development/java-ee-8-high-performance>


Le mer. 11 sept. 2019 à 12:24, Mark Struberg <st...@yahoo.de> a écrit :

> And we are still looking into it whether we can make it go away (again).
> But that isn't a guarantee that this will not cause any pains in other
> containers as well. At least under heavy load.
> And yikes, that's hard to test :(
>
> LieGrue,
> strub
>
> > Am 11.09.2019 um 11:54 schrieb Romain Manni-Bucau <rmannibucau@gmail.com
> >:
> >
> > We got some perf enhancements about Instance so it can be visible now
> whereas it was hidden before cause slower.
> >
> > Romain Manni-Bucau
> > @rmannibucau |  Blog | Old Blog | Github | LinkedIn | Book
> >
> >
> > Le mer. 11 sept. 2019 à 11:51, Matthias Knappik <
> Matthias.Knappik@faktorzehn.de> a écrit :
> > Hi,
> > Thank you for your response. I'll change our behavior in regards to
> concurrency.
> > However, I would like to point out,  that the test in our project was
> executed thousands of times without any problem in 7.1.0 and prior
> releases, while the issue is 100% reproducible with 8.0.0-M3. So I really
> wonder what causes this difference.
> >
> > Best Regards
> >
> > Matthias Knappik
> >
> > Senior Developer
> >
> > Faktor Zehn GmbH
> > Friedenheimer Brücke 21
> > 80639 München
> >
> > Phone   +49 89 520311-683
> > Fax     +49 89 520311-8683
> > Mobile  +49 151 582 56644
> >
> > Matthias.Knappik@faktorzehn.de
> > http://www.ConVista.com
> >
> > -----Ursprüngliche Nachricht-----
> > Von: Mark Struberg <st...@yahoo.de>
> > Gesendet: Mittwoch, 11. September 2019 10:02
> > An: openwebbeans-user <us...@openwebbeans.apache.org>
> > Betreff: Re: NoSuchElementException in InstanceImpl#iterator() after
> upgrading openejb-core to 8.0.0-M3
> >
> > To be honest, I'm not sure this is really a bug.
> >
> > a.) the CDI architecture guide basically says that whenever you use
> @ApplicationScoped in a multi-threaded scenario then you have to deal with
> concurrency yourself. After all those are not @Stateless EJBs...
> > b.) The Instance definition also doesn't define that Instance is thread
> safe.
> >
> > So even if WE fix it, it is not guaranteed that you will be blowing up
> on many different containers. As it's not defined by the spec.
> >
> > LieGrue,
> > strub
> >
> > > Am 11.09.2019 um 09:43 schrieb Romain Manni-Bucau <
> rmannibucau@gmail.com>:
> > >
> > > Hi Matthias,
> > >
> > > I don't think it is a regression by itself since this is the behavior
> since a long time but it is clearly a bug.
> > > Will work on it very soon.
> > >
> > > Romain Manni-Bucau
> > > @rmannibucau |  Blog | Old Blog | Github | LinkedIn | Book
> > >
> > >
> > > Le mer. 11 sept. 2019 à 09:24, Matthias Knappik <
> Matthias.Knappik@faktorzehn.de> a écrit :
> > > Hi,
> > >
> > > after upgrading the openejb-core dependency in one of our projects
> from 7.1.0 to 8.0.0-M3 in order to support java 11, one of our tests was
> failing due to an NoSuchElementException in
> org.apache.webbeans.inject.instance.InstanceImpl#iterator().
> > >
> > > Our last executed code is:
> > >
> > >     private Stream<PolicyPermissionService> permissionServices() {
> > >
> > >         return StreamSupport.stream(permissionServices.spliterator(),
> false);
> > >
> > >     }
> > >
> > >
> > >
> > > A little bit of research showed, that this method is being executed in
> parallel by an batch job, which explains the Exception:
> InstanceImpl#iterator() seems not to be threadsafe. As a consequence,
> removeFirst() gets executed, even if there is no Element in the List.
> > >
> > >
> > >
> > > A quick fix for us was to put the call into an synchronized block:
> > >
> > >     private synchronized Stream<PolicyPermissionService>
> permissionServices() {
> > >
> > >         return StreamSupport.stream(permissionServices.spliterator(),
> false);
> > >
> > >     }
> > >
> > >
> > >
> > > However, I think it should not be required to do so and it was working
> fine in 7.1.0.
> > >
> > >
> > >
> > > Stacktrace:
> > >
> > > java.util.NoSuchElementException
> > >
> > >         at java.util.LinkedList.removeFirst(LinkedList.java:270)
> > >
> > >         at java.util.LinkedList.pop(LinkedList.java:801)
> > >
> > >         at
> org.apache.webbeans.context.creational.CreationalContextImpl.removeInjectionPoint(CreationalContextImpl.java:142)
> > >
> > >         at
> org.apache.webbeans.inject.instance.InstanceImpl.iterator(InstanceImpl.java:256)
> > >
> > >         at java.lang.Iterable.spliterator(Iterable.java:101)
> > >
> > >         at
> de.faktorzehn.ipm.core.services.user.PolicyPermissionServiceProvider.permissionServices(PolicyPermissionServiceProvider.java:46)
> > >
> > >         at
> de.faktorzehn.ipm.core.services.user.PolicyPermissionServiceProvider.getPermissionService(PolicyPermissionServiceProvider.java:38)
> > >
> > >         at
> de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.hasReadPermission(JpaPolicyRepository.java:383)
> > >
> > >         at
> de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.lambda$readPermissionFor$0(JpaPolicyRepository.java:110)
> > >
> > >         at
> de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.internalGetPolicy(JpaPolicyRepository.java:121)
> > >
> > >         at
> de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.getPolicy(JpaPolicyRepository.java:106)
> > >
> > >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > >
> > >         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > >
> > >         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > >
> > >         at java.lang.reflect.Method.invoke(Method.java:498)
> > >
> > >         at
> org.apache.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113)
> > >
> > >         at
> org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106)
> > >
> > >         at
> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:78)
> > >
> > >         at
> org.apache.openejb.cdi.transactional.InterceptorBase.intercept(InterceptorBase.java:67)
> > >
> > >         at
> org.apache.openejb.cdi.transactional.RequiredInterceptor.intercept(RequiredInterceptor.java:35)
> > >
> > >         at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
> > >
> > >         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > >
> > >         at java.lang.reflect.Method.invoke(Method.java:498)
> > >
> > >         at
> org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136)
> > >
> > >         at
> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:65)
> > >
> > >         at
> org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139)
> > >
> > >         at
> de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository$$OwbInterceptProxy1.getPolicy(de/faktorzehn/ipm/core/services/persistence/JpaPolicyRepository.java)
> > >
> > >         at
> de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository$$OwbNormalScopeProxy1.getPolicy(de/faktorzehn/ipm/core/services/persistence/JpaPolicyRepository.java)
> > >
> > >         at
> de.faktorzehn.ipm.core.batch.services.EditPolicyService.getPolicy(EditPolicyService.java:214)
> > >
> > >         at
> de.faktorzehn.ipm.core.batch.services.EditPolicyService.lambda$editPolicy$2(EditPolicyService.java:89)
> > >
> > >         at
> de.faktorzehn.ipm.core.batch.services.FailCheckedEditing.withPolicy(FailCheckedEditing.java:236)
> > >
> > >         at
> de.faktorzehn.ipm.core.batch.services.EditPolicyService.editPolicy(EditPolicyService.java:89)
> > >
> > >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > >
> > >         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > >
> > >         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > >
> > >         at java.lang.reflect.Method.invoke(Method.java:498)
> > >
> > >         at
> org.apache.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113)
> > >
> > >         at
> org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106)
> > >
> > >         at
> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:78)
> > >
> > >         at
> org.apache.openejb.cdi.transactional.InterceptorBase.intercept(InterceptorBase.java:67)
> > >
> > >         at
> org.apache.openejb.cdi.transactional.RequiredInterceptor.intercept(RequiredInterceptor.java:35)
> > >
> > >         at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
> > >
> > >         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > >
> > >         at java.lang.reflect.Method.invoke(Method.java:498)
> > >
> > >         at
> org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136)
> > >
> > >         at
> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:65)
> > >
> > >         at
> org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139)
> > >
> > >         at
> de.faktorzehn.ipm.sample.batch.hranpassung.HrAnpassungService$$OwbInterceptProxy1.editPolicy(de/faktorzehn/ipm/sample/batch/hranpassung/HrAnpassungService.java)
> > >
> > >         at
> de.faktorzehn.ipm.sample.batch.hranpassung.HrAnpassungService$$OwbNormalScopeProxy0.editPolicy(de/faktorzehn/ipm/sample/batch/hranpassung/HrAnpassungService.java)
> > >
> > >         at
> de.faktorzehn.ipm.core.batch.ParameterizedPolicyWriter.lambda$doWriteItems$0(ParameterizedPolicyWriter.java:59)
> > >
> > >         at
> java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
> > >
> > >         at
> java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
> > >
> > >         at
> java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
> > >
> > >         at
> java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
> > >
> > >         at
> java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
> > >
> > >         at
> java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
> > >
> > >         at
> java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
> > >
> > >         at
> de.faktorzehn.ipm.core.batch.ParameterizedPolicyWriter.doWriteItems(ParameterizedPolicyWriter.java:60)
> > >
> > >         at
> org.apache.batchee.extras.typed.TypedItemWriter.writeItems(TypedItemWriter.java:35)
> > >
> > >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > >
> > >         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > >
> > >         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > >
> > >         at java.lang.reflect.Method.invoke(Method.java:498)
> > >
> > >         at
> org.apache.batchee.container.proxy.BatchProxyInvocationHandler.invoke(BatchProxyInvocationHandler.java:55)
> > >
> > >         at com.sun.proxy.$Proxy204.writeItems(Unknown Source)
> > >
> > >         at
> org.apache.batchee.container.impl.controller.chunk.ChunkStepController.writeChunk(ChunkStepController.java:433)
> > >
> > >         at
> org.apache.batchee.container.impl.controller.chunk.ChunkStepController.invokeChunk(ChunkStepController.java:579)
> > >
> > >         at
> org.apache.batchee.container.impl.controller.chunk.ChunkStepController.invokeCoreStep(ChunkStepController.java:732)
> > >
> > >         at
> org.apache.batchee.container.impl.controller.BaseStepController.execute(BaseStepController.java:157)
> > >
> > >         at
> org.apache.batchee.container.impl.controller.ExecutionTransitioner.doExecutionLoop(ExecutionTransitioner.java:106)
> > >
> > >         at
> org.apache.batchee.container.impl.controller.JobThreadRootController.originateExecutionOnThread(JobThreadRootController.java:110)
> > >
> > >         at
> org.apache.batchee.container.util.BatchWorkUnit.run(BatchWorkUnit.java:62)
> > >
> > >         at
> org.apache.batchee.tools.services.thread.ThreadExecutorEjb.executeTask(ThreadExecutorEjb.java:51)
> > >
> > >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > >
> > >         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > >
> > >         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > >
> > >         at java.lang.reflect.Method.invoke(Method.java:498)
> > >
> > >         at
> org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:205)
> > >
> > >         at
> org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:186)
> > >
> > >         at
> org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:191)
> > >
> > >         at
> org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:102)
> > >
> > >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > >
> > >         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > >
> > >         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > >
> > >         at java.lang.reflect.Method.invoke(Method.java:498)
> > >
> > >         at
> org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:205)
> > >
> > >         at
> org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:186)
> > >
> > >         at
> org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85)
> > >
> > >         at
> org.apache.openejb.core.singleton.SingletonContainer._invoke(SingletonContainer.java:272)
> > >
> > >         at
> org.apache.openejb.core.singleton.SingletonContainer.invoke(SingletonContainer.java:221)
> > >
> > >         at
> org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:265)
> > >
> > >         at
> org.apache.openejb.core.ivm.EjbObjectProxyHandler$1.call(EjbObjectProxyHandler.java:252)
> > >
> > >         at
> org.apache.openejb.threads.task.CUTask.invoke(CUTask.java:100)
> > >
> > >         at
> org.apache.openejb.threads.task.CUCallable.call(CUCallable.java:31)
> > >
> > >         at
> org.apache.openejb.async.AsynchronousPool$AsynchronousCall.call(AsynchronousPool.java:113)
> > >
> > >         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> > >
> > >         at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> > >
> > >         at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> > >
> > >         at java.lang.Thread.run(Thread.java:748)
> > >
> > >
> > >
> > > Best Regards
> > >
> > >
> > >
> > >
> > > Matthias Knappik
> > > Senior Developer
> > >
> > > Faktor Zehn GmbH
> > > Friedenheimer Brücke 21
> > > 80639 München
> > >
> > > Phone    +49 89 520311-683
> > > Fax        +49 89 520311-8683
> > > Mobile    +49 151 582 56644
> > >
> > > Matthias.Knappik@faktorzehn.de
> > > http://www.ConVista.com
> > >
> > >
> > >
> > > Faktor Zehn GmbH       Sitz der Gesellschaft: München  Registernummer:
> HRB 242535 Registergericht: Amtsgericht München
> > > Geschaeftsfuehrung: Dr. Florian Schwandt, Joerg Renger
> >
> >
> >
> >
> ----------------------------------------------------------------------------------
> >
> > Faktor Zehn GmbH      Sitz der Gesellschaft: Muenchen   Registernummer:
> HRB 242535 Registergericht: Amtsgericht Muenchen
> > Geschaeftsfuehrung: Dr. Florian Schwandt, Joerg Renger
> >
>
>

Re: NoSuchElementException in InstanceImpl#iterator() after upgrading openejb-core to 8.0.0-M3

Posted by Mark Struberg <st...@yahoo.de>.
And we are still looking into it whether we can make it go away (again).
But that isn't a guarantee that this will not cause any pains in other containers as well. At least under heavy load. 
And yikes, that's hard to test :(

LieGrue,
strub

> Am 11.09.2019 um 11:54 schrieb Romain Manni-Bucau <rm...@gmail.com>:
> 
> We got some perf enhancements about Instance so it can be visible now whereas it was hidden before cause slower.
> 
> Romain Manni-Bucau
> @rmannibucau |  Blog | Old Blog | Github | LinkedIn | Book
> 
> 
> Le mer. 11 sept. 2019 à 11:51, Matthias Knappik <Ma...@faktorzehn.de> a écrit :
> Hi,
> Thank you for your response. I'll change our behavior in regards to concurrency.
> However, I would like to point out,  that the test in our project was executed thousands of times without any problem in 7.1.0 and prior releases, while the issue is 100% reproducible with 8.0.0-M3. So I really wonder what causes this difference.
> 
> Best Regards
> 
> Matthias Knappik
> 
> Senior Developer
> 
> Faktor Zehn GmbH
> Friedenheimer Brücke 21
> 80639 München
> 
> Phone   +49 89 520311-683
> Fax     +49 89 520311-8683
> Mobile  +49 151 582 56644
> 
> Matthias.Knappik@faktorzehn.de
> http://www.ConVista.com
> 
> -----Ursprüngliche Nachricht-----
> Von: Mark Struberg <st...@yahoo.de>
> Gesendet: Mittwoch, 11. September 2019 10:02
> An: openwebbeans-user <us...@openwebbeans.apache.org>
> Betreff: Re: NoSuchElementException in InstanceImpl#iterator() after upgrading openejb-core to 8.0.0-M3
> 
> To be honest, I'm not sure this is really a bug.
> 
> a.) the CDI architecture guide basically says that whenever you use @ApplicationScoped in a multi-threaded scenario then you have to deal with concurrency yourself. After all those are not @Stateless EJBs...
> b.) The Instance definition also doesn't define that Instance is thread safe.
> 
> So even if WE fix it, it is not guaranteed that you will be blowing up on many different containers. As it's not defined by the spec.
> 
> LieGrue,
> strub
> 
> > Am 11.09.2019 um 09:43 schrieb Romain Manni-Bucau <rm...@gmail.com>:
> >
> > Hi Matthias,
> >
> > I don't think it is a regression by itself since this is the behavior since a long time but it is clearly a bug.
> > Will work on it very soon.
> >
> > Romain Manni-Bucau
> > @rmannibucau |  Blog | Old Blog | Github | LinkedIn | Book
> >
> >
> > Le mer. 11 sept. 2019 à 09:24, Matthias Knappik <Ma...@faktorzehn.de> a écrit :
> > Hi,
> >
> > after upgrading the openejb-core dependency in one of our projects from 7.1.0 to 8.0.0-M3 in order to support java 11, one of our tests was failing due to an NoSuchElementException in org.apache.webbeans.inject.instance.InstanceImpl#iterator().
> >
> > Our last executed code is:
> >
> >     private Stream<PolicyPermissionService> permissionServices() {
> >
> >         return StreamSupport.stream(permissionServices.spliterator(), false);
> >
> >     }
> >
> >
> >
> > A little bit of research showed, that this method is being executed in parallel by an batch job, which explains the Exception: InstanceImpl#iterator() seems not to be threadsafe. As a consequence, removeFirst() gets executed, even if there is no Element in the List.
> >
> >
> >
> > A quick fix for us was to put the call into an synchronized block:
> >
> >     private synchronized Stream<PolicyPermissionService> permissionServices() {
> >
> >         return StreamSupport.stream(permissionServices.spliterator(), false);
> >
> >     }
> >
> >
> >
> > However, I think it should not be required to do so and it was working fine in 7.1.0.
> >
> >
> >
> > Stacktrace:
> >
> > java.util.NoSuchElementException
> >
> >         at java.util.LinkedList.removeFirst(LinkedList.java:270)
> >
> >         at java.util.LinkedList.pop(LinkedList.java:801)
> >
> >         at org.apache.webbeans.context.creational.CreationalContextImpl.removeInjectionPoint(CreationalContextImpl.java:142)
> >
> >         at org.apache.webbeans.inject.instance.InstanceImpl.iterator(InstanceImpl.java:256)
> >
> >         at java.lang.Iterable.spliterator(Iterable.java:101)
> >
> >         at de.faktorzehn.ipm.core.services.user.PolicyPermissionServiceProvider.permissionServices(PolicyPermissionServiceProvider.java:46)
> >
> >         at de.faktorzehn.ipm.core.services.user.PolicyPermissionServiceProvider.getPermissionService(PolicyPermissionServiceProvider.java:38)
> >
> >         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.hasReadPermission(JpaPolicyRepository.java:383)
> >
> >         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.lambda$readPermissionFor$0(JpaPolicyRepository.java:110)
> >
> >         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.internalGetPolicy(JpaPolicyRepository.java:121)
> >
> >         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.getPolicy(JpaPolicyRepository.java:106)
> >
> >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >
> >         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> >
> >         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >
> >         at java.lang.reflect.Method.invoke(Method.java:498)
> >
> >         at org.apache.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113)
> >
> >         at org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106)
> >
> >         at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:78)
> >
> >         at org.apache.openejb.cdi.transactional.InterceptorBase.intercept(InterceptorBase.java:67)
> >
> >         at org.apache.openejb.cdi.transactional.RequiredInterceptor.intercept(RequiredInterceptor.java:35)
> >
> >         at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
> >
> >         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >
> >         at java.lang.reflect.Method.invoke(Method.java:498)
> >
> >         at org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136)
> >
> >         at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:65)
> >
> >         at org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139)
> >
> >         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository$$OwbInterceptProxy1.getPolicy(de/faktorzehn/ipm/core/services/persistence/JpaPolicyRepository.java)
> >
> >         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository$$OwbNormalScopeProxy1.getPolicy(de/faktorzehn/ipm/core/services/persistence/JpaPolicyRepository.java)
> >
> >         at de.faktorzehn.ipm.core.batch.services.EditPolicyService.getPolicy(EditPolicyService.java:214)
> >
> >         at de.faktorzehn.ipm.core.batch.services.EditPolicyService.lambda$editPolicy$2(EditPolicyService.java:89)
> >
> >         at de.faktorzehn.ipm.core.batch.services.FailCheckedEditing.withPolicy(FailCheckedEditing.java:236)
> >
> >         at de.faktorzehn.ipm.core.batch.services.EditPolicyService.editPolicy(EditPolicyService.java:89)
> >
> >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >
> >         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> >
> >         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >
> >         at java.lang.reflect.Method.invoke(Method.java:498)
> >
> >         at org.apache.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113)
> >
> >         at org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106)
> >
> >         at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:78)
> >
> >         at org.apache.openejb.cdi.transactional.InterceptorBase.intercept(InterceptorBase.java:67)
> >
> >         at org.apache.openejb.cdi.transactional.RequiredInterceptor.intercept(RequiredInterceptor.java:35)
> >
> >         at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
> >
> >         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >
> >         at java.lang.reflect.Method.invoke(Method.java:498)
> >
> >         at org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136)
> >
> >         at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:65)
> >
> >         at org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139)
> >
> >         at de.faktorzehn.ipm.sample.batch.hranpassung.HrAnpassungService$$OwbInterceptProxy1.editPolicy(de/faktorzehn/ipm/sample/batch/hranpassung/HrAnpassungService.java)
> >
> >         at de.faktorzehn.ipm.sample.batch.hranpassung.HrAnpassungService$$OwbNormalScopeProxy0.editPolicy(de/faktorzehn/ipm/sample/batch/hranpassung/HrAnpassungService.java)
> >
> >         at de.faktorzehn.ipm.core.batch.ParameterizedPolicyWriter.lambda$doWriteItems$0(ParameterizedPolicyWriter.java:59)
> >
> >         at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
> >
> >         at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
> >
> >         at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
> >
> >         at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
> >
> >         at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
> >
> >         at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
> >
> >         at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
> >
> >         at de.faktorzehn.ipm.core.batch.ParameterizedPolicyWriter.doWriteItems(ParameterizedPolicyWriter.java:60)
> >
> >         at org.apache.batchee.extras.typed.TypedItemWriter.writeItems(TypedItemWriter.java:35)
> >
> >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >
> >         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> >
> >         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >
> >         at java.lang.reflect.Method.invoke(Method.java:498)
> >
> >         at org.apache.batchee.container.proxy.BatchProxyInvocationHandler.invoke(BatchProxyInvocationHandler.java:55)
> >
> >         at com.sun.proxy.$Proxy204.writeItems(Unknown Source)
> >
> >         at org.apache.batchee.container.impl.controller.chunk.ChunkStepController.writeChunk(ChunkStepController.java:433)
> >
> >         at org.apache.batchee.container.impl.controller.chunk.ChunkStepController.invokeChunk(ChunkStepController.java:579)
> >
> >         at org.apache.batchee.container.impl.controller.chunk.ChunkStepController.invokeCoreStep(ChunkStepController.java:732)
> >
> >         at org.apache.batchee.container.impl.controller.BaseStepController.execute(BaseStepController.java:157)
> >
> >         at org.apache.batchee.container.impl.controller.ExecutionTransitioner.doExecutionLoop(ExecutionTransitioner.java:106)
> >
> >         at org.apache.batchee.container.impl.controller.JobThreadRootController.originateExecutionOnThread(JobThreadRootController.java:110)
> >
> >         at org.apache.batchee.container.util.BatchWorkUnit.run(BatchWorkUnit.java:62)
> >
> >         at org.apache.batchee.tools.services.thread.ThreadExecutorEjb.executeTask(ThreadExecutorEjb.java:51)
> >
> >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >
> >         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> >
> >         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >
> >         at java.lang.reflect.Method.invoke(Method.java:498)
> >
> >         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:205)
> >
> >         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:186)
> >
> >         at org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:191)
> >
> >         at org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:102)
> >
> >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >
> >         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> >
> >         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >
> >         at java.lang.reflect.Method.invoke(Method.java:498)
> >
> >         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:205)
> >
> >         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:186)
> >
> >         at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85)
> >
> >         at org.apache.openejb.core.singleton.SingletonContainer._invoke(SingletonContainer.java:272)
> >
> >         at org.apache.openejb.core.singleton.SingletonContainer.invoke(SingletonContainer.java:221)
> >
> >         at org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:265)
> >
> >         at org.apache.openejb.core.ivm.EjbObjectProxyHandler$1.call(EjbObjectProxyHandler.java:252)
> >
> >         at org.apache.openejb.threads.task.CUTask.invoke(CUTask.java:100)
> >
> >         at org.apache.openejb.threads.task.CUCallable.call(CUCallable.java:31)
> >
> >         at org.apache.openejb.async.AsynchronousPool$AsynchronousCall.call(AsynchronousPool.java:113)
> >
> >         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> >
> >         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> >
> >         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> >
> >         at java.lang.Thread.run(Thread.java:748)
> >
> >
> >
> > Best Regards
> >
> >
> >
> >
> > Matthias Knappik
> > Senior Developer
> >
> > Faktor Zehn GmbH
> > Friedenheimer Brücke 21
> > 80639 München
> >
> > Phone    +49 89 520311-683
> > Fax        +49 89 520311-8683
> > Mobile    +49 151 582 56644
> >
> > Matthias.Knappik@faktorzehn.de
> > http://www.ConVista.com
> >
> >
> >
> > Faktor Zehn GmbH       Sitz der Gesellschaft: München  Registernummer: HRB 242535 Registergericht: Amtsgericht München
> > Geschaeftsfuehrung: Dr. Florian Schwandt, Joerg Renger
> 
> 
> 
> ----------------------------------------------------------------------------------
> 
> Faktor Zehn GmbH      Sitz der Gesellschaft: Muenchen   Registernummer: HRB 242535 Registergericht: Amtsgericht Muenchen
> Geschaeftsfuehrung: Dr. Florian Schwandt, Joerg Renger
> 


Re: NoSuchElementException in InstanceImpl#iterator() after upgrading openejb-core to 8.0.0-M3

Posted by Romain Manni-Bucau <rm...@gmail.com>.
We got some perf enhancements about Instance so it can be visible now
whereas it was hidden before cause slower.

Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://rmannibucau.metawerx.net/> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
<https://www.packtpub.com/application-development/java-ee-8-high-performance>


Le mer. 11 sept. 2019 à 11:51, Matthias Knappik <
Matthias.Knappik@faktorzehn.de> a écrit :

> Hi,
> Thank you for your response. I'll change our behavior in regards to
> concurrency.
> However, I would like to point out,  that the test in our project was
> executed thousands of times without any problem in 7.1.0 and prior
> releases, while the issue is 100% reproducible with 8.0.0-M3. So I really
> wonder what causes this difference.
>
> Best Regards
>
> Matthias Knappik
>
> Senior Developer
>
> Faktor Zehn GmbH
> Friedenheimer Brücke 21
> 80639 München
>
> Phone   +49 89 520311-683
> Fax     +49 89 520311-8683
> Mobile  +49 151 582 56644
>
> Matthias.Knappik@faktorzehn.de
> http://www.ConVista.com
>
> -----Ursprüngliche Nachricht-----
> Von: Mark Struberg <st...@yahoo.de>
> Gesendet: Mittwoch, 11. September 2019 10:02
> An: openwebbeans-user <us...@openwebbeans.apache.org>
> Betreff: Re: NoSuchElementException in InstanceImpl#iterator() after
> upgrading openejb-core to 8.0.0-M3
>
> To be honest, I'm not sure this is really a bug.
>
> a.) the CDI architecture guide basically says that whenever you use
> @ApplicationScoped in a multi-threaded scenario then you have to deal with
> concurrency yourself. After all those are not @Stateless EJBs...
> b.) The Instance definition also doesn't define that Instance is thread
> safe.
>
> So even if WE fix it, it is not guaranteed that you will be blowing up on
> many different containers. As it's not defined by the spec.
>
> LieGrue,
> strub
>
> > Am 11.09.2019 um 09:43 schrieb Romain Manni-Bucau <rmannibucau@gmail.com
> >:
> >
> > Hi Matthias,
> >
> > I don't think it is a regression by itself since this is the behavior
> since a long time but it is clearly a bug.
> > Will work on it very soon.
> >
> > Romain Manni-Bucau
> > @rmannibucau |  Blog | Old Blog | Github | LinkedIn | Book
> >
> >
> > Le mer. 11 sept. 2019 à 09:24, Matthias Knappik <
> Matthias.Knappik@faktorzehn.de> a écrit :
> > Hi,
> >
> > after upgrading the openejb-core dependency in one of our projects from
> 7.1.0 to 8.0.0-M3 in order to support java 11, one of our tests was failing
> due to an NoSuchElementException in
> org.apache.webbeans.inject.instance.InstanceImpl#iterator().
> >
> > Our last executed code is:
> >
> >     private Stream<PolicyPermissionService> permissionServices() {
> >
> >         return StreamSupport.stream(permissionServices.spliterator(),
> false);
> >
> >     }
> >
> >
> >
> > A little bit of research showed, that this method is being executed in
> parallel by an batch job, which explains the Exception:
> InstanceImpl#iterator() seems not to be threadsafe. As a consequence,
> removeFirst() gets executed, even if there is no Element in the List.
> >
> >
> >
> > A quick fix for us was to put the call into an synchronized block:
> >
> >     private synchronized Stream<PolicyPermissionService>
> permissionServices() {
> >
> >         return StreamSupport.stream(permissionServices.spliterator(),
> false);
> >
> >     }
> >
> >
> >
> > However, I think it should not be required to do so and it was working
> fine in 7.1.0.
> >
> >
> >
> > Stacktrace:
> >
> > java.util.NoSuchElementException
> >
> >         at java.util.LinkedList.removeFirst(LinkedList.java:270)
> >
> >         at java.util.LinkedList.pop(LinkedList.java:801)
> >
> >         at
> org.apache.webbeans.context.creational.CreationalContextImpl.removeInjectionPoint(CreationalContextImpl.java:142)
> >
> >         at
> org.apache.webbeans.inject.instance.InstanceImpl.iterator(InstanceImpl.java:256)
> >
> >         at java.lang.Iterable.spliterator(Iterable.java:101)
> >
> >         at
> de.faktorzehn.ipm.core.services.user.PolicyPermissionServiceProvider.permissionServices(PolicyPermissionServiceProvider.java:46)
> >
> >         at
> de.faktorzehn.ipm.core.services.user.PolicyPermissionServiceProvider.getPermissionService(PolicyPermissionServiceProvider.java:38)
> >
> >         at
> de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.hasReadPermission(JpaPolicyRepository.java:383)
> >
> >         at
> de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.lambda$readPermissionFor$0(JpaPolicyRepository.java:110)
> >
> >         at
> de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.internalGetPolicy(JpaPolicyRepository.java:121)
> >
> >         at
> de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.getPolicy(JpaPolicyRepository.java:106)
> >
> >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >
> >         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> >
> >         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >
> >         at java.lang.reflect.Method.invoke(Method.java:498)
> >
> >         at
> org.apache.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113)
> >
> >         at
> org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106)
> >
> >         at
> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:78)
> >
> >         at
> org.apache.openejb.cdi.transactional.InterceptorBase.intercept(InterceptorBase.java:67)
> >
> >         at
> org.apache.openejb.cdi.transactional.RequiredInterceptor.intercept(RequiredInterceptor.java:35)
> >
> >         at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
> >
> >         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >
> >         at java.lang.reflect.Method.invoke(Method.java:498)
> >
> >         at
> org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136)
> >
> >         at
> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:65)
> >
> >         at
> org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139)
> >
> >         at
> de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository$$OwbInterceptProxy1.getPolicy(de/faktorzehn/ipm/core/services/persistence/JpaPolicyRepository.java)
> >
> >         at
> de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository$$OwbNormalScopeProxy1.getPolicy(de/faktorzehn/ipm/core/services/persistence/JpaPolicyRepository.java)
> >
> >         at
> de.faktorzehn.ipm.core.batch.services.EditPolicyService.getPolicy(EditPolicyService.java:214)
> >
> >         at
> de.faktorzehn.ipm.core.batch.services.EditPolicyService.lambda$editPolicy$2(EditPolicyService.java:89)
> >
> >         at
> de.faktorzehn.ipm.core.batch.services.FailCheckedEditing.withPolicy(FailCheckedEditing.java:236)
> >
> >         at
> de.faktorzehn.ipm.core.batch.services.EditPolicyService.editPolicy(EditPolicyService.java:89)
> >
> >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >
> >         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> >
> >         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >
> >         at java.lang.reflect.Method.invoke(Method.java:498)
> >
> >         at
> org.apache.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113)
> >
> >         at
> org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106)
> >
> >         at
> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:78)
> >
> >         at
> org.apache.openejb.cdi.transactional.InterceptorBase.intercept(InterceptorBase.java:67)
> >
> >         at
> org.apache.openejb.cdi.transactional.RequiredInterceptor.intercept(RequiredInterceptor.java:35)
> >
> >         at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
> >
> >         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >
> >         at java.lang.reflect.Method.invoke(Method.java:498)
> >
> >         at
> org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136)
> >
> >         at
> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:65)
> >
> >         at
> org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139)
> >
> >         at
> de.faktorzehn.ipm.sample.batch.hranpassung.HrAnpassungService$$OwbInterceptProxy1.editPolicy(de/faktorzehn/ipm/sample/batch/hranpassung/HrAnpassungService.java)
> >
> >         at
> de.faktorzehn.ipm.sample.batch.hranpassung.HrAnpassungService$$OwbNormalScopeProxy0.editPolicy(de/faktorzehn/ipm/sample/batch/hranpassung/HrAnpassungService.java)
> >
> >         at
> de.faktorzehn.ipm.core.batch.ParameterizedPolicyWriter.lambda$doWriteItems$0(ParameterizedPolicyWriter.java:59)
> >
> >         at
> java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
> >
> >         at
> java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
> >
> >         at
> java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
> >
> >         at
> java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
> >
> >         at
> java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
> >
> >         at
> java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
> >
> >         at
> java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
> >
> >         at
> de.faktorzehn.ipm.core.batch.ParameterizedPolicyWriter.doWriteItems(ParameterizedPolicyWriter.java:60)
> >
> >         at
> org.apache.batchee.extras.typed.TypedItemWriter.writeItems(TypedItemWriter.java:35)
> >
> >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >
> >         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> >
> >         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >
> >         at java.lang.reflect.Method.invoke(Method.java:498)
> >
> >         at
> org.apache.batchee.container.proxy.BatchProxyInvocationHandler.invoke(BatchProxyInvocationHandler.java:55)
> >
> >         at com.sun.proxy.$Proxy204.writeItems(Unknown Source)
> >
> >         at
> org.apache.batchee.container.impl.controller.chunk.ChunkStepController.writeChunk(ChunkStepController.java:433)
> >
> >         at
> org.apache.batchee.container.impl.controller.chunk.ChunkStepController.invokeChunk(ChunkStepController.java:579)
> >
> >         at
> org.apache.batchee.container.impl.controller.chunk.ChunkStepController.invokeCoreStep(ChunkStepController.java:732)
> >
> >         at
> org.apache.batchee.container.impl.controller.BaseStepController.execute(BaseStepController.java:157)
> >
> >         at
> org.apache.batchee.container.impl.controller.ExecutionTransitioner.doExecutionLoop(ExecutionTransitioner.java:106)
> >
> >         at
> org.apache.batchee.container.impl.controller.JobThreadRootController.originateExecutionOnThread(JobThreadRootController.java:110)
> >
> >         at
> org.apache.batchee.container.util.BatchWorkUnit.run(BatchWorkUnit.java:62)
> >
> >         at
> org.apache.batchee.tools.services.thread.ThreadExecutorEjb.executeTask(ThreadExecutorEjb.java:51)
> >
> >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >
> >         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> >
> >         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >
> >         at java.lang.reflect.Method.invoke(Method.java:498)
> >
> >         at
> org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:205)
> >
> >         at
> org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:186)
> >
> >         at
> org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:191)
> >
> >         at
> org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:102)
> >
> >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >
> >         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> >
> >         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >
> >         at java.lang.reflect.Method.invoke(Method.java:498)
> >
> >         at
> org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:205)
> >
> >         at
> org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:186)
> >
> >         at
> org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85)
> >
> >         at
> org.apache.openejb.core.singleton.SingletonContainer._invoke(SingletonContainer.java:272)
> >
> >         at
> org.apache.openejb.core.singleton.SingletonContainer.invoke(SingletonContainer.java:221)
> >
> >         at
> org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:265)
> >
> >         at
> org.apache.openejb.core.ivm.EjbObjectProxyHandler$1.call(EjbObjectProxyHandler.java:252)
> >
> >         at org.apache.openejb.threads.task.CUTask.invoke(CUTask.java:100)
> >
> >         at
> org.apache.openejb.threads.task.CUCallable.call(CUCallable.java:31)
> >
> >         at
> org.apache.openejb.async.AsynchronousPool$AsynchronousCall.call(AsynchronousPool.java:113)
> >
> >         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> >
> >         at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> >
> >         at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> >
> >         at java.lang.Thread.run(Thread.java:748)
> >
> >
> >
> > Best Regards
> >
> >
> >
> >
> > Matthias Knappik
> > Senior Developer
> >
> > Faktor Zehn GmbH
> > Friedenheimer Brücke 21
> > 80639 München
> >
> > Phone    +49 89 520311-683
> > Fax        +49 89 520311-8683
> > Mobile    +49 151 582 56644
> >
> > Matthias.Knappik@faktorzehn.de
> > http://www.ConVista.com
> >
> >
> >
> > Faktor Zehn GmbH       Sitz der Gesellschaft: München  Registernummer:
> HRB 242535 Registergericht: Amtsgericht München
> > Geschaeftsfuehrung: Dr. Florian Schwandt, Joerg Renger
>
>
>
>
> ----------------------------------------------------------------------------------
>
> Faktor Zehn GmbH      Sitz der Gesellschaft: Muenchen   Registernummer:
> HRB 242535 Registergericht: Amtsgericht Muenchen
> Geschaeftsfuehrung: Dr. Florian Schwandt, Joerg Renger
>
>

AW: NoSuchElementException in InstanceImpl#iterator() after upgrading openejb-core to 8.0.0-M3

Posted by Matthias Knappik <Ma...@faktorzehn.de>.
Hi,
Thank you for your response. I'll change our behavior in regards to concurrency.
However, I would like to point out,  that the test in our project was executed thousands of times without any problem in 7.1.0 and prior releases, while the issue is 100% reproducible with 8.0.0-M3. So I really wonder what causes this difference.

Best Regards

Matthias Knappik

Senior Developer

Faktor Zehn GmbH
Friedenheimer Brücke 21
80639 München

Phone   +49 89 520311-683
Fax     +49 89 520311-8683
Mobile  +49 151 582 56644

Matthias.Knappik@faktorzehn.de
http://www.ConVista.com

-----Ursprüngliche Nachricht-----
Von: Mark Struberg <st...@yahoo.de>
Gesendet: Mittwoch, 11. September 2019 10:02
An: openwebbeans-user <us...@openwebbeans.apache.org>
Betreff: Re: NoSuchElementException in InstanceImpl#iterator() after upgrading openejb-core to 8.0.0-M3

To be honest, I'm not sure this is really a bug.

a.) the CDI architecture guide basically says that whenever you use @ApplicationScoped in a multi-threaded scenario then you have to deal with concurrency yourself. After all those are not @Stateless EJBs...
b.) The Instance definition also doesn't define that Instance is thread safe.

So even if WE fix it, it is not guaranteed that you will be blowing up on many different containers. As it's not defined by the spec.

LieGrue,
strub

> Am 11.09.2019 um 09:43 schrieb Romain Manni-Bucau <rm...@gmail.com>:
>
> Hi Matthias,
>
> I don't think it is a regression by itself since this is the behavior since a long time but it is clearly a bug.
> Will work on it very soon.
>
> Romain Manni-Bucau
> @rmannibucau |  Blog | Old Blog | Github | LinkedIn | Book
>
>
> Le mer. 11 sept. 2019 à 09:24, Matthias Knappik <Ma...@faktorzehn.de> a écrit :
> Hi,
>
> after upgrading the openejb-core dependency in one of our projects from 7.1.0 to 8.0.0-M3 in order to support java 11, one of our tests was failing due to an NoSuchElementException in org.apache.webbeans.inject.instance.InstanceImpl#iterator().
>
> Our last executed code is:
>
>     private Stream<PolicyPermissionService> permissionServices() {
>
>         return StreamSupport.stream(permissionServices.spliterator(), false);
>
>     }
>
>
>
> A little bit of research showed, that this method is being executed in parallel by an batch job, which explains the Exception: InstanceImpl#iterator() seems not to be threadsafe. As a consequence, removeFirst() gets executed, even if there is no Element in the List.
>
>
>
> A quick fix for us was to put the call into an synchronized block:
>
>     private synchronized Stream<PolicyPermissionService> permissionServices() {
>
>         return StreamSupport.stream(permissionServices.spliterator(), false);
>
>     }
>
>
>
> However, I think it should not be required to do so and it was working fine in 7.1.0.
>
>
>
> Stacktrace:
>
> java.util.NoSuchElementException
>
>         at java.util.LinkedList.removeFirst(LinkedList.java:270)
>
>         at java.util.LinkedList.pop(LinkedList.java:801)
>
>         at org.apache.webbeans.context.creational.CreationalContextImpl.removeInjectionPoint(CreationalContextImpl.java:142)
>
>         at org.apache.webbeans.inject.instance.InstanceImpl.iterator(InstanceImpl.java:256)
>
>         at java.lang.Iterable.spliterator(Iterable.java:101)
>
>         at de.faktorzehn.ipm.core.services.user.PolicyPermissionServiceProvider.permissionServices(PolicyPermissionServiceProvider.java:46)
>
>         at de.faktorzehn.ipm.core.services.user.PolicyPermissionServiceProvider.getPermissionService(PolicyPermissionServiceProvider.java:38)
>
>         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.hasReadPermission(JpaPolicyRepository.java:383)
>
>         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.lambda$readPermissionFor$0(JpaPolicyRepository.java:110)
>
>         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.internalGetPolicy(JpaPolicyRepository.java:121)
>
>         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.getPolicy(JpaPolicyRepository.java:106)
>
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>
>         at java.lang.reflect.Method.invoke(Method.java:498)
>
>         at org.apache.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113)
>
>         at org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106)
>
>         at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:78)
>
>         at org.apache.openejb.cdi.transactional.InterceptorBase.intercept(InterceptorBase.java:67)
>
>         at org.apache.openejb.cdi.transactional.RequiredInterceptor.intercept(RequiredInterceptor.java:35)
>
>         at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
>
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>
>         at java.lang.reflect.Method.invoke(Method.java:498)
>
>         at org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136)
>
>         at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:65)
>
>         at org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139)
>
>         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository$$OwbInterceptProxy1.getPolicy(de/faktorzehn/ipm/core/services/persistence/JpaPolicyRepository.java)
>
>         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository$$OwbNormalScopeProxy1.getPolicy(de/faktorzehn/ipm/core/services/persistence/JpaPolicyRepository.java)
>
>         at de.faktorzehn.ipm.core.batch.services.EditPolicyService.getPolicy(EditPolicyService.java:214)
>
>         at de.faktorzehn.ipm.core.batch.services.EditPolicyService.lambda$editPolicy$2(EditPolicyService.java:89)
>
>         at de.faktorzehn.ipm.core.batch.services.FailCheckedEditing.withPolicy(FailCheckedEditing.java:236)
>
>         at de.faktorzehn.ipm.core.batch.services.EditPolicyService.editPolicy(EditPolicyService.java:89)
>
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>
>         at java.lang.reflect.Method.invoke(Method.java:498)
>
>         at org.apache.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113)
>
>         at org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106)
>
>         at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:78)
>
>         at org.apache.openejb.cdi.transactional.InterceptorBase.intercept(InterceptorBase.java:67)
>
>         at org.apache.openejb.cdi.transactional.RequiredInterceptor.intercept(RequiredInterceptor.java:35)
>
>         at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
>
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>
>         at java.lang.reflect.Method.invoke(Method.java:498)
>
>         at org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136)
>
>         at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:65)
>
>         at org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139)
>
>         at de.faktorzehn.ipm.sample.batch.hranpassung.HrAnpassungService$$OwbInterceptProxy1.editPolicy(de/faktorzehn/ipm/sample/batch/hranpassung/HrAnpassungService.java)
>
>         at de.faktorzehn.ipm.sample.batch.hranpassung.HrAnpassungService$$OwbNormalScopeProxy0.editPolicy(de/faktorzehn/ipm/sample/batch/hranpassung/HrAnpassungService.java)
>
>         at de.faktorzehn.ipm.core.batch.ParameterizedPolicyWriter.lambda$doWriteItems$0(ParameterizedPolicyWriter.java:59)
>
>         at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
>
>         at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
>
>         at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
>
>         at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
>
>         at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
>
>         at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
>
>         at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
>
>         at de.faktorzehn.ipm.core.batch.ParameterizedPolicyWriter.doWriteItems(ParameterizedPolicyWriter.java:60)
>
>         at org.apache.batchee.extras.typed.TypedItemWriter.writeItems(TypedItemWriter.java:35)
>
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>
>         at java.lang.reflect.Method.invoke(Method.java:498)
>
>         at org.apache.batchee.container.proxy.BatchProxyInvocationHandler.invoke(BatchProxyInvocationHandler.java:55)
>
>         at com.sun.proxy.$Proxy204.writeItems(Unknown Source)
>
>         at org.apache.batchee.container.impl.controller.chunk.ChunkStepController.writeChunk(ChunkStepController.java:433)
>
>         at org.apache.batchee.container.impl.controller.chunk.ChunkStepController.invokeChunk(ChunkStepController.java:579)
>
>         at org.apache.batchee.container.impl.controller.chunk.ChunkStepController.invokeCoreStep(ChunkStepController.java:732)
>
>         at org.apache.batchee.container.impl.controller.BaseStepController.execute(BaseStepController.java:157)
>
>         at org.apache.batchee.container.impl.controller.ExecutionTransitioner.doExecutionLoop(ExecutionTransitioner.java:106)
>
>         at org.apache.batchee.container.impl.controller.JobThreadRootController.originateExecutionOnThread(JobThreadRootController.java:110)
>
>         at org.apache.batchee.container.util.BatchWorkUnit.run(BatchWorkUnit.java:62)
>
>         at org.apache.batchee.tools.services.thread.ThreadExecutorEjb.executeTask(ThreadExecutorEjb.java:51)
>
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>
>         at java.lang.reflect.Method.invoke(Method.java:498)
>
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:205)
>
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:186)
>
>         at org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:191)
>
>         at org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:102)
>
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>
>         at java.lang.reflect.Method.invoke(Method.java:498)
>
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:205)
>
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:186)
>
>         at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85)
>
>         at org.apache.openejb.core.singleton.SingletonContainer._invoke(SingletonContainer.java:272)
>
>         at org.apache.openejb.core.singleton.SingletonContainer.invoke(SingletonContainer.java:221)
>
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:265)
>
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler$1.call(EjbObjectProxyHandler.java:252)
>
>         at org.apache.openejb.threads.task.CUTask.invoke(CUTask.java:100)
>
>         at org.apache.openejb.threads.task.CUCallable.call(CUCallable.java:31)
>
>         at org.apache.openejb.async.AsynchronousPool$AsynchronousCall.call(AsynchronousPool.java:113)
>
>         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>
>         at java.lang.Thread.run(Thread.java:748)
>
>
>
> Best Regards
>
>
>
>
> Matthias Knappik
> Senior Developer
>
> Faktor Zehn GmbH
> Friedenheimer Brücke 21
> 80639 München
>
> Phone    +49 89 520311-683
> Fax        +49 89 520311-8683
> Mobile    +49 151 582 56644
>
> Matthias.Knappik@faktorzehn.de
> http://www.ConVista.com
>
>
>
> Faktor Zehn GmbH       Sitz der Gesellschaft: München  Registernummer: HRB 242535 Registergericht: Amtsgericht München
> Geschaeftsfuehrung: Dr. Florian Schwandt, Joerg Renger



----------------------------------------------------------------------------------

Faktor Zehn GmbH      Sitz der Gesellschaft: Muenchen   Registernummer: HRB 242535 Registergericht: Amtsgericht Muenchen
Geschaeftsfuehrung: Dr. Florian Schwandt, Joerg Renger


Re: NoSuchElementException in InstanceImpl#iterator() after upgrading openejb-core to 8.0.0-M3

Posted by Mark Struberg <st...@yahoo.de>.
To be honest, I'm not sure this is really a bug. 

a.) the CDI architecture guide basically says that whenever you use @ApplicationScoped in a multi-threaded scenario then you have to deal with concurrency yourself. After all those are not @Stateless EJBs...
b.) The Instance definition also doesn't define that Instance is thread safe.

So even if WE fix it, it is not guaranteed that you will be blowing up on many different containers. As it's not defined by the spec.

LieGrue,
strub

> Am 11.09.2019 um 09:43 schrieb Romain Manni-Bucau <rm...@gmail.com>:
> 
> Hi Matthias,
> 
> I don't think it is a regression by itself since this is the behavior since a long time but it is clearly a bug.
> Will work on it very soon.
> 
> Romain Manni-Bucau
> @rmannibucau |  Blog | Old Blog | Github | LinkedIn | Book
> 
> 
> Le mer. 11 sept. 2019 à 09:24, Matthias Knappik <Ma...@faktorzehn.de> a écrit :
> Hi,
> 
> after upgrading the openejb-core dependency in one of our projects from 7.1.0 to 8.0.0-M3 in order to support java 11, one of our tests was failing due to an NoSuchElementException in org.apache.webbeans.inject.instance.InstanceImpl#iterator().
> 
> Our last executed code is:
> 
>     private Stream<PolicyPermissionService> permissionServices() {
> 
>         return StreamSupport.stream(permissionServices.spliterator(), false);
> 
>     }
> 
>  
> 
> A little bit of research showed, that this method is being executed in parallel by an batch job, which explains the Exception: InstanceImpl#iterator() seems not to be threadsafe. As a consequence, removeFirst() gets executed, even if there is no Element in the List.
> 
>  
> 
> A quick fix for us was to put the call into an synchronized block:
> 
>     private synchronized Stream<PolicyPermissionService> permissionServices() {
> 
>         return StreamSupport.stream(permissionServices.spliterator(), false);
> 
>     }
> 
>  
> 
> However, I think it should not be required to do so and it was working fine in 7.1.0.
> 
>  
> 
> Stacktrace:
> 
> java.util.NoSuchElementException
> 
>         at java.util.LinkedList.removeFirst(LinkedList.java:270)
> 
>         at java.util.LinkedList.pop(LinkedList.java:801)
> 
>         at org.apache.webbeans.context.creational.CreationalContextImpl.removeInjectionPoint(CreationalContextImpl.java:142)
> 
>         at org.apache.webbeans.inject.instance.InstanceImpl.iterator(InstanceImpl.java:256)
> 
>         at java.lang.Iterable.spliterator(Iterable.java:101)
> 
>         at de.faktorzehn.ipm.core.services.user.PolicyPermissionServiceProvider.permissionServices(PolicyPermissionServiceProvider.java:46)
> 
>         at de.faktorzehn.ipm.core.services.user.PolicyPermissionServiceProvider.getPermissionService(PolicyPermissionServiceProvider.java:38)
> 
>         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.hasReadPermission(JpaPolicyRepository.java:383)
> 
>         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.lambda$readPermissionFor$0(JpaPolicyRepository.java:110)
> 
>         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.internalGetPolicy(JpaPolicyRepository.java:121)
> 
>         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.getPolicy(JpaPolicyRepository.java:106)
> 
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> 
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 
>         at java.lang.reflect.Method.invoke(Method.java:498)
> 
>         at org.apache.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113)
> 
>         at org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106)
> 
>         at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:78)
> 
>         at org.apache.openejb.cdi.transactional.InterceptorBase.intercept(InterceptorBase.java:67)
> 
>         at org.apache.openejb.cdi.transactional.RequiredInterceptor.intercept(RequiredInterceptor.java:35)
> 
>         at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
> 
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 
>         at java.lang.reflect.Method.invoke(Method.java:498)
> 
>         at org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136)
> 
>         at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:65)
> 
>         at org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139)
> 
>         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository$$OwbInterceptProxy1.getPolicy(de/faktorzehn/ipm/core/services/persistence/JpaPolicyRepository.java)
> 
>         at de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository$$OwbNormalScopeProxy1.getPolicy(de/faktorzehn/ipm/core/services/persistence/JpaPolicyRepository.java)
> 
>         at de.faktorzehn.ipm.core.batch.services.EditPolicyService.getPolicy(EditPolicyService.java:214)
> 
>         at de.faktorzehn.ipm.core.batch.services.EditPolicyService.lambda$editPolicy$2(EditPolicyService.java:89)
> 
>         at de.faktorzehn.ipm.core.batch.services.FailCheckedEditing.withPolicy(FailCheckedEditing.java:236)
> 
>         at de.faktorzehn.ipm.core.batch.services.EditPolicyService.editPolicy(EditPolicyService.java:89)
> 
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> 
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 
>         at java.lang.reflect.Method.invoke(Method.java:498)
> 
>         at org.apache.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113)
> 
>         at org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106)
> 
>         at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:78)
> 
>         at org.apache.openejb.cdi.transactional.InterceptorBase.intercept(InterceptorBase.java:67)
> 
>         at org.apache.openejb.cdi.transactional.RequiredInterceptor.intercept(RequiredInterceptor.java:35)
> 
>         at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
> 
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 
>         at java.lang.reflect.Method.invoke(Method.java:498)
> 
>         at org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136)
> 
>         at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:65)
> 
>         at org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139)
> 
>         at de.faktorzehn.ipm.sample.batch.hranpassung.HrAnpassungService$$OwbInterceptProxy1.editPolicy(de/faktorzehn/ipm/sample/batch/hranpassung/HrAnpassungService.java)
> 
>         at de.faktorzehn.ipm.sample.batch.hranpassung.HrAnpassungService$$OwbNormalScopeProxy0.editPolicy(de/faktorzehn/ipm/sample/batch/hranpassung/HrAnpassungService.java)
> 
>         at de.faktorzehn.ipm.core.batch.ParameterizedPolicyWriter.lambda$doWriteItems$0(ParameterizedPolicyWriter.java:59)
> 
>         at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
> 
>         at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
> 
>         at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
> 
>         at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
> 
>         at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
> 
>         at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
> 
>         at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
> 
>         at de.faktorzehn.ipm.core.batch.ParameterizedPolicyWriter.doWriteItems(ParameterizedPolicyWriter.java:60)
> 
>         at org.apache.batchee.extras.typed.TypedItemWriter.writeItems(TypedItemWriter.java:35)
> 
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> 
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 
>         at java.lang.reflect.Method.invoke(Method.java:498)
> 
>         at org.apache.batchee.container.proxy.BatchProxyInvocationHandler.invoke(BatchProxyInvocationHandler.java:55)
> 
>         at com.sun.proxy.$Proxy204.writeItems(Unknown Source)
> 
>         at org.apache.batchee.container.impl.controller.chunk.ChunkStepController.writeChunk(ChunkStepController.java:433)
> 
>         at org.apache.batchee.container.impl.controller.chunk.ChunkStepController.invokeChunk(ChunkStepController.java:579)
> 
>         at org.apache.batchee.container.impl.controller.chunk.ChunkStepController.invokeCoreStep(ChunkStepController.java:732)
> 
>         at org.apache.batchee.container.impl.controller.BaseStepController.execute(BaseStepController.java:157)
> 
>         at org.apache.batchee.container.impl.controller.ExecutionTransitioner.doExecutionLoop(ExecutionTransitioner.java:106)
> 
>         at org.apache.batchee.container.impl.controller.JobThreadRootController.originateExecutionOnThread(JobThreadRootController.java:110)
> 
>         at org.apache.batchee.container.util.BatchWorkUnit.run(BatchWorkUnit.java:62)
> 
>         at org.apache.batchee.tools.services.thread.ThreadExecutorEjb.executeTask(ThreadExecutorEjb.java:51)
> 
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> 
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 
>         at java.lang.reflect.Method.invoke(Method.java:498)
> 
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:205)
> 
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:186)
> 
>         at org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:191)
> 
>         at org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:102)
> 
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> 
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 
>         at java.lang.reflect.Method.invoke(Method.java:498)
> 
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:205)
> 
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:186)
> 
>         at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85)
> 
>         at org.apache.openejb.core.singleton.SingletonContainer._invoke(SingletonContainer.java:272)
> 
>         at org.apache.openejb.core.singleton.SingletonContainer.invoke(SingletonContainer.java:221)
> 
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:265)
> 
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler$1.call(EjbObjectProxyHandler.java:252)
> 
>         at org.apache.openejb.threads.task.CUTask.invoke(CUTask.java:100)
> 
>         at org.apache.openejb.threads.task.CUCallable.call(CUCallable.java:31)
> 
>         at org.apache.openejb.async.AsynchronousPool$AsynchronousCall.call(AsynchronousPool.java:113)
> 
>         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> 
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> 
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> 
>         at java.lang.Thread.run(Thread.java:748)
> 
>  
> 
> Best Regards
> 
>  
> 
> 
> Matthias Knappik
> Senior Developer
> 
> Faktor Zehn GmbH
> Friedenheimer Brücke 21
> 80639 München
> 
> Phone    +49 89 520311-683
> Fax        +49 89 520311-8683
> Mobile    +49 151 582 56644
> 
> Matthias.Knappik@faktorzehn.de
> http://www.ConVista.com
> 
> 
> 
> Faktor Zehn GmbH       Sitz der Gesellschaft: München  Registernummer: HRB 242535 Registergericht: Amtsgericht München
> Geschaeftsfuehrung: Dr. Florian Schwandt, Joerg Renger


Re: NoSuchElementException in InstanceImpl#iterator() after upgrading openejb-core to 8.0.0-M3

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hi Matthias,

I don't think it is a regression by itself since this is the behavior since
a long time but it is clearly a bug.
Will work on it very soon.

Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://rmannibucau.metawerx.net/> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
<https://www.packtpub.com/application-development/java-ee-8-high-performance>


Le mer. 11 sept. 2019 à 09:24, Matthias Knappik <
Matthias.Knappik@faktorzehn.de> a écrit :

> Hi,
>
> after upgrading the openejb-core dependency in one of our projects from
> 7.1.0 to 8.0.0-M3 in order to support java 11, one of our tests was failing
> due to an NoSuchElementException in
> org.apache.webbeans.inject.instance.InstanceImpl#iterator().
>
> Our last executed code is:
>
>     private Stream<PolicyPermissionService> permissionServices() {
>
>         return StreamSupport.stream(permissionServices.spliterator(),
> false);
>
>     }
>
>
>
> A little bit of research showed, that this method is being executed in
> parallel by an batch job, which explains the Exception:
> InstanceImpl#iterator() seems not to be threadsafe. As a consequence,
> removeFirst() gets executed, even if there is no Element in the List.
>
>
>
> A quick fix for us was to put the call into an synchronized block:
>
>     private synchronized Stream<PolicyPermissionService>
> permissionServices() {
>
>         return StreamSupport.stream(permissionServices.spliterator(),
> false);
>
>     }
>
>
>
> However, I think it should not be required to do so and it was working
> fine in 7.1.0.
>
>
>
> Stacktrace:
>
> java.util.NoSuchElementException
>
>         at java.util.LinkedList.removeFirst(LinkedList.java:270)
>
>         at java.util.LinkedList.pop(LinkedList.java:801)
>
>         at
> org.apache.webbeans.context.creational.CreationalContextImpl.removeInjectionPoint(CreationalContextImpl.java:142)
>
>         at
> org.apache.webbeans.inject.instance.InstanceImpl.iterator(InstanceImpl.java:256)
>
>         at java.lang.Iterable.spliterator(Iterable.java:101)
>
>         at
> de.faktorzehn.ipm.core.services.user.PolicyPermissionServiceProvider.permissionServices(PolicyPermissionServiceProvider.java:46)
>
>         at
> de.faktorzehn.ipm.core.services.user.PolicyPermissionServiceProvider.getPermissionService(PolicyPermissionServiceProvider.java:38)
>
>         at
> de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.hasReadPermission(JpaPolicyRepository.java:383)
>
>         at
> de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.lambda$readPermissionFor$0(JpaPolicyRepository.java:110)
>
>         at
> de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.internalGetPolicy(JpaPolicyRepository.java:121)
>
>         at
> de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository.getPolicy(JpaPolicyRepository.java:106)
>
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>
>         at java.lang.reflect.Method.invoke(Method.java:498)
>
>         at
> org.apache.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113)
>
>         at
> org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106)
>
>         at
> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:78)
>
>         at
> org.apache.openejb.cdi.transactional.InterceptorBase.intercept(InterceptorBase.java:67)
>
>         at
> org.apache.openejb.cdi.transactional.RequiredInterceptor.intercept(RequiredInterceptor.java:35)
>
>         at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
>
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>
>         at java.lang.reflect.Method.invoke(Method.java:498)
>
>         at
> org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136)
>
>         at
> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:65)
>
>         at
> org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139)
>
>         at
> de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository$$OwbInterceptProxy1.getPolicy(de/faktorzehn/ipm/core/services/persistence/JpaPolicyRepository.java)
>
>         at
> de.faktorzehn.ipm.core.services.persistence.JpaPolicyRepository$$OwbNormalScopeProxy1.getPolicy(de/faktorzehn/ipm/core/services/persistence/JpaPolicyRepository.java)
>
>         at
> de.faktorzehn.ipm.core.batch.services.EditPolicyService.getPolicy(EditPolicyService.java:214)
>
>         at
> de.faktorzehn.ipm.core.batch.services.EditPolicyService.lambda$editPolicy$2(EditPolicyService.java:89)
>
>         at
> de.faktorzehn.ipm.core.batch.services.FailCheckedEditing.withPolicy(FailCheckedEditing.java:236)
>
>         at
> de.faktorzehn.ipm.core.batch.services.EditPolicyService.editPolicy(EditPolicyService.java:89)
>
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>
>         at java.lang.reflect.Method.invoke(Method.java:498)
>
>         at
> org.apache.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113)
>
>         at
> org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106)
>
>         at
> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:78)
>
>         at
> org.apache.openejb.cdi.transactional.InterceptorBase.intercept(InterceptorBase.java:67)
>
>         at
> org.apache.openejb.cdi.transactional.RequiredInterceptor.intercept(RequiredInterceptor.java:35)
>
>         at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
>
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>
>         at java.lang.reflect.Method.invoke(Method.java:498)
>
>         at
> org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136)
>
>         at
> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:65)
>
>         at
> org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139)
>
>         at
> de.faktorzehn.ipm.sample.batch.hranpassung.HrAnpassungService$$OwbInterceptProxy1.editPolicy(de/faktorzehn/ipm/sample/batch/hranpassung/HrAnpassungService.java)
>
>         at
> de.faktorzehn.ipm.sample.batch.hranpassung.HrAnpassungService$$OwbNormalScopeProxy0.editPolicy(de/faktorzehn/ipm/sample/batch/hranpassung/HrAnpassungService.java)
>
>         at
> de.faktorzehn.ipm.core.batch.ParameterizedPolicyWriter.lambda$doWriteItems$0(ParameterizedPolicyWriter.java:59)
>
>         at
> java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
>
>         at
> java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
>
>         at
> java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
>
>         at
> java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
>
>         at
> java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
>
>         at
> java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
>
>         at
> java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
>
>         at
> de.faktorzehn.ipm.core.batch.ParameterizedPolicyWriter.doWriteItems(ParameterizedPolicyWriter.java:60)
>
>         at
> org.apache.batchee.extras.typed.TypedItemWriter.writeItems(TypedItemWriter.java:35)
>
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>
>         at java.lang.reflect.Method.invoke(Method.java:498)
>
>         at
> org.apache.batchee.container.proxy.BatchProxyInvocationHandler.invoke(BatchProxyInvocationHandler.java:55)
>
>         at com.sun.proxy.$Proxy204.writeItems(Unknown Source)
>
>         at
> org.apache.batchee.container.impl.controller.chunk.ChunkStepController.writeChunk(ChunkStepController.java:433)
>
>         at
> org.apache.batchee.container.impl.controller.chunk.ChunkStepController.invokeChunk(ChunkStepController.java:579)
>
>         at
> org.apache.batchee.container.impl.controller.chunk.ChunkStepController.invokeCoreStep(ChunkStepController.java:732)
>
>         at
> org.apache.batchee.container.impl.controller.BaseStepController.execute(BaseStepController.java:157)
>
>         at
> org.apache.batchee.container.impl.controller.ExecutionTransitioner.doExecutionLoop(ExecutionTransitioner.java:106)
>
>         at
> org.apache.batchee.container.impl.controller.JobThreadRootController.originateExecutionOnThread(JobThreadRootController.java:110)
>
>         at
> org.apache.batchee.container.util.BatchWorkUnit.run(BatchWorkUnit.java:62)
>
>         at
> org.apache.batchee.tools.services.thread.ThreadExecutorEjb.executeTask(ThreadExecutorEjb.java:51)
>
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>
>         at java.lang.reflect.Method.invoke(Method.java:498)
>
>         at
> org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:205)
>
>         at
> org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:186)
>
>         at
> org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:191)
>
>         at
> org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:102)
>
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>
>         at java.lang.reflect.Method.invoke(Method.java:498)
>
>         at
> org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:205)
>
>         at
> org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:186)
>
>         at
> org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85)
>
>         at
> org.apache.openejb.core.singleton.SingletonContainer._invoke(SingletonContainer.java:272)
>
>         at
> org.apache.openejb.core.singleton.SingletonContainer.invoke(SingletonContainer.java:221)
>
>         at
> org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:265)
>
>         at
> org.apache.openejb.core.ivm.EjbObjectProxyHandler$1.call(EjbObjectProxyHandler.java:252)
>
>         at org.apache.openejb.threads.task.CUTask.invoke(CUTask.java:100)
>
>         at
> org.apache.openejb.threads.task.CUCallable.call(CUCallable.java:31)
>
>         at
> org.apache.openejb.async.AsynchronousPool$AsynchronousCall.call(AsynchronousPool.java:113)
>
>         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>
>         at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>
>         at java.lang.Thread.run(Thread.java:748)
>
>
>
> Best Regards
>
>
>
>
> Matthias Knappik
> Senior Developer
>
> *Faktor Zehn GmbH*
> Friedenheimer Brücke 21
> 80639 München
>
> Phone    +49 89 520311-683
> Fax        +49 89 520311-8683
> Mobile    +49 151 582 56644
>
> Matthias.Knappik@faktorzehn.de
> http://www.ConVista.com
>
> ------------------------------
> Faktor Zehn GmbH       Sitz der Gesellschaft: München  Registernummer: HRB
> 242535 Registergericht: Amtsgericht München
> Geschaeftsfuehrung: Dr. Florian Schwandt, Joerg Renger
>