You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@isis.apache.org by "Andi Huber (JIRA)" <ji...@apache.org> on 2018/06/21 13:47:00 UTC

[jira] [Comment Edited] (ISIS-1964) ConcurrentModificationException when stating application

    [ https://issues.apache.org/jira/browse/ISIS-1964?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16519372#comment-16519372 ] 

Andi Huber edited comment on ISIS-1964 at 6/21/18 1:46 PM:
-----------------------------------------------------------

By looking at the stacktrace, I would say, that during the process of making a snapshot (copy) of the specification-cache (basically a java.util.HashMap) the map gets modified. This can only happen if 2 different threads are involved.

To guard against concurrent modification of the specification-cache, we either need to replace the HashMap with a ConcurrentHashMap or we synchronize reads and writes to the cache.

But on second thought, I do believe during Isis Application bootstrapping there is only a single thread involved. So the reason for seeing this exception could be related to an issue with the particular java runtime environment where somehow application bootstrapping does interfere with some 'left over' instances that case this kind of side effects!?

I myself do work a lot with Apache Isis, and never encountered this kind of error stack trace.










was (Author: hobrom):
By looking at the stacktrace, I would say, that during the process of making a snapshot (copy) of the specification-cache (basically a java.util.HashMap) the map gets modified. This can only happen if 2 different threads are involved.

To guard against concurrent modification of the specification-cache, we either need to replace the HashMap with a ConcurrentHashMap or we synchronize reads and writes to the cache.




> ConcurrentModificationException when stating application
> --------------------------------------------------------
>
>                 Key: ISIS-1964
>                 URL: https://issues.apache.org/jira/browse/ISIS-1964
>             Project: Isis
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 1.16.2
>            Reporter: Vladimir Nisevic
>            Priority: Major
>             Fix For: 1.16.3
>
>
> Hi Dan, meanwhile we are using 1.16.2 and observe still (more rarely) this exception during startup.
>  
> {code:java}
> 018-06-20 15:10:47.546 [localhost-startStop-1] init ERROR org.apache.isis.viewer.wicket.viewer.IsisWicketApplication - Failed to initialize
> com.google.inject.ProvisionException: Unable to provision, see the following errors:
> 1) Error in custom provider, java.lang.RuntimeException: An error occurred while executing code in a temporary session
> at org.apache.isis.core.runtime.runner.IsisInjectModule.provideIsisSessionFactory(IsisInjectModule.java:109)
> at org.apache.isis.core.runtime.runner.IsisInjectModule.provideIsisSessionFactory(IsisInjectModule.java:109)
> while locating org.apache.isis.core.runtime.system.session.IsisSessionFactory
> for field at org.apache.isis.viewer.wicket.viewer.IsisWicketApplication.isisSessionFactory(IsisWicketApplication.java:155)
> while locating at.a1ta.cll.webapp.CllWebApplication
> 1 error
> at com.google.inject.internal.Errors.throwProvisionExceptionIfErrorsExist(Errors.java:486)
> at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:67)
> at com.google.inject.internal.InjectorImpl.injectMembers(InjectorImpl.java:987)
> at org.apache.isis.viewer.wicket.viewer.IsisWicketApplication.init(IsisWicketApplication.java:368)
> at at.a1ta.cll.webapp.CllWebApplication.init(CllWebApplication.java:32)
> at org.apache.wicket.Application.initApplication(Application.java:953)
> at org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:429)
> at org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:353)
> at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:285)
> at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:266)
> at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
> at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4590)
> at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5233)
> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
> at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
> at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
> at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
> at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:629)
> at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1839)
> at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
> 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)
> Caused by: java.lang.RuntimeException: An error occurred while executing code in a temporary session
> at org.apache.isis.core.runtime.system.session.IsisSessionFactory.doInSession(IsisSessionFactory.java:366)
> at org.apache.isis.core.runtime.system.session.IsisSessionFactory.doInSession(IsisSessionFactory.java:330)
> at org.apache.isis.core.runtime.system.session.IsisSessionFactory.doInSession(IsisSessionFactory.java:317)
> at org.apache.isis.core.runtime.system.session.IsisSessionFactoryBuilder.buildSessionFactory(IsisSessionFactoryBuilder.java:211)
> at org.apache.isis.core.runtime.runner.IsisInjectModule.provideIsisSessionFactory(IsisInjectModule.java:118)
> at org.apache.isis.core.runtime.runner.IsisInjectModule$$FastClassByGuice$$a813f90e.invoke(<generated>)
> at com.google.inject.internal.ProviderMethod$FastClassProviderMethod.doProvision(ProviderMethod.java:264)
> at com.google.inject.internal.ProviderMethod$Factory.provision(ProviderMethod.java:401)
> at com.google.inject.internal.ProviderMethod$Factory.get(ProviderMethod.java:376)
> at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
> at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
> at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
> at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:194)
> at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
> at com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:54)
> at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132)
> at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:93)
> at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:80)
> at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1085)
> at com.google.inject.internal.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:80)
> at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:62)
> ... 22 more
> Caused by: java.util.ConcurrentModificationException
> at java.util.HashMap$HashIterator.nextNode(HashMap.java:1442)
> at java.util.HashMap$ValueIterator.next(HashMap.java:1471)
> at java.util.AbstractCollection.toArray(AbstractCollection.java:141)
> at java.util.Collections$UnmodifiableCollection.toArray(Collections.java:1033)
> at java.util.ArrayList.<init>(ArrayList.java:178)
> at com.google.common.collect.Lists.newArrayList(Lists.java:146)
> at org.apache.isis.core.metamodel.specloader.SpecificationLoader.allSpecifications(SpecificationLoader.java:495)
> at org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting.validateSpecs(MetaModelValidatorVisiting.java:71)
> at org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting.validateAll(MetaModelValidatorVisiting.java:58)
> at org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting.validate(MetaModelValidatorVisiting.java:49)
> at org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite.validate(MetaModelValidatorComposite.java:60)
> at org.apache.isis.core.metamodel.specloader.SpecificationLoader.validate(SpecificationLoader.java:272)
> at org.apache.isis.core.metamodel.specloader.SpecificationLoader.validateAndAssert(SpecificationLoader.java:262)
> at org.apache.isis.core.runtime.system.session.IsisSessionFactoryBuilder$1.run(IsisSessionFactoryBuilder.java:217)
> at org.apache.isis.core.runtime.system.session.IsisSessionFactory$1.call(IsisSessionFactory.java:333)
> at org.apache.isis.core.runtime.system.session.IsisSessionFactory$1.call(IsisSessionFactory.java:330)
> at org.apache.isis.core.runtime.system.session.IsisSessionFactory.doInSession(IsisSessionFactory.java:364)
> ... 42 more
> 2018-06-20 15:10:47.573 [localhost-startStop-1] join INFO org.apache.isis.core.runtime.threadpool.ThreadPoolSupport - join'ing 6 tasks: waited 0 milliseconds
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)