Really nice for cases where they are used for "state initialization" purposes (the majority of use cases).
El 11/06/2013, a las 14:56, Jeroen van der Wal <[email protected]> escribió: > For what it's worth, we actually use a pattern like this: > > public enum Category { > Professional(1), Domestic(2), Other(3); > > private Integer index; > > private Category(Integer index) { > this.index = index; > } > > public Integer myIndex() { > return index; > } > } > > > > > On Tue, Jun 11, 2013 at 12:21 PM, GESCONSULTOR - Óscar Bou < > [email protected]> wrote: > >> Jira still not responding (at least from here) ... I'll try again in a few >> minutes. >> >> >> El 11/06/2013, a las 12:18, Dan Haywood <[email protected]> >> escribió: >> >>> More detail to add to that ticket, then, when you raise it. >>> >>> Ta >>> Dan >>> >>> >>> On 11 June 2013 11:16, GESCONSULTOR - Óscar Bou <[email protected] >>> wrote: >>> >>>> Upps!!! >>>> >>>> >>>> With this code: >>>> >>>> public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { >> // >>>> GMAP3: uncomment to use https://github.com/danhaywood/isis-wicket-gmap3 >>>> >>>> private static final long ONE_WEEK_IN_MILLIS = 7 * 24 * 60 * 60 * >>>> 1000L; >>>> >>>> @ObjectType("TODOCATEGORY") >>>> public static enum Category { >>>> Professional { >>>> @Override >>>> public Integer myIndex() { >>>> return 1; >>>> } >>>> }, Domestic { >>>> @Override >>>> public Integer myIndex() { >>>> return 2; >>>> } >>>> }, Other { >>>> @Override >>>> public Integer myIndex() { >>>> return 3; >>>> } >>>> }; >>>> >>>> @Programmatic >>>> public abstract Integer myIndex(); >>>> } >>>> >>>> >>>> Same exception is thrown. >>>> >>>> 12:11:49,412 [Native main DEBUG] SELECT >>>> 'dom.todo.ToDoItem' AS >>>> >> NUCLEUS_TYPE,A0.CATEGORY,A0.COMPLETE,A0.COST,A0.DESCRIPTION,A0.DUEBY,A0.NOTES,A0.OWNEDBY,A0.TODOITEM_ID,A0.VERSION >>>> FROM TODOITEM A0 >>>> 12:11:49,412 [Native main DEBUG] SELECT >>>> 'dom.todo.ToDoItem' AS >>>> >> NUCLEUS_TYPE,A0.CATEGORY,A0.COMPLETE,A0.COST,A0.DESCRIPTION,A0.DUEBY,A0.NOTES,A0.OWNEDBY,A0.TODOITEM_ID,A0.VERSION >>>> FROM TODOITEM A0 >>>> 12:11:49,412 [FacetedMethodsBuilder main INFO ] introspecting >>>> dom.todo.ToDoItem$Category$1 >>>> 12:11:49,412 [FixturesInstallerDelegate main ERROR] installing >>>> fixture fixture.todo.ToDoItemsFixture failed; aborting >>>> java.lang.IllegalArgumentException: illegal argument, expected: is a non >>>> empty string >>>> at >>>> org.apache.isis.core.commons.ensure.Ensure.ensureThatArg(Ensure.java:57) >>>> at >>>> >> org.apache.isis.core.metamodel.spec.ObjectSpecId.<init>(ObjectSpecId.java:47) >>>> at >>>> >> org.apache.isis.core.metamodel.spec.ObjectSpecId.of(ObjectSpecId.java:43) >>>> at >>>> >> org.apache.isis.core.progmodel.facets.object.objecttype.ObjectSpecIdFacetAbstract.<init>(ObjectSpecIdFacetAbstract.java:40) >>>> at >>>> >> org.apache.isis.core.progmodel.facets.object.objecttype.ObjectSpecIdFacetDerivedFromClassName.<init>(ObjectSpecIdFacetDerivedFromClassName.java:27) >>>> at >>>> >> org.apache.isis.core.progmodel.facets.object.objecttype.ObjectTypeDerivedFromClassNameFacetFactory.process(ObjectTypeDerivedFromClassNameFacetFactory.java:47) >>>> at >>>> >> org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor.process(FacetProcessor.java:283) >>>> at >>>> >> org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.introspectClass(FacetedMethodsBuilder.java:178) >>>> at >>>> >> org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault.introspectTypeHierarchyAndMembers(ObjectSpecificationDefault.java:128) >>>> at >>>> >> org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.introspectIfRequired(ObjectReflectorDefault.java:572) >>>> at >>>> >> org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.loadSpecificationForSubstitutedClass(ObjectReflectorDefault.java:475) >>>> at >>>> >> org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.internalLoadSpecification(ObjectReflectorDefault.java:453) >>>> at >>>> >> org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.loadSpecification(ObjectReflectorDefault.java:448) >>>> at >>>> >> org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault.existingOrValueAdapter(AdapterManagerDefault.java:186) >>>> at >>>> >> org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault.adapterFor(AdapterManagerDefault.java:160) >>>> at >>>> >> org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession$2.adapterFor(RuntimeContextFromSession.java:110) >>>> at >>>> >> org.apache.isis.core.progmodel.facets.properties.defaults.fromtype.PropertyDefaultFacetDerivedFromDefaultedFacet.getDefault(PropertyDefaultFacetDerivedFromDefaultedFacet.java:49) >>>> at >>>> >> org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationImpl.getDefault(OneToOneAssociationImpl.java:210) >>>> at >>>> >> org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationImpl.toDefault(OneToOneAssociationImpl.java:221) >>>> at >>>> >> org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault.initialize(ObjectSpecificationDefault.java:456) >>>> at >>>> >> org.apache.isis.core.runtime.system.persistence.PersistenceSession.createTransientInstance(PersistenceSession.java:316) >>>> at >>>> >> org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession$7.createTransientInstance(RuntimeContextFromSession.java:185) >>>> at >>>> >> org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault.doCreateTransientInstance(DomainObjectContainerDefault.java:148) >>>> at >>>> >> org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault.newTransientInstance(DomainObjectContainerDefault.java:100) >>>> at >>>> >> org.apache.isis.applib.AbstractContainedObject.newTransientInstance(AbstractContainedObject.java:41) >>>> at dom.todo.ToDoItems.newToDo(ToDoItems.java:150) >>>> at >>>> >> fixture.todo.ToDoItemsFixture.createToDoItemForUser(ToDoItemsFixture.java:76) >>>> at >>>> fixture.todo.ToDoItemsFixture.installFor(ToDoItemsFixture.java:50) >>>> at >> fixture.todo.ToDoItemsFixture.install(ToDoItemsFixture.java:41) >>>> at >>>> >> org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixture(FixturesInstallerDelegate.java:213) >>>> at >>>> >> org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtureInTransaction(FixturesInstallerDelegate.java:175) >>>> at >>>> >> org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtures(FixturesInstallerDelegate.java:162) >>>> at >>>> >> org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtures(FixturesInstallerDelegate.java:142) >>>> at >>>> >> org.apache.isis.core.integtestsupport.IsisSystemForTest.wireAndInstallFixtures(IsisSystemForTest.java:292) >>>> at >>>> >> org.apache.isis.core.integtestsupport.IsisSystemForTest.setUpSystem(IsisSystemForTest.java:283) >>>> at >>>> >> org.apache.isis.core.integtestsupport.IsisSystemForTest.setUpSystem(IsisSystemForTest.java:256) >>>> at >>>> >> integtests.AbstractIntegTest$IsisSystemForTestRule$1.initialValue(AbstractIntegTest.java:131) >>>> at >>>> >> integtests.AbstractIntegTest$IsisSystemForTestRule$1.initialValue(AbstractIntegTest.java:128) >>>> at java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:141) >>>> at java.lang.ThreadLocal.get(ThreadLocal.java:131) >>>> at >>>> >> integtests.AbstractIntegTest$IsisSystemForTestRule.getIsisSystemForTest(AbstractIntegTest.java:137) >>>> at >>>> >> integtests.AbstractIntegTest$IsisSystemForTestRule.apply(AbstractIntegTest.java:142) >>>> at >>>> >> org.junit.runners.BlockJUnit4ClassRunner.withMethodRules(BlockJUnit4ClassRunner.java:349) >>>> at >>>> >> org.junit.runners.BlockJUnit4ClassRunner.withRules(BlockJUnit4ClassRunner.java:339) >>>> at >>>> >> org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:256) >>>> at >>>> >> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) >>>> at >>>> >> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) >>>> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) >>>> at >> org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) >>>> at >>>> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) >>>> at >> org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) >>>> at >> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) >>>> at >>>> >> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) >>>> at org.junit.runners.ParentRunner.run(ParentRunner.java:309) >>>> at >>>> >> org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59) >>>> at >>>> >> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:115) >>>> at >>>> >> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:102) >>>> at org.apache.maven.surefire.Surefire.run(Surefire.java:180) >>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>> at >>>> >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) >>>> at >>>> >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) >>>> at java.lang.reflect.Method.invoke(Method.java:597) >>>> at >>>> >> org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350) >>>> at >>>> >> org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021) >>>> 12:11:49,413 [IsisTransaction main INFO ] abort transaction >>>> IsisTransaction@49dd63c9[state=IN_PROGRESS,commands=0] >>>> [INFO] >>>> ------------------------------------------------------------------------ >>>> [INFO] Reactor Summary: >>>> >>>> >>>> >>>> 2. But This works ok: >>>> >>>> >>>> public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { >> // >>>> GMAP3: uncomment to use https://github.com/danhaywood/isis-wicket-gmap3 >>>> >>>> private static final long ONE_WEEK_IN_MILLIS = 7 * 24 * 60 * 60 * >>>> 1000L; >>>> >>>> @ObjectType("TODOCATEGORY") >>>> public static enum Category { >>>> Professional , Domestic, Other; >>>> >>>> @Programmatic >>>> public Integer myIndex() { >>>> return 1; >>>> }; >>>> } >>>> >>>> 3. And this works ok also: >>>> >>>> public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { >> // >>>> GMAP3: uncomment to use https://github.com/danhaywood/isis-wicket-gmap3 >>>> >>>> private static final long ONE_WEEK_IN_MILLIS = 7 * 24 * 60 * 60 * >>>> 1000L; >>>> >>>> public static enum Category { >>>> Professional , Domestic, Other; >>>> >>>> @Programmatic >>>> public Integer myIndex() { >>>> return 1; >>>> }; >>>> } >>>> >>>> >>>> >>>> The first one is our preferred (and current) implementation. >>>> >>>> >>>> El 11/06/2013, a las 12:01, GESCONSULTOR - Óscar Bou < >>>> [email protected]> escribió: >>>> >>>>> Thanks for the workaround. The second is really fast and doesn't break >>>> any code :-)) >>>>> >>>>> It seems the JIRA site is currently down. I will try again in 30 min. >>>>> >>>>> >>>>> >>>>> >>>>> El 11/06/2013, a las 11:56, Dan Haywood <[email protected]> >>>> escribió: >>>>> >>>>>> Hmm, I use that technique a lot myself. Definitely needs fixing. >>>> Please >>>>>> raise a ticket. >>>>>> >>>>>> ~~~ >>>>>> In the meantime, a workaround that should work (we have the equivalent >>>> in >>>>>> Estatio) is: >>>>>> >>>>>> public static enum Category { >>>>>> Professional, Domestic, Other; >>>>>> >>>>>> @Programmatic >>>>>> public Integer myIndex() { >>>>>> if(this == Professional) { return 1; } >>>>>> if(this == Domestic) { return 2; } >>>>>> if(this == Other) { return 3; } >>>>>> } >>>>>> } >>>>>> >>>>>> Another workaround that *might* work is to annotate with @ObjectType: >>>>>> >>>>>> @ObjectType("TODOCATEGORY") >>>>>> public static enum Category { >>>>>> /// your implementation... >>>>>> >>>>>> @Programmatic >>>>>> public abstract Integer myIndex(); >>>>>> } >>>>>> >>>>>> >>>>>> Thx >>>>>> Dan >>>>>> >>>>>> >>>>>> >>>>>> On 11 June 2013 10:48, GESCONSULTOR - Óscar Bou < >> [email protected] >>>>> wrote: >>>>>> >>>>>>> >>>>>>> >>>>>>> We make extensive use of abstract methods defined on Enums, returing >>>>>>> valuable information regarding them. It seems this is not fully >>>> supported >>>>>>> on Isis. >>>>>>> >>>>>>> Steps to reproduce on the Archetype: >>>>>>> >>>>>>> >>>>>>> 1. Modify the "Category" enum, replacing its definition by this: >>>>>>> >>>>>>> >>>>>>> public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ >>>> { // >>>>>>> GMAP3: uncomment to use >>>> https://github.com/danhaywood/isis-wicket-gmap3 >>>>>>> >>>>>>> private static final long ONE_WEEK_IN_MILLIS = 7 * 24 * 60 * 60 >> * >>>>>>> 1000L; >>>>>>> >>>>>>> public static enum Category { >>>>>>> Professional { >>>>>>> @Override >>>>>>> public Integer myIndex() { >>>>>>> return 1; >>>>>>> } >>>>>>> }, Domestic { >>>>>>> @Override >>>>>>> public Integer myIndex() { >>>>>>> return 2; >>>>>>> } >>>>>>> }, Other { >>>>>>> @Override >>>>>>> public Integer myIndex() { >>>>>>> return 3; >>>>>>> } >>>>>>> }; >>>>>>> >>>>>>> public abstract Integer myIndex(); >>>>>>> } >>>>>>> >>>>>>> >>>>>>> 2. Try to run the project and the following Exception is thrown >> (while >>>>>>> running the tests and installing the Fixture): >>>>>>> >>>>>>> 11:45:24,380 [Native main DEBUG] SELECT >>>>>>> 'dom.todo.ToDoItem' AS >>>>>>> >>>> >> NUCLEUS_TYPE,A0.CATEGORY,A0.COMPLETE,A0.COST,A0.DESCRIPTION,A0.DUEBY,A0.NOTES,A0.OWNEDBY,A0.TODOITEM_ID,A0.VERSION >>>>>>> FROM TODOITEM A0 >>>>>>> 11:45:24,381 [Native main DEBUG] SELECT >>>>>>> 'dom.todo.ToDoItem' AS >>>>>>> >>>> >> NUCLEUS_TYPE,A0.CATEGORY,A0.COMPLETE,A0.COST,A0.DESCRIPTION,A0.DUEBY,A0.NOTES,A0.OWNEDBY,A0.TODOITEM_ID,A0.VERSION >>>>>>> FROM TODOITEM A0 >>>>>>> 11:45:24,381 [Native main DEBUG] SELECT >>>>>>> 'dom.todo.ToDoItem' AS >>>>>>> >>>> >> NUCLEUS_TYPE,A0.CATEGORY,A0.COMPLETE,A0.COST,A0.DESCRIPTION,A0.DUEBY,A0.NOTES,A0.OWNEDBY,A0.TODOITEM_ID,A0.VERSION >>>>>>> FROM TODOITEM A0 >>>>>>> 11:45:24,381 [Native main DEBUG] SELECT >>>>>>> 'dom.todo.ToDoItem' AS >>>>>>> >>>> >> NUCLEUS_TYPE,A0.CATEGORY,A0.COMPLETE,A0.COST,A0.DESCRIPTION,A0.DUEBY,A0.NOTES,A0.OWNEDBY,A0.TODOITEM_ID,A0.VERSION >>>>>>> FROM TODOITEM A0 >>>>>>> 11:45:24,382 [FacetedMethodsBuilder main INFO ] introspecting >>>>>>> dom.todo.ToDoItem$Category$1 >>>>>>> 11:45:24,382 [FixturesInstallerDelegate main ERROR] >> installing >>>>>>> fixture fixture.todo.ToDoItemsFixture failed; aborting >>>>>>> java.lang.IllegalArgumentException: illegal argument, expected: is a >>>> non >>>>>>> empty string >>>>>>> at >>>>>>> >>>> org.apache.isis.core.commons.ensure.Ensure.ensureThatArg(Ensure.java:57) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.metamodel.spec.ObjectSpecId.<init>(ObjectSpecId.java:47) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.metamodel.spec.ObjectSpecId.of(ObjectSpecId.java:43) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.progmodel.facets.object.objecttype.ObjectSpecIdFacetAbstract.<init>(ObjectSpecIdFacetAbstract.java:40) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.progmodel.facets.object.objecttype.ObjectSpecIdFacetDerivedFromClassName.<init>(ObjectSpecIdFacetDerivedFromClassName.java:27) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.progmodel.facets.object.objecttype.ObjectTypeDerivedFromClassNameFacetFactory.process(ObjectTypeDerivedFromClassNameFacetFactory.java:47) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor.process(FacetProcessor.java:283) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.introspectClass(FacetedMethodsBuilder.java:178) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault.introspectTypeHierarchyAndMembers(ObjectSpecificationDefault.java:128) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.introspectIfRequired(ObjectReflectorDefault.java:572) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.loadSpecificationForSubstitutedClass(ObjectReflectorDefault.java:475) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.internalLoadSpecification(ObjectReflectorDefault.java:453) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.loadSpecification(ObjectReflectorDefault.java:448) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault.existingOrValueAdapter(AdapterManagerDefault.java:186) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault.adapterFor(AdapterManagerDefault.java:160) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession$2.adapterFor(RuntimeContextFromSession.java:110) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.progmodel.facets.properties.defaults.fromtype.PropertyDefaultFacetDerivedFromDefaultedFacet.getDefault(PropertyDefaultFacetDerivedFromDefaultedFacet.java:49) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationImpl.getDefault(OneToOneAssociationImpl.java:210) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationImpl.toDefault(OneToOneAssociationImpl.java:221) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault.initialize(ObjectSpecificationDefault.java:456) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.runtime.system.persistence.PersistenceSession.createTransientInstance(PersistenceSession.java:316) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession$7.createTransientInstance(RuntimeContextFromSession.java:185) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault.doCreateTransientInstance(DomainObjectContainerDefault.java:148) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault.newTransientInstance(DomainObjectContainerDefault.java:100) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.applib.AbstractContainedObject.newTransientInstance(AbstractContainedObject.java:41) >>>>>>> at dom.todo.ToDoItems.newToDo(ToDoItems.java:150) >>>>>>> at >>>>>>> >>>> >> fixture.todo.ToDoItemsFixture.createToDoItemForUser(ToDoItemsFixture.java:76) >>>>>>> at >>>>>>> fixture.todo.ToDoItemsFixture.installFor(ToDoItemsFixture.java:50) >>>>>>> at >>>> fixture.todo.ToDoItemsFixture.install(ToDoItemsFixture.java:41) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixture(FixturesInstallerDelegate.java:213) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtureInTransaction(FixturesInstallerDelegate.java:175) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtures(FixturesInstallerDelegate.java:162) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtures(FixturesInstallerDelegate.java:142) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.integtestsupport.IsisSystemForTest.wireAndInstallFixtures(IsisSystemForTest.java:292) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.integtestsupport.IsisSystemForTest.setUpSystem(IsisSystemForTest.java:283) >>>>>>> at >>>>>>> >>>> >> org.apache.isis.core.integtestsupport.IsisSystemForTest.setUpSystem(IsisSystemForTest.java:256) >>>>>>> at >>>>>>> >>>> >> integtests.AbstractIntegTest$IsisSystemForTestRule$1.initialValue(AbstractIntegTest.java:131) >>>>>>> at >>>>>>> >>>> >> integtests.AbstractIntegTest$IsisSystemForTestRule$1.initialValue(AbstractIntegTest.java:128) >>>>>>> at java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:141) >>>>>>> at java.lang.ThreadLocal.get(ThreadLocal.java:131) >>>>>>> at >>>>>>> >>>> >> integtests.AbstractIntegTest$IsisSystemForTestRule.getIsisSystemForTest(AbstractIntegTest.java:137) >>>>>>> at >>>>>>> >>>> >> integtests.AbstractIntegTest$IsisSystemForTestRule.apply(AbstractIntegTest.java:142) >>>>>>> at >>>>>>> >>>> >> org.junit.runners.BlockJUnit4ClassRunner.withMethodRules(BlockJUnit4ClassRunner.java:349) >>>>>>> at >>>>>>> >>>> >> org.junit.runners.BlockJUnit4ClassRunner.withRules(BlockJUnit4ClassRunner.java:339) >>>>>>> at >>>>>>> >>>> >> org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:256) >>>>>>> at >>>>>>> >>>> >> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) >>>>>>> at >>>>>>> >>>> >> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) >>>>>>> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) >>>>>>> at >>>> org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) >>>>>>> at >>>>>>> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) >>>>>>> at >>>> org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) >>>>>>> at >>>> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) >>>>>>> at >>>>>>> >>>> >> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) >>>>>>> at org.junit.runners.ParentRunner.run(ParentRunner.java:309) >>>>>>> at >>>>>>> >>>> >> org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59) >>>>>>> at >>>>>>> >>>> >> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:115) >>>>>>> at >>>>>>> >>>> >> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:102) >>>>>>> at org.apache.maven.surefire.Surefire.run(Surefire.java:180) >>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>>>>> at >>>>>>> >>>> >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) >>>>>>> at >>>>>>> >>>> >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) >>>>>>> at java.lang.reflect.Method.invoke(Method.java:597) >>>>>>> at >>>>>>> >>>> >> org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350) >>>>>>> at >>>>>>> >>>> >> org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021) >>>>>>> 11:45:24,382 [IsisTransaction main INFO ] abort >>>> transaction >>>>>>> IsisTransaction@7fbb6976[state=IN_PROGRESS,commands=0] >>>>>>> 11:45:24,387 [IsisConfigurationDefault main INFO ] adding >>>>>>> isis.persistor.datanucleus.RegisterEntities.packagePrefix=dom >>>>>>> 11:45:24,388 [IsisConfigurationDefault main INFO ] adding >>>>>>> >>>> >> isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL=jdbc:hsqldb:mem:test >>>>>>> 11:45:24,388 [IsisConfigurationDefault main INFO ] adding >>>>>>> >>>> >> isis.persistor.datanucleus.impl.datanucleus.defaultInheritanceStrategy=TABLE_PER_CLASS >>>>>>> 11:45:24,388 [IsisConfigurationDefault main INFO ] adding >>>>>>> isis.persistor.datanucleus.install-fixtures=true >>>>>>> 11:45:24,388 [IsisConfigurationDefault main INFO ] adding >>>>>>> isis.persistor.datanucleus.impl.datanucleus.cache.level2.type=none >>>>>>> 11:45:24,388 [IsisSystemFixturesHookAbstract main INFO ] >>>>>>> initialising Isis System >>>>>>> 11:45:24,388 [IsisSystemFixturesHookAbstract main INFO ] >>>> working >>>>>>> directory: /Users/oscarboubou/dev/test/myapp/integtests/. >>>>>>> 11:45:24,388 [IsisSystemFixturesHookAbstract main INFO ] >>>> resource >>>>>>> stream source: null >>>>>>> 11:45:24,388 [TemplateImageLoaderAwt main INFO ] images to be >>>>>>> loaded from images/ >>>>>>> 11:45:24,390 [TemplateImageLoaderAwt main INFO ] images to be >>>>>>> loaded from images/ >>>>>>> >>>>>>> [....] more log here. >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> 3. For us, as they are always @Programmatic methods, we annotate >> them: >>>>>>> >>>>>>> public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ >>>> { // >>>>>>> GMAP3: uncomment to use >>>> https://github.com/danhaywood/isis-wicket-gmap3 >>>>>>> >>>>>>> private static final long ONE_WEEK_IN_MILLIS = 7 * 24 * 60 * 60 >> * >>>>>>> 1000L; >>>>>>> >>>>>>> public static enum Category { >>>>>>> Professional { >>>>>>> @Override >>>>>>> @Programmatic >>>>>>> public Integer myIndex() { >>>>>>> return 1; >>>>>>> } >>>>>>> }, Domestic { >>>>>>> @Override >>>>>>> @Programmatic >>>>>>> public Integer myIndex() { >>>>>>> return 2; >>>>>>> } >>>>>>> }, Other { >>>>>>> @Override >>>>>>> @Programmatic >>>>>>> public Integer myIndex() { >>>>>>> return 3; >>>>>>> } >>>>>>> }; >>>>>>> >>>>>>> public abstract Integer myIndex(); >>>>>>> } >>>>>>> >>>>>>> >>>>>>> The behavior is the same. If you skip the tests or execute "mvn >>>>>>> antrun:run", when running the wicket viewer, if you try to execute >> the >>>> menu >>>>>>> option "Fixtures --> Install" the following exception is thrown: >>>>>>> >>>>>>> org.apache.wicket.WicketRuntimeException >>>>>>> Can't instantiate page using constructor 'public >>>>>>> >>>> >> org.apache.isis.viewer.wicket.ui.pages.action.ActionPage(org.apache.wicket.request.mapper.parameter.PageParameters)' >>>>>>> and argument 'pageType=[ACTION], actionSingleResultsMode=[REDIRECT], >>>>>>> objectOid=[fixture.todo.ToDoItemsFixturesService:1], >> actionType=[USER], >>>>>>> actionOwningSpec=[fixture.todo.ToDoItemsFixturesService], >>>>>>> actionId=[install()], pageTitle=[Install], actionMode=[RESULTS]'. >>>> Might be >>>>>>> it doesn't exist, may be it is not visible (public). >>>>>>> >>>>>>> >>>> >> org.apache.wicket.session.DefaultPageFactory#newPage(DefaultPageFactory.java:193) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.session.DefaultPageFactory#newPage(DefaultPageFactory.java:98) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.DefaultMapperContext#newPageInstance(DefaultMapperContext.java:137) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.core.request.handler.PageProvider#resolvePageInstance(PageProvider.java:268) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.core.request.handler.PageProvider#getPageInstance(PageProvider.java:166) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.handler.render.PageRenderer#getPage(PageRenderer.java:78) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.handler.render.WebPageRenderer#renderPage(WebPageRenderer.java:94) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.handler.render.WebPageRenderer#respond(WebPageRenderer.java:196) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.core.request.handler.RenderPageRequestHandler#respond(RenderPageRequestHandler.java:165) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor#respond(RequestCycle.java:854) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.RequestHandlerStack#execute(RequestHandlerStack.java:64) >>>>>>> >>>> >> org.apache.wicket.request.cycle.RequestCycle#execute(RequestCycle.java:254) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.cycle.RequestCycle#processRequest(RequestCycle.java:211) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.cycle.RequestCycle#processRequestAndDetach(RequestCycle.java:282) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.protocol.http.WicketFilter#processRequestCycle(WicketFilter.java:259) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.protocol.http.WicketFilter#processRequest(WicketFilter.java:201) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.protocol.http.WicketFilter#doFilter(WicketFilter.java:282) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHandler.java:1326) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.web.servlet.AbstractShiroFilter#executeChain(AbstractShiroFilter.java:449) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.web.servlet.AbstractShiroFilter$1#call(AbstractShiroFilter.java:365) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.subject.support.SubjectCallable#doCall(SubjectCallable.java:90) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.subject.support.SubjectCallable#call(SubjectCallable.java:83) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.subject.support.DelegatingSubject#execute(DelegatingSubject.java:383) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.web.servlet.AbstractShiroFilter#doFilterInternal(AbstractShiroFilter.java:362) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.web.servlet.OncePerRequestFilter#doFilter(OncePerRequestFilter.java:125) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHandler.java:1326) >>>>>>> >>>> >> org.eclipse.jetty.servlet.ServletHandler#doHandle(ServletHandler.java:479) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.ScopedHandler#handle(ScopedHandler.java:119) >>>>>>> >>>> >> org.eclipse.jetty.security.SecurityHandler#handle(SecurityHandler.java:520) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.session.SessionHandler#doHandle(SessionHandler.java:227) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.ContextHandler#doHandle(ContextHandler.java:940) >>>>>>> >>>> >> org.eclipse.jetty.servlet.ServletHandler#doScope(ServletHandler.java:409) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.session.SessionHandler#doScope(SessionHandler.java:186) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.ContextHandler#doScope(ContextHandler.java:874) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.ScopedHandler#handle(ScopedHandler.java:117) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.ContextHandlerCollection#handle(ContextHandlerCollection.java:250) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.HandlerCollection#handle(HandlerCollection.java:149) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.HandlerWrapper#handle(HandlerWrapper.java:110) >>>>>>> org.eclipse.jetty.server.Server#handle(Server.java:349) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.HttpConnection#handleRequest(HttpConnection.java:441) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.HttpConnection$RequestHandler#headerComplete(HttpConnection.java:904) >>>>>>> org.eclipse.jetty.http.HttpParser#parseNext(HttpParser.java:565) >>>>>>> org.eclipse.jetty.http.HttpParser#parseAvailable(HttpParser.java:217) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.AsyncHttpConnection#handle(AsyncHttpConnection.java:46) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.io.nio.SelectChannelEndPoint#handle(SelectChannelEndPoint.java:545) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.io.nio.SelectChannelEndPoint$1#run(SelectChannelEndPoint.java:43) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.util.thread.QueuedThreadPool#runJob(QueuedThreadPool.java:598) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.util.thread.QueuedThreadPool$3#run(QueuedThreadPool.java:533) >>>>>>> java.lang.Thread#run(Thread.java:680) >>>>>>> java.lang.reflect.InvocationTargetException >>>>>>> >>>>>>> >>>> >> sun.reflect.NativeConstructorAccessorImpl#newInstance0(NativeConstructorAccessorImpl.java:-2) >>>>>>> >>>>>>> >>>> >> sun.reflect.NativeConstructorAccessorImpl#newInstance(NativeConstructorAccessorImpl.java:39) >>>>>>> >>>>>>> >>>> >> sun.reflect.DelegatingConstructorAccessorImpl#newInstance(DelegatingConstructorAccessorImpl.java:27) >>>>>>> java.lang.reflect.Constructor#newInstance(Constructor.java:513) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.session.DefaultPageFactory#newPage(DefaultPageFactory.java:170) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.session.DefaultPageFactory#newPage(DefaultPageFactory.java:98) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.DefaultMapperContext#newPageInstance(DefaultMapperContext.java:137) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.core.request.handler.PageProvider#resolvePageInstance(PageProvider.java:268) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.core.request.handler.PageProvider#getPageInstance(PageProvider.java:166) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.handler.render.PageRenderer#getPage(PageRenderer.java:78) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.handler.render.WebPageRenderer#renderPage(WebPageRenderer.java:94) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.handler.render.WebPageRenderer#respond(WebPageRenderer.java:196) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.core.request.handler.RenderPageRequestHandler#respond(RenderPageRequestHandler.java:165) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor#respond(RequestCycle.java:854) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.RequestHandlerStack#execute(RequestHandlerStack.java:64) >>>>>>> >>>> >> org.apache.wicket.request.cycle.RequestCycle#execute(RequestCycle.java:254) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.cycle.RequestCycle#processRequest(RequestCycle.java:211) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.cycle.RequestCycle#processRequestAndDetach(RequestCycle.java:282) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.protocol.http.WicketFilter#processRequestCycle(WicketFilter.java:259) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.protocol.http.WicketFilter#processRequest(WicketFilter.java:201) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.protocol.http.WicketFilter#doFilter(WicketFilter.java:282) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHandler.java:1326) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.web.servlet.AbstractShiroFilter#executeChain(AbstractShiroFilter.java:449) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.web.servlet.AbstractShiroFilter$1#call(AbstractShiroFilter.java:365) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.subject.support.SubjectCallable#doCall(SubjectCallable.java:90) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.subject.support.SubjectCallable#call(SubjectCallable.java:83) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.subject.support.DelegatingSubject#execute(DelegatingSubject.java:383) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.web.servlet.AbstractShiroFilter#doFilterInternal(AbstractShiroFilter.java:362) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.web.servlet.OncePerRequestFilter#doFilter(OncePerRequestFilter.java:125) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHandler.java:1326) >>>>>>> >>>> >> org.eclipse.jetty.servlet.ServletHandler#doHandle(ServletHandler.java:479) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.ScopedHandler#handle(ScopedHandler.java:119) >>>>>>> >>>> >> org.eclipse.jetty.security.SecurityHandler#handle(SecurityHandler.java:520) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.session.SessionHandler#doHandle(SessionHandler.java:227) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.ContextHandler#doHandle(ContextHandler.java:940) >>>>>>> >>>> >> org.eclipse.jetty.servlet.ServletHandler#doScope(ServletHandler.java:409) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.session.SessionHandler#doScope(SessionHandler.java:186) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.ContextHandler#doScope(ContextHandler.java:874) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.ScopedHandler#handle(ScopedHandler.java:117) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.ContextHandlerCollection#handle(ContextHandlerCollection.java:250) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.HandlerCollection#handle(HandlerCollection.java:149) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.HandlerWrapper#handle(HandlerWrapper.java:110) >>>>>>> org.eclipse.jetty.server.Server#handle(Server.java:349) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.HttpConnection#handleRequest(HttpConnection.java:441) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.HttpConnection$RequestHandler#headerComplete(HttpConnection.java:904) >>>>>>> org.eclipse.jetty.http.HttpParser#parseNext(HttpParser.java:565) >>>>>>> org.eclipse.jetty.http.HttpParser#parseAvailable(HttpParser.java:217) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.AsyncHttpConnection#handle(AsyncHttpConnection.java:46) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.io.nio.SelectChannelEndPoint#handle(SelectChannelEndPoint.java:545) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.io.nio.SelectChannelEndPoint$1#run(SelectChannelEndPoint.java:43) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.util.thread.QueuedThreadPool#runJob(QueuedThreadPool.java:598) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.util.thread.QueuedThreadPool$3#run(QueuedThreadPool.java:533) >>>>>>> java.lang.Thread#run(Thread.java:680) >>>>>>> java.lang.IllegalArgumentException >>>>>>> illegal argument, expected: is a non empty string >>>>>>> >>>> org.apache.isis.core.commons.ensure.Ensure#ensureThatArg(Ensure.java:57) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.metamodel.spec.ObjectSpecId#<init>(ObjectSpecId.java:47) >>>>>>> >>>> >> org.apache.isis.core.metamodel.spec.ObjectSpecId#of(ObjectSpecId.java:43) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.progmodel.facets.object.objecttype.ObjectSpecIdFacetAbstract#<init>(ObjectSpecIdFacetAbstract.java:40) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.progmodel.facets.object.objecttype.ObjectSpecIdFacetDerivedFromClassName#<init>(ObjectSpecIdFacetDerivedFromClassName.java:27) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.progmodel.facets.object.objecttype.ObjectTypeDerivedFromClassNameFacetFactory#process(ObjectTypeDerivedFromClassNameFacetFactory.java:47) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor#process(FacetProcessor.java:283) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder#introspectClass(FacetedMethodsBuilder.java:178) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault#introspectTypeHierarchyAndMembers(ObjectSpecificationDefault.java:128) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault#introspectIfRequired(ObjectReflectorDefault.java:572) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault#loadSpecificationForSubstitutedClass(ObjectReflectorDefault.java:475) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault#internalLoadSpecification(ObjectReflectorDefault.java:453) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault#loadSpecification(ObjectReflectorDefault.java:448) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault#existingOrValueAdapter(AdapterManagerDefault.java:186) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault#adapterFor(AdapterManagerDefault.java:160) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession$2#adapterFor(RuntimeContextFromSession.java:110) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.progmodel.facets.properties.defaults.fromtype.PropertyDefaultFacetDerivedFromDefaultedFacet#getDefault(PropertyDefaultFacetDerivedFromDefaultedFacet.java:49) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationImpl#getDefault(OneToOneAssociationImpl.java:210) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationImpl#toDefault(OneToOneAssociationImpl.java:221) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault#initialize(ObjectSpecificationDefault.java:456) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.runtime.system.persistence.PersistenceSession#createTransientInstance(PersistenceSession.java:316) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession$7#createTransientInstance(RuntimeContextFromSession.java:185) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault#doCreateTransientInstance(DomainObjectContainerDefault.java:148) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault#newTransientInstance(DomainObjectContainerDefault.java:100) >>>>>>> >>>>>>> >>>> >> org.apache.isis.applib.AbstractContainedObject#newTransientInstance(AbstractContainedObject.java:41) >>>>>>> dom.todo.ToDoItems#newToDo(ToDoItems.java:150) >>>>>>> >>>>>>> >>>> >> fixture.todo.ToDoItemsFixture#createToDoItemForUser(ToDoItemsFixture.java:76) >>>>>>> fixture.todo.ToDoItemsFixture#installFor(ToDoItemsFixture.java:50) >>>>>>> fixture.todo.ToDoItemsFixture#install(ToDoItemsFixture.java:41) >>>>>>> >>>>>>> >>>> >> fixture.todo.ToDoItemsFixturesService#install(ToDoItemsFixturesService.java:40) >>>>>>> >>>>>>> >>>> >> sun.reflect.NativeMethodAccessorImpl#invoke0(NativeMethodAccessorImpl.java:-2) >>>>>>> >>>>>>> >>>> >> sun.reflect.NativeMethodAccessorImpl#invoke(NativeMethodAccessorImpl.java:39) >>>>>>> >>>>>>> >>>> >> sun.reflect.DelegatingMethodAccessorImpl#invoke(DelegatingMethodAccessorImpl.java:25) >>>>>>> java.lang.reflect.Method#invoke(Method.java:597) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.progmodel.facets.actions.invoke.ActionInvocationFacetViaMethod#invoke(ActionInvocationFacetViaMethod.java:94) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.runtime.transaction.facets.ActionInvocationFacetWrapTransaction$1#execute(ActionInvocationFacetWrapTransaction.java:55) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.runtime.transaction.facets.ActionInvocationFacetWrapTransaction$1#execute(ActionInvocationFacetWrapTransaction.java:52) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.runtime.system.transaction.IsisTransactionManager#executeWithinTransaction(IsisTransactionManager.java:220) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.runtime.transaction.facets.ActionInvocationFacetWrapTransaction#invoke(ActionInvocationFacetWrapTransaction.java:52) >>>>>>> >>>>>>> >>>> >> org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionImpl#execute(ObjectActionImpl.java:412) >>>>>>> >>>>>>> >>>> >> org.apache.isis.viewer.wicket.model.models.ActionModel#executeAction(ActionModel.java:475) >>>>>>> >>>>>>> >>>> >> org.apache.isis.viewer.wicket.model.models.ActionModel#load(ActionModel.java:460) >>>>>>> >>>>>>> >>>> >> org.apache.isis.viewer.wicket.model.models.ActionModel#load(ActionModel.java:61) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.model.LoadableDetachableModel#getObject(LoadableDetachableModel.java:121) >>>>>>> >>>>>>> >>>> >> org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel#executeActionHandlingApplicationExceptions(ActionPanel.java:256) >>>>>>> >>>>>>> >>>> >> org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel#executeActionOnTargetAndProcessResults(ActionPanel.java:178) >>>>>>> >>>>>>> >>>> >> org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel#executeActionAndProcessResults(ActionPanel.java:138) >>>>>>> >>>>>>> >>>> >> org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel#buildGui(ActionPanel.java:96) >>>>>>> >>>>>>> >>>> >> org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel#<init>(ActionPanel.java:89) >>>>>>> >>>>>>> >>>> >> org.apache.isis.viewer.wicket.ui.components.actions.ActionPanelFactory#createComponent(ActionPanelFactory.java:49) >>>>>>> >>>>>>> >>>> >> org.apache.isis.viewer.wicket.ui.ComponentFactoryAbstract#createComponent(ComponentFactoryAbstract.java:82) >>>>>>> >>>>>>> >>>> >> org.apache.isis.viewer.wicket.viewer.registries.components.ComponentFactoryRegistryDefault#createComponent(ComponentFactoryRegistryDefault.java:120) >>>>>>> >>>>>>> >>>> >> org.apache.isis.viewer.wicket.viewer.registries.components.ComponentFactoryRegistryDefault#addOrReplaceComponent(ComponentFactoryRegistryDefault.java:105) >>>>>>> >>>>>>> >>>> >> org.apache.isis.viewer.wicket.ui.pages.PageAbstract#addComponent(PageAbstract.java:263) >>>>>>> >>>>>>> >>>> >> org.apache.isis.viewer.wicket.ui.pages.PageAbstract#addChildComponents(PageAbstract.java:258) >>>>>>> >>>>>>> >>>> >> org.apache.isis.viewer.wicket.ui.pages.action.ActionPage#<init>(ActionPage.java:54) >>>>>>> >>>>>>> >>>> >> sun.reflect.NativeConstructorAccessorImpl#newInstance0(NativeConstructorAccessorImpl.java:-2) >>>>>>> >>>>>>> >>>> >> sun.reflect.NativeConstructorAccessorImpl#newInstance(NativeConstructorAccessorImpl.java:39) >>>>>>> >>>>>>> >>>> >> sun.reflect.DelegatingConstructorAccessorImpl#newInstance(DelegatingConstructorAccessorImpl.java:27) >>>>>>> java.lang.reflect.Constructor#newInstance(Constructor.java:513) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.session.DefaultPageFactory#newPage(DefaultPageFactory.java:170) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.session.DefaultPageFactory#newPage(DefaultPageFactory.java:98) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.DefaultMapperContext#newPageInstance(DefaultMapperContext.java:137) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.core.request.handler.PageProvider#resolvePageInstance(PageProvider.java:268) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.core.request.handler.PageProvider#getPageInstance(PageProvider.java:166) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.handler.render.PageRenderer#getPage(PageRenderer.java:78) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.handler.render.WebPageRenderer#renderPage(WebPageRenderer.java:94) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.handler.render.WebPageRenderer#respond(WebPageRenderer.java:196) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.core.request.handler.RenderPageRequestHandler#respond(RenderPageRequestHandler.java:165) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor#respond(RequestCycle.java:854) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.RequestHandlerStack#execute(RequestHandlerStack.java:64) >>>>>>> >>>> >> org.apache.wicket.request.cycle.RequestCycle#execute(RequestCycle.java:254) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.cycle.RequestCycle#processRequest(RequestCycle.java:211) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.request.cycle.RequestCycle#processRequestAndDetach(RequestCycle.java:282) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.protocol.http.WicketFilter#processRequestCycle(WicketFilter.java:259) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.protocol.http.WicketFilter#processRequest(WicketFilter.java:201) >>>>>>> >>>>>>> >>>> >> org.apache.wicket.protocol.http.WicketFilter#doFilter(WicketFilter.java:282) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHandler.java:1326) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.web.servlet.AbstractShiroFilter#executeChain(AbstractShiroFilter.java:449) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.web.servlet.AbstractShiroFilter$1#call(AbstractShiroFilter.java:365) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.subject.support.SubjectCallable#doCall(SubjectCallable.java:90) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.subject.support.SubjectCallable#call(SubjectCallable.java:83) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.subject.support.DelegatingSubject#execute(DelegatingSubject.java:383) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.web.servlet.AbstractShiroFilter#doFilterInternal(AbstractShiroFilter.java:362) >>>>>>> >>>>>>> >>>> >> org.apache.shiro.web.servlet.OncePerRequestFilter#doFilter(OncePerRequestFilter.java:125) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHandler.java:1326) >>>>>>> >>>> >> org.eclipse.jetty.servlet.ServletHandler#doHandle(ServletHandler.java:479) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.ScopedHandler#handle(ScopedHandler.java:119) >>>>>>> >>>> >> org.eclipse.jetty.security.SecurityHandler#handle(SecurityHandler.java:520) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.session.SessionHandler#doHandle(SessionHandler.java:227) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.ContextHandler#doHandle(ContextHandler.java:940) >>>>>>> >>>> >> org.eclipse.jetty.servlet.ServletHandler#doScope(ServletHandler.java:409) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.session.SessionHandler#doScope(SessionHandler.java:186) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.ContextHandler#doScope(ContextHandler.java:874) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.ScopedHandler#handle(ScopedHandler.java:117) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.ContextHandlerCollection#handle(ContextHandlerCollection.java:250) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.HandlerCollection#handle(HandlerCollection.java:149) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.handler.HandlerWrapper#handle(HandlerWrapper.java:110) >>>>>>> org.eclipse.jetty.server.Server#handle(Server.java:349) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.HttpConnection#handleRequest(HttpConnection.java:441) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.HttpConnection$RequestHandler#headerComplete(HttpConnection.java:904) >>>>>>> org.eclipse.jetty.http.HttpParser#parseNext(HttpParser.java:565) >>>>>>> org.eclipse.jetty.http.HttpParser#parseAvailable(HttpParser.java:217) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.server.AsyncHttpConnection#handle(AsyncHttpConnection.java:46) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.io.nio.SelectChannelEndPoint#handle(SelectChannelEndPoint.java:545) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.io.nio.SelectChannelEndPoint$1#run(SelectChannelEndPoint.java:43) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.util.thread.QueuedThreadPool#runJob(QueuedThreadPool.java:598) >>>>>>> >>>>>>> >>>> >> org.eclipse.jetty.util.thread.QueuedThreadPool$3#run(QueuedThreadPool.java:533) >>>>>>> java.lang.Thread#run(Thread.java:680) >>>>>>> >>>>>>> >>>>> >>>> >>>> >> >>
