Many thanks, Dan.
I'll try it! > El 18/4/2015, a las 12:26, Dan Haywood <[email protected]> > escribió: > > 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
