You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@isis.apache.org by QUALITEC - Óscar Bou <ob...@qualitec.es> on 2015/04/18 11:17:45 UTC

Fixture Scripts - Invoking WrapperFactory.wrap() in actions

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 SelectChannelConnector@0.0.0.0:8080

Re: Fixture Scripts - Invoking WrapperFactory.wrap() in actions

Posted by GESCONSULTOR - Óscar Bou <o....@gesconsultor.com>.
Just to keep it documented, I’ve used the following work-arround to override the user:
- Inject the “DomainObjectContainerDefault” service.
- Invoke "this.domainObjectContainerDefault.overrideUser(TgbAdminUser.ACCOUNT_NAME)” right before executing the fixtures with wrapped calls.

Despite the “overrideUser” method is properly marked as not being part of the API …



So basically it’s now:

public class DemoWithAllRecordsFixture extends FixtureScript {

    public DemoWithAllRecordsFixture() {
        this.withDiscoverability(Discoverability.DISCOVERABLE);
    }

    @Override
    protected void execute(
            final ExecutionContext executionContext) {

	this.domainObjectContainerDefault.overrideUser(TgbAdminUser.ACCOUNT_NAME);

        executionContext.executeChild(this, new ExcelInheritedConditionsSNPGenotypeFixture());
        executionContext.executeChild(this, new ExcelDrugsSNPGenotypeFixture());
        executionContext.executeChild(this, new ExcelTraitsSNPGenotypeFixture());

    }

    @Inject
    DomainObjectContainerDefault domainObjectContainerDefault;

}


HTH,

Oscar





> El 10/5/2015, a las 21:31, GESCONSULTOR - Óscar Bou <o....@gesconsultor.com> escribió:
> 
> Hi Dan.
> 
> I’m not sure how to use the SudoService inside a FixtureScript.
> 
> I have the following:
> 
> 
> public class DemoWithAllRecordsFixture extends FixtureScript {
> 
>     public DemoWithAllRecordsFixture() {
>         this.withDiscoverability(Discoverability.DISCOVERABLE);
>     }
> 
>     @Override
>     protected void execute(
>             final ExecutionContext executionContext) {
> 
>         executionContext.executeChild(this, new ExcelInheritedConditionsSNPGenotypeFixture());
>         executionContext.executeChild(this, new ExcelDrugsSNPGenotypeFixture());
>         executionContext.executeChild(this, new ExcelTraitsSNPGenotypeFixture());
> 
>     }
> 
> The ExcelInheritedConditionsSNPGenotypeFixture contains many wrapped action invocations, so the following exception is thrown:
> 
> Caused by: org.apache.isis.applib.services.wrapper.HiddenException: Reason: Could not locate application user for initialisation. Identifier: com.tellmegen.domain.model.inheritedconditions.InheritedCondition#upsertSNPGenotype(java.lang.Integer,com.tellmegen.domain.model.AppliesToSex,java.lang.String,java.lang.String,com.tellmegen.domain.model.inheritedconditions.InheritedConditionHeredity,com.tellmegen.domain.model.inheritedconditions.InheritedConditionPhenotype,com.tellmegen.domain.model.inheritedconditions.InheritedConditionStatus,java.lang.String,java.lang.String)
> 	at org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.toException(DomainObjectInvocationHandler.java:732)
> 	at org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.notifyListenersAndVetoIfRequired(DomainObjectInvocationHandler.java:700)
> 	at org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.checkVisibility(DomainObjectInvocationHandler.java:682)
> 	at org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.handleActionMethod(DomainObjectInvocationHandler.java:607)
> 	at org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.invoke(DomainObjectInvocationHandler.java:263)
> 	at org.apache.isis.core.wrapper.proxy.ProxyInstantiatorForJavassist$1.invoke(ProxyInstantiatorForJavassist.java:72)
> 	at com.tellmegen.domain.model.inheritedconditions.InheritedCondition_$$_jvstcc_7.upsertSNPGenotype(InheritedCondition_$$_jvstcc_7.java)
> 	at com.tellmegen.domain.model.importing.ImportInheritedConditionSNPGenotype.saveToDatabase(ImportInheritedConditionSNPGenotype.java:244)
> 	at com.tellmegen.domain.model.importing.ImportInheritedConditionsSNPGenotypeService.importInheritedConditionsSNPGenotypes(ImportInheritedConditionsSNPGenotypeService.java:38)
> 	at com.tellmegen.fixture.model.inheritedconditionsnpgenotype.ExcelInheritedConditionsSNPGenotypeFixture.execute(ExcelInheritedConditionsSNPGenotypeFixture.java:24)
> 	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:34)
> 	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)
> 
> 
> If try to use them inside a SudoService.sudo(…) call I don’t have access to the “executionContext” (it’s private).
> 
> So basically, I would need to make the “executionContext” field of FixtureScript “public”, or being able to use SudoService to override the User globally, without needing to use a “Callable” construct.
> 
> Do you agree?
> 
> Thanks,
> 
> Oscar
> 
> 
> 
> 
> 
>> El 18/4/2015, a las 12:35, GESCONSULTOR <o.bou@gesconsultor.com <ma...@gesconsultor.com>> escribió:
>> 
>> 
>> 
>> Many thanks, Dan.
>> 
>> I'll try it!
>> 
>>> El 18/4/2015, a las 12:26, Dan Haywood <dan@haywood-associates.co.uk <ma...@haywood-associates.co.uk>> 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 <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 <ob...@qualitec.es> 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
>>>> SelectChannelConnector@0.0.0.0:8080
> 
> 
> Óscar Bou Bou
> Responsable de Producto
> Auditor Jefe de Certificación ISO 27001 en BSI
> CISA, CRISC, APMG ISO 20000, ITIL-F
> 
> <contactenos.html.gif>   902 900 231 / 620 267 520
> <Pasted Graphic 1.tiff>   http://www.twitter.com/oscarbou <http://www.twitter.com/oscarbou>
> 
> <gesdatos-software.gif>   http://es.linkedin.com/in/oscarbou <http://es.linkedin.com/in/oscarbou>
> 
> <blog.png>   http://www.GesConsultor.com <http://www.gesconsultor.com/> 
> 
> <gesconsultor_logo_blue_email.png>
> 
> 
> Este mensaje y los ficheros anexos son confidenciales. Los mismos contienen información reservada que no puede ser difundida. Si usted ha recibido este correo por error, tenga la amabilidad de eliminarlo de su sistema y avisar al remitente mediante reenvío a su dirección electrónica; no deberá copiar el mensaje ni divulgar su contenido a ninguna persona.
> Su dirección de correo electrónico junto a sus datos personales constan en un fichero titularidad de Gesdatos Software, S.L. cuya finalidad es la de mantener el contacto con Ud. Si quiere saber de qué información disponemos de Ud., modificarla, y en su caso, cancelarla, puede hacerlo enviando un escrito al efecto, acompañado de una fotocopia de su D.N.I. a la siguiente dirección: Gesdatos Software, S.L. , Paseo de la Castellana, 153 bajo - 28046 (Madrid), y Avda. Cortes Valencianas num. 50, 1ºC - 46015 (Valencia). Asimismo, es su responsabilidad comprobar que este mensaje o sus archivos adjuntos no contengan virus informáticos, y en caso que los tuvieran eliminarlos.
> 
> 
> 
> 
> 


