Hi Dhruv, ... but you could try a nightly build and see how you get on?
Also, you might want to join the slack channel, see https://isis.apache.org/docs/2.0.0-M7/support/slack-channel.html If you prefer to stay using the email mailing list, probably better to use the [email protected] list rather than this one, [email protected], as dev is for committers/contributors rather than users. Thanks Dan On Mon, 23 May 2022 at 09:47, Andi Huber <[email protected]> wrote: > Hello Dhruv, > I believe we fixed that one already in > https://issues.apache.org/jira/browse/ISIS-2978 > but its not really confirmed. > > Cheers Andi. > > On 2022/05/23 08:30:30 Dhruv wrote: > > Hi, > > > > Been long term using apache-isis 1.x for client delivered prototypes > > successfully. Recently just in 5 weeks we delivered moderately complex > > app on Azure in production using 2.0.0-M7 (We knew its not release > > version, but we have been betting on our team's previous know-how and > > solid isis code-base on fixing any blockers we might get in our way, can > > share more details if anyone wants on user list for building > > confidence.) Thank you all here for having such a solid piece of > > opensource available for enterprise applications. > > > > Talking about blockers we found, the most notorious one, which we > > are not sure how to help solve within apache-isis is this one. > > > > "In Java SE 9, threads that are part of the fork/join common pool > > will always return the system class loader as their thread context class > > loader. In previous releases, the thread context class loader may have > > been inherited from whatever thread causes the creation of the fork/join > > common pool thread, e.g. by submitting a task. An application cannot > > reliably depend on when, or how, threads are created by the fork/join > > common pool, and as such cannot reliably depend on a custom defined > > class loader to be set as the thread context class loader." > > > > So in summary, the spring-boot class-loader is not available to any > > of the work being done in fork-join pool (e.g. submitted for async > > executions or parallel streams ) and that raises some odd > > "ClassNotFoundExceptions". > > > > The easiest way to reproduce is : > > > > ~/github/isis-app-simpleapp$ mvn clean install > > > > ~/github/isis-app-simpleapp$ java -jar > > webapp/target/simpleapp-jpa-webapp-2.0.0-M7-exec.jar > > > > > > It would fail with following Jaxb related classes not found error, > > which are in-fact available in spring-boot classloader but the > > ForkJoinPool.commonPool-worker uses system-class loader where these > > would not exists > > > > > ERROR 13763 --- [onPool-worker-3] > > > o.a.i.c.r.m.MenuBarsLoaderServiceDefault : > > > org.apache.isis.core.config.viewer.web.WebAppContextPath: could not > > > find readable resource class path resource [menubars.layout.xml] for > > > the Menubars-Layout. > > > > > > java.lang.RuntimeException: unrecoverable error: 'Error unmarshalling > > > XML; object class is > > > 'org.apache.isis.applib.layout.menubars.bootstrap3.BS3MenuBars'' with > > > cause ... > > > at > > > > org.apache.isis.commons.internal.exceptions._Exceptions.unrecoverable(_Exceptions.java:144) > > > > ~[isis-commons-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.commons.internal.resources._Xml.verboseException(_Xml.java:201) > > > > ~[isis-commons-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.applib.services.jaxb.JaxbService$Simple.fromXml(JaxbService.java:160) > > > > ~[isis-applib-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.applib.services.jaxb.JaxbService.fromXml(JaxbService.java:83) > > > > ~[isis-applib-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.core.runtimeservices.menubars.MenuBarsLoaderServiceDefault.loadMenuBars(MenuBarsLoaderServiceDefault.java:101) > > > > ~[isis-core-runtimeservices-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.core.runtimeservices.menubars.MenuBarsLoaderServiceDefault.menuBars(MenuBarsLoaderServiceDefault.java:95) > > > > ~[isis-core-runtimeservices-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.core.runtimeservices.menubars.bootstrap3.MenuBarsServiceBS3.loadOrElse(MenuBarsServiceBS3.java:138) > > > > ~[isis-core-runtimeservices-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.core.runtimeservices.menubars.bootstrap3.MenuBarsServiceBS3.menuBarsDefault(MenuBarsServiceBS3.java:130) > > > > ~[isis-core-runtimeservices-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.core.runtimeservices.menubars.bootstrap3.MenuBarsServiceBS3.menuBars(MenuBarsServiceBS3.java:119) > > > > ~[isis-core-runtimeservices-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.core.runtimeservices.menubars.bootstrap3.MenuBarsServiceBS3.menuBars(MenuBarsServiceBS3.java:82) > > > > ~[isis-core-runtimeservices-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.applib.services.menu.MenuBarsService.menuBars(MenuBarsService.java:61) > > > > ~[isis-applib-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.core.metamodel.specloader.SpecificationLoaderDefault.createMetaModel(SpecificationLoaderDefault.java:301) > > > > ~[isis-core-metamodel-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.commons.internal.concurrent._ConcurrentTask$3.innerCall(_ConcurrentTask.java:150) > > > > [isis-commons-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.commons.internal.concurrent._ConcurrentTask$3.innerCall(_ConcurrentTask.java:146) > > > > [isis-commons-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.commons.internal.concurrent._ConcurrentTask$1.innerCall(_ConcurrentTask.java:109) > > > > [isis-commons-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.commons.internal.concurrent._ConcurrentTask.run(_ConcurrentTask.java:86) > > > > [isis-commons-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1407) > > > > [?:?] > > > 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:183) > > > > [?:?]* > > > Caused by: java.lang.RuntimeException: unrecoverable error: 'Error > > > obtaining JAXBContext for class; object class is > > > 'org.apache.isis.applib.layout.menubars.bootstrap3.BS3MenuBars'' with > > > cause ... > > > at > > > > org.apache.isis.commons.internal.exceptions._Exceptions.unrecoverable(_Exceptions.java:144) > > > > ~[isis-commons-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.commons.internal.resources._Xml.verboseException(_Xml.java:201) > > > > ~[isis-commons-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.commons.internal.resources._Xml.contextOf(_Xml.java:226) > > > ~[isis-commons-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705) > > > > ~[?:?] > > > at > > > > org.apache.isis.commons.internal.resources._Xml.jaxbContextFor(_Xml.java:217) > > > > ~[isis-commons-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.applib.services.jaxb.JaxbService$Simple.jaxbContextForClass(JaxbService.java:206) > > > > ~[isis-applib-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.applib.services.jaxb.JaxbService$Simple.fromXml(JaxbService.java:157) > > > > ~[isis-applib-2.0.0-M7.jar!/:2.0.0-M7] > > > ... 19 more > > > Caused by: javax.xml.bind.JAXBException: Implementation of JAXB-API > > > has not been found on module path or classpath. > > > at > > > javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:232) > > > ~[jakarta.xml.bind-api-2.3.3.jar!/:2.3.3] > > > at javax.xml.bind.ContextFinder.find(ContextFinder.java:375) > > > ~[jakarta.xml.bind-api-2.3.3.jar!/:2.3.3] > > > at > > > javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:691) > > > ~[jakarta.xml.bind-api-2.3.3.jar!/:2.3.3] > > > at > > > javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:632) > > > ~[jakarta.xml.bind-api-2.3.3.jar!/:2.3.3] > > > at > > > > org.apache.isis.commons.internal.resources._Xml.contextOf(_Xml.java:224) > > > ~[isis-commons-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705) > > > > ~[?:?] > > > at > > > > org.apache.isis.commons.internal.resources._Xml.jaxbContextFor(_Xml.java:217) > > > > ~[isis-commons-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.applib.services.jaxb.JaxbService$Simple.jaxbContextForClass(JaxbService.java:206) > > > > ~[isis-applib-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.applib.services.jaxb.JaxbService$Simple.fromXml(JaxbService.java:157) > > > > ~[isis-applib-2.0.0-M7.jar!/:2.0.0-M7] > > > ... 19 more > > > Caused by: java.lang.ClassNotFoundException: > > > com.sun.xml.bind.v2.ContextFactory > > > at > > > > jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) > > > > ~[?:?] > > > at > > > > jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) > > > > ~[?:?] > > > at java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[?:?] > > > at > > > > javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:92) > > > > ~[jakarta.xml.bind-api-2.3.3.jar!/:2.3.3] > > > at > > > > javax.xml.bind.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:125) > > > ~[jakarta.xml.bind-api-2.3.3.jar!/:2.3.3] > > > at > > > javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:230) > > > ~[jakarta.xml.bind-api-2.3.3.jar!/:2.3.3] > > > at javax.xml.bind.ContextFinder.find(ContextFinder.java:375) > > > ~[jakarta.xml.bind-api-2.3.3.jar!/:2.3.3] > > > at > > > javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:691) > > > ~[jakarta.xml.bind-api-2.3.3.jar!/:2.3.3] > > > at > > > javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:632) > > > ~[jakarta.xml.bind-api-2.3.3.jar!/:2.3.3] > > > at > > > > org.apache.isis.commons.internal.resources._Xml.contextOf(_Xml.java:224) > > > ~[isis-commons-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705) > > > > ~[?:?] > > > at > > > > org.apache.isis.commons.internal.resources._Xml.jaxbContextFor(_Xml.java:217) > > > > ~[isis-commons-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.applib.services.jaxb.JaxbService$Simple.jaxbContextForClass(JaxbService.java:206) > > > > ~[isis-applib-2.0.0-M7.jar!/:2.0.0-M7] > > > at > > > > org.apache.isis.applib.services.jaxb.JaxbService$Simple.fromXml(JaxbService.java:157) > > > > ~[isis-applib-2.0.0-M7.jar!/:2.0.0-M7] > > > ... 19 more > > > > P.S. To note, the spring-boot:run and integration test launchers > > use exploded-jar deployment thus these errors won't come in an > > IDE/build/test, but only when using jar based deployment > environment/docker. > > > > It seems the proper fix is that async executions should be using > > custom pool/executor. It would be better if someone from core team can > > confirm about the solution, we would be happy to help patch. > > > > Related details : > > > > https://stackoverflow.com/a/49426561 > > > > https://stackoverflow.com/a/59444016 > > > > https://stackoverflow.com/a/64455537 (we did custom rebuild of exe jar > > to solve this) > > > > Thanks, > > > > Dhruv > > > > >
