Uploaded image for project: 'Causeway'
  1. Causeway
  2. CAUSEWAY-2403

'Rebuild metamodel' seems to deadlock, at least in the demo app.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.0.0-M3
    • 2.0.0-M4
    • None
    • None

    Description

      This seems to be quite recently introduced (in the last week...).

      Clicking on 'rebuild metamodel' generates this in the log:

      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.
       

      and a thread dump shows these two threads:

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

      and 

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

      Attachments

        Activity

          People

            hobrom Andi Huber
            danhaywood Daniel Keir Haywood
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: