[ 
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)

Reply via email to