Óscar Bou Bou
Responsable de Producto
Auditor Jefe de Certificación ISO 27001 en BSI
CISA, CRISC, APMG ISO 20000, ITIL-F

   902 900 231 / 620 267 520
   http://www.twitter.com/oscarbou <http://www.twitter.com/oscarbou>

   http://es.linkedin.com/in/oscarbou <http://es.linkedin.com/in/oscarbou>

   http://www.GesConsultor.com <http://www.gesconsultor.com/> 




Este mensaje y los ficheros anexos son confidenciales. Los mismos contienen información reservada que no puede ser difundida. Si usted ha recibido este correo por error, tenga la amabilidad de eliminarlo de su sistema y avisar al remitente mediante reenvío a su dirección electrónica; no deberá copiar el mensaje ni divulgar su contenido a ninguna persona.
Su dirección de correo electrónico junto a sus datos personales constan en un fichero titularidad de Gesdatos Software, S.L. cuya finalidad es la de mantener el contacto con Ud. Si quiere saber de qué información disponemos de Ud., modificarla, y en su caso, cancelarla, puede hacerlo enviando un escrito al efecto, acompañado de una fotocopia de su D.N.I. a la siguiente dirección: Gesdatos Software, S.L. , Paseo de la Castellana, 153 bajo - 28046 (Madrid), y Avda. Cortes Valencianas num. 50, 1ºC - 46015 (Valencia). Asimismo, es su responsabilidad comprobar que este mensaje o sus archivos adjuntos no contengan virus informáticos, y en caso que los tuvieran eliminarlos.






Re: Fixture Scripts - Invoking WrapperFactory.wrap() in actions

Posted by GESCONSULTOR - Óscar Bou <o....@gesconsultor.com>.
Hi Dan.

I’m not sure how to use the SudoService inside a FixtureScript.

I have the following:


public class DemoWithAllRecordsFixture extends FixtureScript {

    public DemoWithAllRecordsFixture() {
        this.withDiscoverability(Discoverability.DISCOVERABLE);
    }

