[ https://issues.apache.org/jira/browse/ISIS-2403?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andi Huber reassigned ISIS-2403: -------------------------------- Assignee: Andi Huber > 'Rebuild metamodel' seems to deadlock, at least in the demo app. > ---------------------------------------------------------------- > > Key: ISIS-2403 > URL: https://issues.apache.org/jira/browse/ISIS-2403 > Project: Isis > Issue Type: Bug > Affects Versions: 2.0.0-M3 > Reporter: Daniel Keir Haywood > Assignee: Andi Huber > Priority: Major > Fix For: 2.0.0-M4 > > > This seems to be quite recently introduced (in the last week...). > Clicking on 'rebuild metamodel' generates this in the log: > {code:java} > 2020-07-13 13:38:11.680 INFO 5636 --- [nio-8080-exec-4] > o.a.w.u.c.ClassCryptFactory : using encryption/decryption object > org.apache.wicket.util.crypt.SunJceCrypt@219be65c > ... > 2020-07-13 13:40:41.297 WARN 5636 --- [nio-8080-exec-8] > o.a.i.c.m.s.SpecificationLoaderDefault : Missed class > 'demoapp.dom.annotations.PropertyLayout.cssClass.PropertyLayoutCssClassVm' > when the metamodel was fully introspected. > 2020-07-13 13:40:41.297 ERROR 5636 --- [nio-8080-exec-8] > o.a.i.c.m.s.SpecificationLoaderDefault : Introspecting class > 'demoapp.dom.annotations.PropertyLayout.cssClass.PropertyLayoutCssClassVm' of > sort VIEW_MODEL, after the metamodel had been fully introspected and is now > locked. One reason this can happen is if you are attempting to invoke an > action through the WrapperFactory on a service class incorrectly annotated > with Spring's @Service annotation instead of @DomainService. > 2020-07-13 13:40:41.299 WARN 5636 --- [nio-8080-exec-8] > o.a.i.c.m.s.SpecificationLoaderDefault : Missed class 'java.lang.Object' > when the metamodel was fully introspected. > {code} > and a thread dump shows these two threads: > {code:java} > "http-nio-8080-exec-8@13871" daemon prio=5 tid=0x1bb nid=NA > waiting"http-nio-8080-exec-8@13871" daemon prio=5 tid=0x1bb nid=NA waiting > java.lang.Thread.State: WAITING blocks > ForkJoinPool.commonPool-worker-27@17638 at > java.lang.Object.wait(Object.java:-1) at > java.util.concurrent.ForkJoinTask.externalAwaitDone(ForkJoinTask.java:330) > at java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:412) at > java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:736) at > java.util.stream.ForEachOps$ForEachOp.evaluateParallel(ForEachOps.java:159) > at > java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(ForEachOps.java:173) > at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233) > at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497) > at > java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:661) > at > org.apache.isis.core.commons.internal.collections.snapshot._VersionedList$Snapshot.forEachParallel(_VersionedList.java:79) > at > org.apache.isis.core.commons.internal.collections.snapshot._VersionedList.forEachParallel(_VersionedList.java:176) > at > org.apache.isis.core.metamodel.specloader.SpecificationLoaderDefault.forEach(SpecificationLoaderDefault.java:417) > at > org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting.validateAll(MetaModelValidatorVisiting.java:96) > at > org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting.collectFailuresInto(MetaModelValidatorVisiting.java:87) > at > org.apache.isis.core.metamodel.specloader.SpecificationLoaderDefault.lambda$collectFailuresFromMetaModel$2(SpecificationLoaderDefault.java:299) > at > org.apache.isis.core.metamodel.specloader.SpecificationLoaderDefault$$Lambda$1676.1195616447.accept(Unknown > Source:-1) at > java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) at > java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) > at > java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1654) > at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) > at > java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) > at > java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) > at > java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) > at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) > at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497) > at > org.apache.isis.core.metamodel.specloader.SpecificationLoaderDefault.collectFailuresFromMetaModel(SpecificationLoaderDefault.java:296) > at > org.apache.isis.core.metamodel.specloader.SpecificationLoaderDefault$$Lambda$670.1483799557.get(Unknown > Source:-1) at > org.apache.isis.core.commons.internal.base._Lazy_ThreadSafe.get(_Lazy_ThreadSafe.java:64) > - locked <0x5c56> (a > org.apache.isis.core.commons.internal.base._Lazy_ThreadSafe) at > org.apache.isis.core.metamodel.specloader.SpecificationLoaderDefault.getValidationResult(SpecificationLoaderDefault.java:286) > at > org.apache.isis.core.metamodel.specloader.SpecificationLoaderDefault.revalidateIfNecessary(SpecificationLoaderDefault.java:397) > at > org.apache.isis.core.metamodel.specloader.specimpl.ObjectSpecificationAbstract.introspectUpTo(ObjectSpecificationAbstract.java:321) > at > org.apache.isis.core.metamodel.specloader.SpecificationLoaderDefault.loadSpecification(SpecificationLoaderDefault.java:382) > at > org.apache.isis.core.metamodel.specloader.SpecificationLoaderDefault.reloadSpecification(SpecificationLoaderDefault.java:340) > at > org.apache.isis.core.metamodel.services.metamodel.MetaModelServiceDefault.rebuild(MetaModelServiceDefault.java:101) > at > org.apache.isis.applib.mixins.layout.Object_rebuildMetamodel.act(Object_rebuildMetamodel.java:58) > at > jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1) > at > jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:566) at > org.apache.isis.core.metamodel.commons.CanonicalParameterUtil.invoke(CanonicalParameterUtil.java:72) > at > org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventAbstract.invokeMethodElseFromCache(ActionInvocationFacetForDomainEventAbstract.java:277) > at > org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventAbstract.access$400(ActionInvocationFacetForDomainEventAbstract.java:75) > at > org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventAbstract$DomainEventMemberExecutor.execute(ActionInvocationFacetForDomainEventAbstract.java:455) > at > org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventAbstract$DomainEventMemberExecutor.execute(ActionInvocationFacetForDomainEventAbstract.java:408) > at > org.apache.isis.applib.services.iactn.Interaction.executeInternal(Interaction.java:204) > at > org.apache.isis.applib.services.iactn.Interaction.execute(Interaction.java:171) > at > org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventAbstract.doInvoke(ActionInvocationFacetForDomainEventAbstract.java:207) > at > org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventAbstract.lambda$invoke$0(ActionInvocationFacetForDomainEventAbstract.java:128) > at > org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventAbstract$$Lambda$2310.207403167.get(Unknown > Source:-1) at > org.apache.isis.core.runtimeservices.xactn.TransactionServiceSpring.executeWithinTransaction(TransactionServiceSpring.java:163) > at > org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventAbstract.invoke(ActionInvocationFacetForDomainEventAbstract.java:127) > at > org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionDefault.executeInternal(ObjectActionDefault.java:451) > at > org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionMixedIn.execute(ObjectActionMixedIn.java:167) > at > org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionDefault.executeWithRuleChecking(ObjectActionDefault.java:418) > at > org.apache.isis.viewer.wicket.model.models.ActionModel.executeAction(ActionModel.java:198) > at > org.apache.isis.viewer.wicket.model.models.ActionModel.load(ActionModel.java:177) > at > org.apache.isis.viewer.wicket.model.models.ActionModel.load(ActionModel.java:67) > at > org.apache.wicket.model.LoadableDetachableModel.getObject(LoadableDetachableModel.java:128) > at > org.apache.isis.viewer.wicket.model.models.ActionModel.execute(ActionModel.java:262) > at > org.apache.isis.viewer.wicket.ui.components.actions.ActionFormExecutorStrategy.obtainResultAdapter(ActionFormExecutorStrategy.java:73) > at > org.apache.isis.viewer.wicket.ui.panels.FormExecutorDefault.obtainResultAdapter(FormExecutorDefault.java:518) > at > org.apache.isis.viewer.wicket.ui.panels.FormExecutorDefault.executeAndProcessResults(FormExecutorDefault.java:147) > at > org.apache.isis.viewer.wicket.ui.components.widgets.linkandlabel.LinkAndLabelFactoryAbstract.onClick(LinkAndLabelFactoryAbstract.java:237) > at > org.apache.isis.viewer.wicket.ui.components.widgets.linkandlabel.LinkAndLabelFactoryAbstract.access$000(LinkAndLabelFactoryAbstract.java:70) > at > org.apache.isis.viewer.wicket.ui.components.widgets.linkandlabel.LinkAndLabelFactoryAbstract$1.performOnClick(LinkAndLabelFactoryAbstract.java:140) > at > org.apache.isis.viewer.wicket.ui.components.widgets.linkandlabel.LinkAndLabelFactoryAbstract$1.doOnClick(LinkAndLabelFactoryAbstract.java:135) > at > org.apache.isis.viewer.wicket.ui.components.widgets.linkandlabel.ActionLink.onClick(ActionLink.java:104) > at org.apache.wicket.ajax.markup.html.AjaxLink$1.onEvent(AjaxLink.java:85) > at > org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:127) > at > org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefaultAjaxBehavior.java:598) > at > org.apache.wicket.core.request.handler.ListenerRequestHandler.internalInvoke(ListenerRequestHandler.java:306) > at > org.apache.wicket.core.request.handler.ListenerRequestHandler.invoke(ListenerRequestHandler.java:280) > at > org.apache.wicket.core.request.handler.ListenerRequestHandler.invokeListener(ListenerRequestHandler.java:222) > at > org.apache.wicket.core.request.handler.ListenerRequestHandler.respond(ListenerRequestHandler.java:208) > at > org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:914) > at > org.apache.wicket.request.RequestHandlerExecutor.execute(RequestHandlerExecutor.java:65) > at > org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:282) > at > org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:253) > at > org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:221) > at > org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:275) > at > org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:206) > at > org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:299) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) > at > org.apache.isis.core.webapp.modules.logonlog.IsisLogOnExceptionFilter.doFilter(IsisLogOnExceptionFilter.java:60) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) > at > org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) > at > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) > at > org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) > at > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) > at > org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) > at > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) > at > org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) > at > org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) > at > org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) > at > org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) > at > org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387) > at > org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) > at > org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) > at > org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) > at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) > at > org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) > at > org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) > at > org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) > at > org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) > - locked <0x5c57> (a > org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper) at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) > at > org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) > at java.lang.Thread.run(Thread.java:834) {code} > and > {code:java} > "ForkJoinPool.commonPool-worker-27@17638" daemon prio=5 tid=0x1cb nid=NA > waiting for monitor entry"ForkJoinPool.commonPool-worker-27@17638" daemon > prio=5 tid=0x1cb nid=NA waiting for monitor entry java.lang.Thread.State: > BLOCKED waiting for http-nio-8080-exec-8@13871 to release lock on <0x5c56> > (a org.apache.isis.core.commons.internal.base._Lazy_ThreadSafe) at > org.apache.isis.core.commons.internal.base._Lazy_ThreadSafe.isMemoized(_Lazy_ThreadSafe.java:45) > at > org.apache.isis.core.metamodel.specloader.SpecificationLoaderDefault.revalidateIfNecessary(SpecificationLoaderDefault.java:395) > at > org.apache.isis.core.metamodel.specloader.specimpl.ObjectSpecificationAbstract.introspectUpTo(ObjectSpecificationAbstract.java:321) > at > org.apache.isis.core.metamodel.specloader.specimpl.ObjectSpecificationAbstract.streamObjectActions(ObjectSpecificationAbstract.java:738) > at > org.apache.isis.core.metamodel.spec.feature.ObjectActionContainer.lambda$streamObjectActions$2(ObjectActionContainer.java:89) > at > org.apache.isis.core.metamodel.spec.feature.ObjectActionContainer$$Lambda$1388.92566262.apply(Unknown > Source:-1) at > java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:271) > at java.util.Iterator.forEachRemaining(Iterator.java:133) at > java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) > at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) > at > java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) > at > java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) > at java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:257) at > java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248) at > java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at > java.util.stream.ReferencePipeline.count(ReferencePipeline.java:605) at > org.apache.isis.core.metamodel.progmodels.dflt.ProgrammingModelFacetsJava8.lambda$new$0(ProgrammingModelFacetsJava8.java:374) > at > org.apache.isis.core.metamodel.progmodels.dflt.ProgrammingModelFacetsJava8$$Lambda$656.1587485260.visit(Unknown > Source:-1) at > org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting.lambda$validateAll$1(MetaModelValidatorVisiting.java:107) > at > org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting$$Lambda$1689.1794699629.accept(Unknown > Source:-1) at > java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) at > java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1654) > at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) > at java.util.stream.ForEachOps$ForEachTask.compute(ForEachOps.java:290) at > java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:746) at > java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) at > java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) > at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) at > java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) at > java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177){code} -- This message was sent by Atlassian Jira (v8.3.4#803005)