Hi, Dan.


> OK, I noticed this issue today as well, while demo'ing something to Jeroen.
> Not sure why this didn't show up for me before, but I've just committed
> and pushed a change which hopefully fixes.
> 
> Let me know how you get on...

I've recompiled Isis and now I can add actions, modify their signature, and 
runs perfectly !!! 


El 04/02/2014, a las 01:00, GESCONSULTOR - Óscar Bou <o....@gesconsultor.com> 
escribió:

>> ~~~
>> Whatever, there's definitely something broken with the DN enhancer plugin.
>> But I don't think there's any ticket open on the DataNucleus JIRA for Andy
>> to look into.  My suspicion is that he would want a clearly defined
>> reproducable issue, which I don't know that we have at the moment.
>> 
>> Another avenue might be to see if Andy would provide an in-memory API so
>> that the enhancement can be performed within the JRebel plugin itself.
>> That would then let us eliminate the DN plugin completely.
> 
> 
> I don't have neither a clear case, and sure it's something broken ... Working 
> a bit at least on an Isis project (like Estatio) I'm sure he can find a 
> case...
> 
> The abstract class is in one module, and concrete classes on another. I also 
> suspect that having more than 1 domain module can raise to a higher number of 
> enhancement problems, but since now we could handle them.
> 
> The in-memory API would be perfect, as it would also allow to implement the 
> same solution also on the BDD SystemInitializer (or some other BDD 
> component). 
> 
> That's the main point where we are suffering those DN Enhancer problems. 
> 
> 
> A new programmer joined the team 2 weeks ago. It became productive nearly 
> immediatly, simply writing BDD tests and the entities and actions derived 
> from that. He had no need to see the web UI and I was confident that all was 
> ok. That's Isis :-))
> 
> But the biggest disappointment is the DN Enhancer failures...
> 
> 
>> No, that's fine... and I'm glad that's working for you.
>> 
>> For Isis 2.0 (which I'm starting to think about), was mulling over the idea
>> that this every pojo would always be enhanced in a similar way, so that it
>> can provide access to its Oid and ObjectAdapter, such that it is
>> "self-describing".  Will probably use javassist rather than cglib, though
>> (as I'm using for the new @RequestScoped services).
> 
> 
> Seems interesting... But perhaps "always enhanced" entities would be "harder" 
> to debug? I suspect it can conflict with some common technologies, but not 
> sure...
> For me, using the wrapper is "just enough". 
> 
> 
>>> Or simply due to some misspelling... Because see
>>> that eventOccurrence.class name is misspelled. On the filesystem the first
>>> character is in uppercase: EventOccurrence.class
>>> 
>>> 
>> ...Yes, I think that's more likely.  If you are on Windows, then (because
>> it is case preserving but case insensitive), it'll mask this error.  At any
>> rate, you should fix it.
> 
> 
> But the point is that I'm in Mac, other mates on Windows, and the file is 
> properly spelled (in uppercase). Seems that it's  JRebel or the plugin what 
> is misspelling the class filename? But that's only when initializing... After 
> that phase, all seems to work ok. The misspelling exception was shown for all 
> classes imported by that Drools rules file that was created on the Service 
> initialization. 
> 
>> OK, I noticed this issue today as well, while demo'ing something to Jeroen.
>> Not sure why this didn't show up for me before, but I've just committed
>> and pushed a change which hopefully fixes.
>> 
>> Let me know how you get on...
> 
> I'll recompile and try it again.
> 
> 
>> 
>> PS: one other thing to raise: JRebel seems to be quite slow in loading
>> classes.  But - even though I have rebel.xml set up to just reload the
>> domain classes - it seems to monitor everything (ie all of the Isis classes
>> too), which probably explains the slowness.   The JRebel docs [1] suggest
>> that it is possible to filter using an <include> tag, but it doesn't seem
>> to work for me.  Interesting in knowing how you get on with it.
>> 
>> [1] http://manuals.zeroturnaround.com/jrebel/standalone/config.html#include
> 
> 
> I also noticed that class reloading was also slow... Thanks for the link. 
> I'll play with those options. 
> 
> 
> Thanks again,
> 
> Oscar
> 
> 
> 
> 
> El 04/02/2014, a las 00:17, Dan Haywood <d...@haywood-associates.co.uk> 
> escribió:
> 
>> On 3 February 2014 17:03, GESCONSULTOR - Óscar Bou
>> <o....@gesconsultor.com>wrote:
>> 
>>> 
>>> 
>>> 
>>> We find DN enhancer problems quite a lot (nearly on each BDD execution):
>>> - This one regarding abstract classes.
>>> - Another quite common regarding duplicated fields (jdoXXX fields).
>>> 
>> 
>> 
>>> Both of them are solved by slightly changing the class and forcing Eclipse
>>> to recompile and the DN enhancer to run. So it's an old friend. Be sure I'm
>>> not trying to manually instantiate it.
>>> 
>>> 
>> OK... Jeroen and I see the second, must admit haven't seen the first.
>> 
>> 
>> 
>>> 
>> 
>> 
>>> I've run the enhancer again before executing the webapp and on this last
>>> execution finally seems solved (we have 4-5 "dom" modules, similar to
>>> "estatio-dom" and "estatio-dom-italy", but for different Bounded Contexts,
>>> that must be enhanced "in order" - taking into account dependencies between
>>> them -).
>>> 
>>> 
>> That sounds like quite a hassle.
>> 
>> I wonder if the first issue arises because of these multiple modules ... is
>> the abstract class in one of them, and the concrete class in the other?
>> 
>> Also, I have a theory that the duplicate field error is because the Eclipse
>> DN plugin spawns off the DN enhancer multiple times (each in a separate
>> Java process), and they (incorrectly) end up enhancing all the domain
>> classes on their classpath, not just the code in their module.
>> 
>> Would it be worth (temporarily) merging these modules into a single module,
>> and seeing if that reduces/eliminates the number of errors?
>> 
>> ~~~
>> Whatever, there's definitely something broken with the DN enhancer plugin.
>> But I don't think there's any ticket open on the DataNucleus JIRA for Andy
>> to look into.  My suspicion is that he would want a clearly defined
>> reproducable issue, which I don't know that we have at the moment.
>> 
>> Another avenue might be to see if Andy would provide an in-memory API so
>> that the enhancement can be performed within the JRebel plugin itself.
>> That would then let us eliminate the DN plugin completely.
>> 
>> 
>> 
>>> 
>>> Regarding:
>>> 
>>> 6. Those "ValuationDimension$$EnhancerByCGLIB$$258191d0" classes are
>>> coming from the WrapperFactory, which is probably from integration tests?
>>> Not quite sure what the interaction is there, shouldn't matter, I think,
>>> but a bit odd.
>>> 
>>> 
>>> 
>>> We "abuse" the original intention of the WrapperFactory.
>>> We've nearly standarized that, when an action is invoked from another
>>> action in the domain, it will always be "wrapped".
>>> That way, we can apply the same business logic restrictions applied to
>>> users to the interactions between Domain Entities at the Domain Level.
>>> When that's not possible (mainly due to always-hidden or always-disabled
>>> properties, and they have a modifyXXX method) we directly call the
>>> modifyXXX or simply remove the "wrap" and make a comment justifying it.
>>> 
>>> We've found it really useful for detecting nulls passed as parameters, or
>>> values that didn't comply with the "autoComplete" or "choices"
>>> restrictions, on BDD tests.
>>> 
>>> I know it was not originally intented for that, but is  that "conceptually
>>> wrong"?
>>> 
>>> 
>> No, that's fine... and I'm glad that's working for you.
>> 
>> For Isis 2.0 (which I'm starting to think about), was mulling over the idea
>> that this every pojo would always be enhanced in a similar way, so that it
>> can provide access to its Oid and ObjectAdapter, such that it is
>> "self-describing".  Will probably use javassist rather than cglib, though
>> (as I'm using for the new @RequestScoped services).
>> 
>> 
>> 
>> 
>>> ----
>>> 
>>> I've just seen that there are some exceptions when initializing the webapp.
>>> 
>>> Seems they are happening because when initializing a Domain Service, those
>>> classes are loaded and, perhaps, the "environment" has not been yet
>>> properly initialized by JRebel. Is it possible?
>>> 
>>> 
>> Don't think so...
>> 
>> 
>> 
>>> Or simply due to some misspelling... Because see
>>> that eventOccurrence.class name is misspelled. On the filesystem the first
>>> character is in uppercase: EventOccurrence.class
>>> 
>>> 
>> ...Yes, I think that's more likely.  If you are on Windows, then (because
>> it is case preserving but case insensitive), it'll mask this error.  At any
>> rate, you should fix it.
>> 
>> 
>> 
>> 
>>> 
>>> at org.apache.isis.core.webserver.WebServer.run(WebServer.java:92)
>>> at org.apache.isis.core.webserver.WebServer.main(WebServer.java:68)
>>> at org.apache.isis.WebServer.main(WebServer.java:25)
>>> java.lang.RuntimeException: cannot find
>>> com.xms.framework.risk.domain.model.materialization.eventOccurrence:
>>> com.xms.framework.risk.domain.model.materialization.EventOccurrence found
>>> in com/xms/framework/risk/domain/model/materialization/eventOccurrence.class
>>> at
>>> org.zeroturnaround.bundled.javassist.CtClassType.getClassFile2(JRebel:194)
>>> at
>>> org.zeroturnaround.bundled.javassist.CtClassType.getAnnotations(JRebel:541)
>>> at
>>> org.zeroturnaround.bundled.javassist.CtClassType.getAnnotations(JRebel:526)
>>> at
>>> com.danhaywood.isis.tool.jrebelplugin.IsisJRebelPlugin.isPersistenceCapable(
>>> IsisJRebelPlugin.java:362)
>>> at com.danhaywood.isis.tool.jrebelplugin.IsisJRebelPlugin.access$700(
>>> IsisJRebelPlugin.java:50)
>>> at
>>> com.danhaywood.isis.tool.jrebelplugin.IsisJRebelPlugin$2.processSafely(
>>> IsisJRebelPlugin.java:242)
>>> at com.danhaywood.isis.tool.jrebelplugin.IsisJRebelPlugin$2.process(
>>> IsisJRebelPlugin.java:198)
>>> at com.zeroturnaround.javarebel.xU.a(JRebel:257)
>>> at com.zeroturnaround.javarebel.xU.a(JRebel:246)
>>> at com.zeroturnaround.javarebel.xU.a(JRebel:218)
>>> at
>>> com.zeroturnaround.javarebel.SDKIntegrationImpl.runBytecodeProcessors(JRebel:120)
>>> at com.zeroturnaround.javarebel.xE.transform(JRebel:50)
>>> at java.lang.ClassLoader.defineClass(ClassLoader.java)
>>> at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(
>>> DelegatingMethodAccessorImpl.java:25)
>>> at java.lang.reflect.Method.invoke(Method.java:597)
>>> at com.zeroturnaround.javarebel.xr.defineRebelClass(JRebel:168)
>>> at com.zeroturnaround.javarebel.Bq.a(JRebel:638)
>>> at com.zeroturnaround.javarebel.xt.a(JRebel:261)
>>> at com.zeroturnaround.javarebel.xb.a(JRebel:174)
>>> at com.zeroturnaround.javarebel.xt.loadReloadableClass(JRebel:319)
>>> at
>>> com.zeroturnaround.javarebel.SDKIntegrationImpl.findReloadableClass(JRebel:85)
>>> at com.zeroturnaround.javarebel.xJ.findReloadableClass(JRebel:16)
>>> at java.net.URLClassLoader.findClass(URLClassLoader.java)
>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>>> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
>>> 
>>> -----
>>> 
>>> 
>>> As this is an IT Monitoring  service, it's not needed for debugging with
>>> JRebel. Simply after removing it, I can add a field and the webapp updates
>>> it !
>>> 
>>> After that, I've added a simple action to update the value of the newly
>>> created field. When trying to reload the entity page, the following
>>> exception is thrown:
>>> 
>>> at org.mortbay.jetty.bio.SocketConnector$Connection.run(
>>> SocketConnector.java:228)
>>> at org.mortbay.thread.QueuedThreadPool$PoolThread.run(
>>> QueuedThreadPool.java:582)
>>> Caused by: java.lang.NullPointerException
>>> at org.apache.isis.viewer.wicket.model.mementos.ActionMemento.<init>(
>>> ActionMemento.java:53)
>>> at org.apache.isis.viewer.wicket.model.mementos.ActionMemento.<init>(
>>> ActionMemento.java:45)
>>> at
>>> org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento$Functions$4.apply(
>>> ObjectAdapterMemento.java:396)
>>> 
>> 
>> 
>> OK, I noticed this issue today as well, while demo'ing something to Jeroen.
>> Not sure why this didn't show up for me before, but I've just committed
>> and pushed a change which hopefully fixes.
>> 
>> Let me know how you get on...
>> 
>> Dan
>> 
>> 
>> PS: one other thing to raise: JRebel seems to be quite slow in loading
>> classes.  But - even though I have rebel.xml set up to just reload the
>> domain classes - it seems to monitor everything (ie all of the Isis classes
>> too), which probably explains the slowness.   The JRebel docs [1] suggest
>> that it is possible to filter using an <include> tag, but it doesn't seem
>> to work for me.  Interesting in knowing how you get on with it.
>> 
>> [1] http://manuals.zeroturnaround.com/jrebel/standalone/config.html#include
> 
> 
> Ó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.
> 
> 
> 
> 
> 





Reply via email to