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

Reply via email to