I saw on your commits a wrapNoExecute(...) or similarly named method.
It would ok. Not sure what you mean by an annotation.... El 07/05/2014, a las 22:14, Dan Haywood <d...@haywood-associates.co.uk> escribió: > > > > >> On 7 May 2014 08:53, GESCONSULTOR - Óscar Bou <o....@gesconsultor.com> wrote: >> >> Hi, Dan. >> >> It makes all sense, but the problem we've found is when the property is >> @Hidden or @Disabled. In those cases, calling this.wrap(domainObject).setXXX >> throws an exception. >> >> If we had business logic implemented inside the modifyXXX method, the only >> way for it to be executed if the property was disabled was to directly call >> this.domainObject.modifyXXX, in order to avoid the Isis exception. > > > In working on ISIS-550 (event bus), I encountered the same issue. If you've > looked at the code in the ISIS-550 branch that I pushed this morning, you'll > see that my solution there was to introduce a "wrappedPolicy" on the > PostsXxxEvent annotations, as a hint to the wrapper to not enforce the > business rule checks. > > But from what you've just said, perhaps it'd be better to promote this to a > full-blown annotation in its own right? > > Or, perhaps even better again, maybe wrap(...) should simply be overloaded to > return either a wrapper that performs business rule checks, or a wrapper that > doesn't? > > Thoughts welcome > > Dan > > > > > >> >> In the test I've seen that the exception was expected, without the object >> being wrapped? That was confusing me... >> >> >> >> @Test >> 77 public void cannotUseModify() throws Exception { >> 78 >> 79 expectedExceptions.expectMessage("Cannot invoke supporting >> method for 'Description'; use only property accessor/mutator"); >> 80 >> 81 // given >> 82 assertThat(toDoItem.getDescription(), is("Buy bread")); >> 83 >> 84 // when >> 85 toDoItem.modifyDescription("Buy bread and butter"); >> 86 >> 87 // then >> 88 assertThat(toDoItem.getDescription(), is("Buy bread")); >> 89 } >> >> >> >> >> >> >> >> >>> El 07/05/2014, a las 00:09, Dan Haywood <d...@haywood-associates.co.uk> >>> escribió: >>> >>> Hi Oscar, >>> >>> I don't think I explained myself well enough. >>> >>> If the domain object has modifyXxx() and setXxx(), then calling: >>> >>> this.wrap(domainObject).setXXX(...); >>> >>> will in fact cause the modifyXxx() method to be called rather than the >>> setXxx() one. That is, the proxy looks for the PropertySetterFacet, and >>> invokes it. When there's a modifyXxx() and a setXxx(), it finds the >>> PropertySetterFacetViaModifyMethod. >>> >>> >>> The idea is that the "set" represents the "essence" of the interaction ("I >>> want to set a property of this object"); the fact that it translates to >>> calling the modifyXxx method is (in a sense) internal to the contract >>> between the framework and the pojo. >>> >>> ~~~ >>> >>> Thus: if you are calling modifyXxx anywhere, you just need to change to >>> call setXxx instead. >>> >>> Hope that makes sense? >>> >>> Dan >>> >>> >>> >>>> On 6 May 2014 10:45, GESCONSULTOR - Óscar Bou <o....@gesconsultor.com> >>>> wrote: >>>> Hi Dan. >>>> >>>> Many thanks for pointing this :-)) Excuse me I didn't read it before. >>>> >>>> >>>> All seems ok for us, but when you say that the modifyXXX cannot be invoked >>>> (as seen on the TodoItem.modifyDescription(...) test in [1]) this can >>>> break some code for us. >>>> >>>> Let me explain. >>>> >>>> We normally use: >>>> this.wrap(domainObject).setXXX(...); >>>> >>>> for setting properties. >>>> >>>> This way, if there's any logic associated when updating the property (by >>>> means of a modifyXXX(...) method), that business logic is always execute >>>> whereever it's called in the domain. >>>> >>>> When we see in the code something like: >>>> >>>> domainObject.setXXX(...); >>>> >>>> we know it's an error, unless there's a comment like this ones: >>>> >>>> // Always Disabled. >>>> domainObject.setXXX(...); >>>> >>>> or >>>> >>>> // Always Hidden. >>>> domainObject.setXXX(...); >>>> >>>> >>>> In those cases, if there's business logic associated, the only way to >>>> execute it is to explicitly invoke it as in: >>>> >>>> domainObject.modifyXXX(...); >>>> >>>> >>>> If that's forbidden now, is there a better way to solve this? >>>> >>>> Many thanks! >>>> >>>> Oscar >>>> >>>> >>>> >>>> >>>> >>>> >>>> [1] >>>> https://git-wip-us.apache.org/repos/asf?p=isis.git;a=blob;f=example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_description.java;h=11e5ae315f1bc33241658999d4178b06d65c1c9b;hb=074d2c4 >>>> >>>> >>>> >>>> El 02/05/2014, a las 19:37, Dan Haywood <d...@haywood-associates.co.uk> >>>> escribió: >>>> >>>> >>>>> Hi all, >>>>> >>>>> Just a quick update on some recent commits [1], [2], [3]. (Oscar, take >>>>> especial note, because of how you are wrap(...) all domain objects). >>>>> >>>>> The implementation of WrapperFactory uses cglib 2.x/asm 3.x, which is >>>>> incompatible with Java 7. Although cglib 3/asm 4 are compatible, in the >>>>> past we've had dependency convergence issues with these very popular >>>>> libraries. >>>>> >>>>> So, I've been working through our dependencies on cglib and looking to >>>>> replace them with javassist (JBoss' library). >>>>> >>>>> Specifically: >>>>> - in our JMock mocking we used to use the cglib-based ClassImposterier; >>>>> I've now implemented a new JavassistImposteriser >>>>> - in WrapperFactoryDefault, this similarly has been changed to use >>>>> Javassist. The original implementation is still available, renamed to >>>>> WrapperFactoryCglib. >>>>> >>>>> We still have dependencies on cglib in ObjectFactoryCglib, but this is not >>>>> used by the JDO Objectstore (it is to support lazy loading of the other >>>>> not-released objectstores). >>>>> >>>>> And there was also a cglib/asm dependency in the Wicket viewer, which I've >>>>> also removed. >>>>> >>>>> ~~~ >>>>> So, this is just a heads-up that as of the next release >>>>> WrapperFactoryDefault is using javassist under the covers. >>>>> >>>>> I also fixed one bug: the idea I had was to disallow calls to >>>>> foo.modifyBar), even if such a method existed; instead only >>>>> foo.setBar(...) >>>>> must be called. This wasn't being checked for correctly. It won't >>>>> impact >>>>> your code if you don't use the modifyXxx() supporting method. >>>>> >>>>> ~~~ >>>>> OK, that's it. Have a good weekend! >>>>> >>>>> Cheers >>>>> Dan >>>>> >>>>> [1] https://issues.apache.org/jira/browse/ISIS-569 >>>>> [2] https://issues.apache.org/jira/browse/ISIS-770 >>>>> [3] https://issues.apache.org/jira/browse/ISIS-772 >>>> >>>> >>>> Ó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 >>>> >>>> <gesdatos-software.gif> http://es.linkedin.com/in/oscarbou >>>> >>>> <blog.png> 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://es.linkedin.com/in/oscarbou >> >> 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. >