Hi Oscar, I hit this same issue a couple of weeks ago while refactoring our example todoapp, which led me to inventing the "SudoService".
Not yet documented, but you can see its usage here [1] HTH Dan [1] https://github.com/isisaddons/isis-app-todoapp/blob/master/fixture/src/main/java/todoapp/fixture/module/todoitem/ToDoItemCreate.java#L134 On 18 April 2015 at 10:17, QUALITEC - Óscar Bou <[email protected]> wrote: > Hi all. > > I have a FixtureScript that invokes some factory methods that include > setters that are invoking by wrapping the domain object (for ensuring that > the validateXXX, modifyXXX, etc. methods are also invoked). > > public class TwentyPercentForTwoOrdersCoupon extends FixtureScript { > > @Override > protected void execute( > final FixtureScript.ExecutionContext executionContext) { > > this.coupons.createCoupon("50€-2ORDERS", LocalDate.now(), > LocalDate.now().plusDays(3), 2L, null, new BigDecimal("50")); > > } > > @Inject > private Coupons coupons; > > } > > @DomainService(repositoryFor = Coupon.class) > public class Coupons extends AbstractTellmegenService { > > // {{ createCoupon (action) > @MemberOrder(sequence = "2.5.1") > public Coupon createCoupon(@ParameterLayout(named = "Code") final > String code, > @ParameterLayout(named = "Start Date") final LocalDate > startDate, > @ParameterLayout(named = "Due Date") final LocalDate dueDate, > @ParameterLayout(named = "Max Number of Kits") final Long > maxNumberOfKits, > @ParameterLayout(named = "Percent Discount (0-100)") > @Parameter(optionality = Optionality.OPTIONAL) final Integer > percentDiscount, > @ParameterLayout(named = "Amount Discount (€)") > @Parameter(optionality = Optionality.OPTIONAL) final BigDecimal > amountDiscount) { > final Coupon coupon = this.newTransientInstance(Coupon.class); > > this.wrap(coupon).setCode(code); > this.wrap(coupon).setStartDate(startDate); > this.wrap(coupon).setDueDate(dueDate); > this.wrap(coupon).setMaxNumberOfOrders(maxNumberOfKits); > this.wrap(coupon).setPercentDiscount(percentDiscount); > this.wrap(coupon).setAmountDiscount(amountDiscount); > > // Save DB > this.persist(coupon); > this.getContainer().flush(); > > return coupon; > } > > > > But when executing from the Fixture Script, the following exception is > thrown. > Any ideas about how to avoid it? > > I'm using the security add-on. Perhaps it must be initialized somewhere on > the Fixture Script? > > Thanks! > > > 11:06:11,379 [WebAppContext main WARN ] Failed startup of > context > o.e.j.w.WebAppContext{,file:/Users/oscarboubou/dev/tellmegen/dbtg/webapp/src/main/webapp/},src/main/webapp > javax.servlet.ServletException: com.google.inject.ProvisionException: > Guice provision errors: > > 1) Error in custom provider, > org.apache.isis.applib.services.wrapper.HiddenException: Reason: Could not > locate application user for initialisation. Identifier: > com.tellmegen.domain.model.order.coupon.Coupon#code() > at > org.apache.isis.core.runtime.runner.IsisInjectModule.provideIsisSystem(IsisInjectModule.java:132) > at > org.apache.isis.core.runtime.runner.IsisInjectModule.provideIsisSystem(IsisInjectModule.java:132) > while locating org.apache.isis.core.runtime.system.IsisSystem > for field at > org.apache.isis.viewer.wicket.viewer.IsisWicketApplication.system(IsisWicketApplication.java:1) > while locating webapp.application.TellMeGenApplication > > 1 error > at > org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:450) > at > org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:351) > at > org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:118) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) > at > org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:768) > at > org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265) > at > org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1242) > at > org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717) > at > org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) > at > org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) > at org.eclipse.jetty.server.Server.doStart(Server.java:282) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) > at > org.apache.isis.core.webserver.WebServerBootstrapper.bootstrap(WebServerBootstrapper.java:86) > at org.apache.isis.core.webserver.WebServer.run(WebServer.java:107) > at org.apache.isis.core.webserver.WebServer.main(WebServer.java:71) > at org.apache.isis.WebServer.main(WebServer.java:25) > Caused by: com.google.inject.ProvisionException: Guice provision errors: > > 1) Error in custom provider, > org.apache.isis.applib.services.wrapper.HiddenException: Reason: Could not > locate application user for initialisation. Identifier: > com.tellmegen.domain.model.order.coupon.Coupon#code() > at > org.apache.isis.core.runtime.runner.IsisInjectModule.provideIsisSystem(IsisInjectModule.java:132) > at > org.apache.isis.core.runtime.runner.IsisInjectModule.provideIsisSystem(IsisInjectModule.java:132) > while locating org.apache.isis.core.runtime.system.IsisSystem > for field at > org.apache.isis.viewer.wicket.viewer.IsisWicketApplication.system(IsisWicketApplication.java:1) > while locating webapp.application.TellMeGenApplication > > 1 error > at > com.google.inject.internal.Errors.throwProvisionExceptionIfErrorsExist(Errors.java:451) > at > com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:65) > at > com.google.inject.internal.InjectorImpl.injectMembers(InjectorImpl.java:944) > at > org.apache.isis.viewer.wicket.viewer.IsisWicketApplication.init(IsisWicketApplication.java:256) > at > webapp.application.TellMeGenApplication.init(TellMeGenApplication.java:204) > at > org.apache.wicket.Application.initApplication(Application.java:823) > at > org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:424) > ... 16 more > Caused by: org.apache.isis.applib.services.wrapper.HiddenException: > Reason: Could not locate application user for initialisation. Identifier: > com.tellmegen.domain.model.order.coupon.Coupon#code() > at > org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.toException(DomainObjectInvocationHandler.java:713) > at > org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.notifyListenersAndVetoIfRequired(DomainObjectInvocationHandler.java:681) > at > org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.checkVisibility(DomainObjectInvocationHandler.java:663) > at > org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.handleSetterMethodOnProperty(DomainObjectInvocationHandler.java:387) > at > org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.invoke(DomainObjectInvocationHandler.java:216) > at > org.apache.isis.core.wrapper.proxy.ProxyInstantiatorForJavassist$1.invoke(ProxyInstantiatorForJavassist.java:52) > at > com.tellmegen.domain.model.order.coupon.Coupon_$$_jvstc93_5.setCode(Coupon_$$_jvstc93_5.java) > at > com.tellmegen.domain.model.order.coupon.Coupons.createCoupon(Coupons.java:36) > at > com.tellmegen.fixture.model.orders.TwentyPercentForTwoOrdersCoupon.execute(TwentyPercentForTwoOrdersCoupon.java:35) > at > org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChildIfNotAlready(FixtureScript.java:549) > at > org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChildT(FixtureScript.java:528) > at > org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChildT(FixtureScript.java:498) > at > org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChild(FixtureScript.java:487) > at > com.tellmegen.fixture.TellMeGenDemoFixture.execute(TellMeGenDemoFixture.java:58) > at > org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChildIfNotAlready(FixtureScript.java:549) > at > org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChildT(FixtureScript.java:528) > at > org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChildT(FixtureScript.java:498) > at > org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChild(FixtureScript.java:487) > at > com.tellmegen.fixture.TellMeGenDemoWithAllRecordsFixture.execute(TellMeGenDemoWithAllRecordsFixture.java:25) > at > org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.executeChildIfNotAlready(FixtureScript.java:549) > at > org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext.access$0(FixtureScript.java:546) > at > org.apache.isis.applib.fixturescripts.FixtureScript.run(FixtureScript.java:719) > at > org.apache.isis.applib.fixturescripts.FixtureScript.install(FixtureScript.java:814) > at > org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixture(FixturesInstallerDelegate.java:205) > at > org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtureInTransaction(FixturesInstallerDelegate.java:171) > at > org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtures(FixturesInstallerDelegate.java:158) > at > org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtures(FixturesInstallerDelegate.java:138) > at > org.apache.isis.core.runtime.fixtures.FixturesInstallerAbstract.installFixtures(FixturesInstallerAbstract.java:42) > at > org.apache.isis.core.runtime.systemusinginstallers.IsisSystemAbstract.installFixturesIfRequired(IsisSystemAbstract.java:85) > at > org.apache.isis.core.runtime.system.IsisSystemFixturesHookAbstract.init(IsisSystemFixturesHookAbstract.java:128) > at > org.apache.isis.core.runtime.runner.IsisInjectModule.provideIsisSystem(IsisInjectModule.java:133) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:606) > at > com.google.inject.internal.ProviderMethod.get(ProviderMethod.java:104) > at > com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) > at > com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) > at > com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031) > at > com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) > at com.google.inject.Scopes$1$1.get(Scopes.java:65) > at > com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) > at > com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:53) > at > com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:110) > at > com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:75) > at > com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:73) > at > com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024) > at > com.google.inject.internal.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:73) > at > com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:60) > ... 21 more > 11:06:11,449 [AbstractConnector main INFO ] Started > [email protected]:8080