    @Override
    protected void execute(
            final ExecutionContext executionContext) {

        executionContext.executeChild(this, new ExcelInheritedConditionsSNPGenotypeFixture());
        executionContext.executeChild(this, new ExcelDrugsSNPGenotypeFixture());
        executionContext.executeChild(this, new ExcelTraitsSNPGenotypeFixture());

    }

The ExcelInheritedConditionsSNPGenotypeFixture contains many wrapped action invocations, so the following exception is thrown:

Caused by: org.apache.isis.applib.services.wrapper.HiddenException: Reason: Could not locate application user for initialisation. Identifier: com.tellmegen.domain.model.inheritedconditions.InheritedCondition#upsertSNPGenotype(java.lang.Integer,com.tellmegen.domain.model.AppliesToSex,java.lang.String,java.lang.String,com.tellmegen.domain.model.inheritedconditions.InheritedConditionHeredity,com.tellmegen.domain.model.inheritedconditions.InheritedConditionPhenotype,com.tellmegen.domain.model.inheritedconditions.InheritedConditionStatus,java.lang.String,java.lang.String)
	at org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.toException(DomainObjectInvocationHandler.java:732)
	at org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.notifyListenersAndVetoIfRequired(DomainObjectInvocationHandler.java:700)
	at org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.checkVisibility(DomainObjectInvocationHandler.java:682)
	at org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.handleActionMethod(DomainObjectInvocationHandler.java:607)
	at org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.invoke(DomainObjectInvocationHandler.java:263)
	at org.apache.isis.core.wrapper.proxy.ProxyInstantiatorForJavassist$1.invoke(ProxyInstantiatorForJavassist.java:72)
	at com.tellmegen.domain.model.inheritedconditions.InheritedCondition_$$_jvstcc_7.upsertSNPGenotype(InheritedCondition_$$_jvstcc_7.java)
	at com.tellmegen.domain.model.importing.ImportInheritedConditionSNPGenotype.saveToDatabase(ImportInheritedConditionSNPGenotype.java:244)
	at com.tellmegen.domain.model.importing.ImportInheritedConditionsSNPGenotypeService.importInheritedConditionsSNPGenotypes(ImportInheritedConditionsSNPGenotypeService.java:38)
	at com.tellmegen.fixture.model.inheritedconditionsnpgenotype.ExcelInheritedConditionsSNPGenotypeFixture.execute(ExcelInheritedConditionsSNPGenotypeFixture.java:24)
	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:34)
	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)


If try to use them inside a SudoService.sudo(…) call I don’t have access to the “executionContext” (it’s private).

So basically, I would need to make the “executionContext” field of FixtureScript “public”, or being able to use SudoService to override the User globally, without needing to use a “Callable” construct.

Do you agree?

Thanks,

Oscar





> El 18/4/2015, a las 12:35, GESCONSULTOR <o....@gesconsultor.com> escribió:
> 
> 
> 
> Many thanks, Dan.
> 
> I'll try it!
> 
>> El 18/4/2015, a las 12:26, Dan Haywood <da...@haywood-associates.co.uk> 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 <ob...@qualitec.es> 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
>>> SelectChannelConnector@0.0.0.0:8080


Óscar Bou Bou
Responsable de Producto
Auditor Jefe de Certificación ISO 27001 en BSI
CISA, CRISC, APMG ISO 20000, ITIL-F

   902 900 231 / 620 267 520
   http://www.twitter.com/oscarbou <http://www.twitter.com/oscarbou>

   http://es.linkedin.com/in/oscarbou <http://es.linkedin.com/in/oscarbou>

   http://www.GesConsultor.com <http://www.gesconsultor.com/> 




Este mensaje y los ficheros anexos son confidenciales. Los mismos contienen información reservada que no puede ser difundida. Si usted ha recibido este correo por error, tenga la amabilidad de eliminarlo de su sistema y avisar al remitente mediante reenvío a su dirección electrónica; no deberá copiar el mensaje ni divulgar su contenido a ninguna persona.
Su dirección de correo electrónico junto a sus datos personales constan en un fichero titularidad de Gesdatos Software, S.L. cuya finalidad es la de mantener el contacto con Ud. Si quiere saber de qué información disponemos de Ud., modificarla, y en su caso, cancelarla, puede hacerlo enviando un escrito al efecto, acompañado de una fotocopia de su D.N.I. a la siguiente dirección: Gesdatos Software, S.L. , Paseo de la Castellana, 153 bajo - 28046 (Madrid), y Avda. Cortes Valencianas num. 50, 1ºC - 46015 (Valencia). Asimismo, es su responsabilidad comprobar que este mensaje o sus archivos adjuntos no contengan virus informáticos, y en caso que los tuvieran eliminarlos.






Re: Fixture Scripts - Invoking WrapperFactory.wrap() in actions

Posted by GESCONSULTOR <o....@gesconsultor.com>.

Many thanks, Dan.

I'll try it!

> El 18/4/2015, a las 12:26, Dan Haywood <da...@haywood-associates.co.uk> 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 <ob...@qualitec.es> 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
>> SelectChannelConnector@0.0.0.0:8080

Re: Fixture Scripts - Invoking WrapperFactory.wrap() in actions

Posted by Dan Haywood <da...@haywood-associates.co.uk>.
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 <ob...@qualitec.es> 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
> SelectChannelConnector@0.0.0.0:8080