Return-Path: X-Original-To: apmail-isis-users-archive@www.apache.org Delivered-To: apmail-isis-users-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9761810CEB for ; Mon, 3 Feb 2014 15:34:58 +0000 (UTC) Received: (qmail 96926 invoked by uid 500); 3 Feb 2014 15:34:58 -0000 Delivered-To: apmail-isis-users-archive@isis.apache.org Received: (qmail 95880 invoked by uid 500); 3 Feb 2014 15:34:54 -0000 Mailing-List: contact users-help@isis.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: users@isis.apache.org Delivered-To: mailing list users@isis.apache.org Received: (qmail 95871 invoked by uid 99); 3 Feb 2014 15:34:53 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 03 Feb 2014 15:34:53 +0000 X-ASF-Spam-Status: No, hits=1.5 required=5.0 tests=HTML_MESSAGE,LOTS_OF_MONEY,RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: local policy includes SPF record at spf.trusted-forwarder.org) Received: from [209.85.216.52] (HELO mail-qa0-f52.google.com) (209.85.216.52) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 03 Feb 2014 15:34:44 +0000 Received: by mail-qa0-f52.google.com with SMTP id j15so10037209qaq.25 for ; Mon, 03 Feb 2014 07:34:22 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:content-type; bh=3LkQaY+E0zjXhznRBX8V7jFqDRBRVPzje4YJtP5hDsQ=; b=dfqy9aW1sXjUCDNboWZ+Rn9fDWarOukkvjJlHtCqXq8Y6vdt3+C6NeZgLyZDpZFSBe DceSraLPGjj8HZWcoosNt7r5AGrJ6XH9S32tdqADTDhtdge4xaGtJIkW2xriA5Z0Mndy dAsD66tX6/OWGkJEJGLAvSeY08HmIWEgh5Lp/99NuuCQTboyWjKs290/kw8VynGoukuX xs2bSspNvHGY9af/k0PqVrTu8cO+txblJhu1Uma/BWq+k3ziVH8DG8ZB+GiBefgWsPjw 3gG+HjULafb4Wu/J9iQse24m9dGtFtzgiJAMDOI9kYlYamyVbw4PZZFupalpDO6LFrSK k6FA== X-Gm-Message-State: ALoCoQnpXAI6MkBEx1hcqyK3hgHeXIjt/5j1X4luM7QgbIQ3nigPVa+1mv/ho6G31NF7kYv78RGa X-Received: by 10.229.193.136 with SMTP id du8mr23840934qcb.11.1391441662339; Mon, 03 Feb 2014 07:34:22 -0800 (PST) MIME-Version: 1.0 Received: by 10.140.37.83 with HTTP; Mon, 3 Feb 2014 07:34:01 -0800 (PST) X-Originating-IP: [86.186.155.41] In-Reply-To: <3F9C6534-7837-4ACA-9C0B-07D42F57E4E4@gesconsultor.com> References: <6B6A5CBC-FE8F-4259-A152-5ED932F9EA38@gesconsultor.com> <8F5CDD6C-6AAA-47F0-964A-16F0F1EBAF7E@gesconsultor.com> <3F9C6534-7837-4ACA-9C0B-07D42F57E4E4@gesconsultor.com> From: Dan Haywood Date: Mon, 3 Feb 2014 15:34:01 +0000 Message-ID: Subject: Re: JRebel support To: users Content-Type: multipart/related; boundary=001a11c24518047bd804f1824267 X-Virus-Checked: Checked by ClamAV on apache.org --001a11c24518047bd804f1824267 Content-Type: multipart/alternative; boundary=001a11c24518047bd604f1824266 --001a11c24518047bd604f1824266 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi Oscar, Hmm. There's a couple of things to remark on here. 1. The JRebel integration does still require the DN enhancement to be done first, which basically means running the DN enhancer automatically, or manually. 2. What I've noticed is that, from JRebel's point of view, the bytecode changes twice: (a) initially it is recompiled by Eclipse, then (b) the DN enhancer runs. This causes the plugin to be fired twice. 3. Assuming that the plugin sees the enhanced bytecode when the app is initially loaded, this byteode is then cached. So even if the plugin is given the unenhanced bytecode (ie at step 2(a)), it will still emit valid bytecode to JRebel. 4. From what I've observed, JRebel seems to eagerly pick up the first bytecode change (by Eclipse)... this causes the plugin to emit the cached bytecode. But, when you interact with the app, this causes JRebel to lazily pick up the bytecode as enhanced by DN. So it oughtn't to be possible when using JRebel and the plugin for there ever to be unenhanced bytecode (assuming it was all enhanced initially). You could try upping the loggingLevel to DEBUG: -Disis-jrebel-plugin.loggingLevel=3Ddebug and see if it provides any further clues. ~~~ In terms of your stack trace: 5. I wonder whether that exception really is an enhancement issue. The line failing says: Cannot instantiate abstract class. at com.xms.framework.api.domain.model.isis.AbstractMultiTenantUnnamedEnti ty.jdoNewInstance(AbstractMultiTenantUnnamedEntity.java) which looks like a rather odd thing for the framework to attempt. 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. Is it possible to strip back the example a bit, try something simpler in the first case? Thx Dan On 3 February 2014 15:15, GESCONSULTOR - =D3scar Bou wrote: > > Hi again, Dan. > > I've configured it in our project, and updated to the latest trunk commit= . > > An exception is thrown when executing a fixture for loading demo data. > This kind of exception is an old friend, as it's commonly due to a > un-enhanced class. > > ---- > > > > > at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) > 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.reflect.InvocationTargetException > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java= :39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorI= mpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at > org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListener= Interface.java:258) > ... 35 more > Caused by: javax.jdo.JDOFatalInternalException: Cannot instantiate > abstract class. > at > com.xms.framework.api.domain.model.isis.AbstractMultiTenantUnnamedEntity.= jdoNewInstance(AbstractMultiTenantUnnamedEntity.java) > at > org.datanucleus.state.JDOStateManager.saveFields(JDOStateManager.java:693= ) > at > org.datanucleus.state.JDOStateManager.initialiseForPersistentNew(JDOState= Manager.java:437) > at > org.apache.isis.objectstore.jdo.datanucleus.JDOStateManagerForIsis.initia= liseForPersistentNew(JDOStateManagerForIsis.java:86) > at > org.datanucleus.state.ObjectProviderFactoryImpl.newForPersistentNew(Objec= tProviderFactoryImpl.java:232) > at > org.datanucleus.ExecutionContextImpl.newObjectProviderForPersistentNew(Ex= ecutionContextImpl.java:1415) > at > org.datanucleus.ExecutionContextImpl.persistObjectInternal(ExecutionConte= xtImpl.java:2219) > at > org.datanucleus.ExecutionContextImpl.persistObjectWork(ExecutionContextIm= pl.java:2066) > at > org.datanucleus.ExecutionContextImpl.persistObject(ExecutionContextImpl.j= ava:1914) > at > org.datanucleus.api.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersis= tenceManager.java:727) > at > org.datanucleus.api.jdo.JDOPersistenceManager.makePersistent(JDOPersisten= ceManager.java:752) > at > org.apache.isis.objectstore.jdo.datanucleus.persistence.commands.DataNucl= eusCreateObjectCommand.execute(DataNucleusCreateObjectCommand.java:54) > at > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore.execut= eCommands(DataNucleusObjectStore.java:361) > at > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore.execut= e(DataNucleusObjectStore.java:355) > at > org.apache.isis.core.runtime.system.transaction.IsisTransaction.doFlush(I= sisTransaction.java:409) > at > org.apache.isis.core.runtime.system.transaction.IsisTransaction.flush(Isi= sTransaction.java:358) > at > org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.fl= ushTransaction(IsisTransactionManager.java:311) > at > org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSessi= on$7.flush(RuntimeContextFromSession.java:221) > at > org.apache.isis.core.metamodel.services.container.DomainObjectContainerDe= fault.flush(DomainObjectContainerDefault.java:229) > at > com.xms.framework.api.domain.model.isis.AbstractXMSDomainObjectRepository= AndFactory.persist(AbstractXMSDomainObjectRepositoryAndFactory.java:58) > at > com.xms.framework.measurement.domain.model.measure.BaseMeasures.createBas= eMeasureAlienVault(BaseMeasures.java:95) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java= :39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorI= mpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at > org.apache.isis.core.progmodel.facets.actions.invoke.ActionInvocationFace= tViaMethod.invoke(ActionInvocationFacetViaMethod.java:172) > at > org.apache.isis.core.runtime.transaction.facets.ActionInvocationFacetWrap= Transaction$1.execute(ActionInvocationFacetWrapTransaction.java:57) > at > org.apache.isis.core.runtime.transaction.facets.ActionInvocationFacetWrap= Transaction$1.execute(ActionInvocationFacetWrapTransaction.java:54) > at > org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.ex= ecuteWithinTransaction(IsisTransactionManager.java:223) > at > org.apache.isis.core.runtime.transaction.facets.ActionInvocationFacetWrap= Transaction.invoke(ActionInvocationFacetWrapTransaction.java:54) > at > org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionImpl.execu= te(ObjectActionImpl.java:342) > at > org.apache.isis.core.wrapper.internal.DomainObjectInvocationHandler.handl= eActionMethod(DomainObjectInvocationHandler.java:509) > at > org.apache.isis.core.wrapper.internal.DomainObjectInvocationHandler.invok= e(DomainObjectInvocationHandler.java:236) > at > org.apache.isis.core.wrapper.internal.InvocationHandlerMethodInterceptor.= intercept(InvocationHandlerMethodInterceptor.java:37) > at > com.xms.framework.measurement.domain.model.measure.BaseMeasures$$Enhancer= ByCGLIB$$5b26939b.createBaseMeasureAlienVault() > at > com.xms.framework.measurement.domain.model.measure.BaseMeasures.createBas= eMeasuresFromAlienVaultTemplateCatalog(BaseMeasures.java:172) > at > com.xms.framework.measurement.fixtures.MeasurementFixture.installMeasurem= entFixture(MeasurementFixture.java:46) > at > com.xms.framework.measurement.fixtures.MeasurementFixture.install(Measure= mentFixture.java:34) > at > com.xms.framework.measurement.fixtures.MeasurementFixtureService.installD= emoData(MeasurementFixtureService.java:23) > at > com.xms.framework.continuity.fixtures.BCMFixture.installMeasurementFixtur= e(BCMFixture.java:128) > at > com.xms.framework.continuity.fixtures.BCMFixture.install(BCMFixture.java:= 42) > at > com.xms.framework.continuity.fixtures.BCMFixtureService.installDemoData(B= CMFixtureService.java:28) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java= :39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorI= mpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at > org.apache.isis.core.progmodel.facets.actions.invoke.ActionInvocationFace= tViaMethod.invoke(ActionInvocationFacetViaMethod.java:172) > at > org.apache.isis.core.runtime.transaction.facets.ActionInvocationFacetWrap= Transaction$1.execute(ActionInvocationFacetWrapTransaction.java:57) > at > org.apache.isis.core.runtime.transaction.facets.ActionInvocationFacetWrap= Transaction$1.execute(ActionInvocationFacetWrapTransaction.java:54) > at > org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.ex= ecuteWithinTransaction(IsisTransactionManager.java:223) > at > org.apache.isis.core.runtime.transaction.facets.ActionInvocationFacetWrap= Transaction.invoke(ActionInvocationFacetWrapTransaction.java:54) > at > org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionImpl.execu= te(ObjectActionImpl.java:342) > at > org.apache.isis.viewer.wicket.model.models.ActionModel.executeAction(Acti= onModel.java:434) > at > org.apache.isis.viewer.wicket.model.models.ActionModel.load(ActionModel.j= ava:421) > at > org.apache.isis.viewer.wicket.model.models.ActionModel.load(ActionModel.j= ava:73) > at > org.apache.wicket.model.LoadableDetachableModel.getObject(LoadableDetacha= bleModel.java:121) > at > org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel.executeAc= tionHandlingApplicationExceptions(ActionPanel.java:291) > at > org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel.executeAc= tionOnTargetAndProcessResults(ActionPanel.java:200) > at > org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel.executeAc= tionAndProcessResults(ActionPanel.java:147) > at > org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel.buildGui(= ActionPanel.java:86) > at > org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel.(Ac= tionPanel.java:79) > at > org.apache.isis.viewer.wicket.ui.components.actions.ActionPanelFactory.cr= eateComponent(ActionPanelFactory.java:49) > at > org.apache.isis.viewer.wicket.viewer.registries.components.ComponentFacto= ryRegistryDefault.createComponent(ComponentFactoryRegistryDefault.java:129) > at > org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.ActionLinkFac= toryAbstract$1.onClick(ActionLinkFactoryAbstract.java:104) > at org.apache.wicket.ajax.markup.html.AjaxLink$1.onEvent(AjaxLink.java:86= ) > at > org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:1= 23) > at > org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefa= ultAjaxBehavior.java:626) > ... 40 more > 16:06:12,662 [RequestCycleExtra 597516262@qtp-1626371610-0 WARN ] > ******************************** > 2014-02-03 16:06:15 JRebel: JRebel will clear Wicket property caches > because of the newly added key: 'noMatches'. Have you specified this key = in > Wicket's properties files? > 16:06:16,769 [PropertiesFactory 597516262@qtp-1626371610-0 INFO ] > Loading properties files from > jar:file:/Users/oscarboubou/.m2/repository/com/vaynberg/wicket/select2/wi= cket-select2/2.2.2/wicket-select2-2.2.2.jar!/com/vaynberg/wicket/select2/Ab= stractSelect2Choice.utf8.properties > with loader > org.apache.wicket.resource.UtfPropertiesFilePropertiesLoader@61b52c64 > > > > ---- > > Normally it's solved by going to the class, making a small change (i.e., > pressing intro and deleting the new line) forcing Eclipse to recompile an= d > DN to enhance it again. > I've done that, and after waiting for the enhancer to run, I've gone agai= n > to the wicket interface. > That has "forced" JRebel to reload all classes inheriting from it. Seeing > different kind of entries, including some classes named as > "xxx$$EnhancerByCGLIB$$yyy". > > > 2014-02-03 16:03:48 JRebel: Reloading class > 'com.xms.framework.architecture.domain.model.EnterpriseArchitectureManage= ment'. > 2014-02-03 16:03:48 JRebel: Reloading class > 'com.xms.framework.architecture.domain.model.EnterpriseArchitectureModel'= . > 2014-02-03 16:03:48 JRebel: Reloading class > 'com.xms.framework.architecture.domain.model.TypeOfCost'. > 2014-02-03 16:03:48 JRebel: Reloading class > 'com.xms.framework.architecture.domain.model.valuation.ValuationDimension= sSets'. > 2014-02-03 16:03:48 JRebel: Reloading class > 'com.xms.framework.architecture.domain.model.valuation.InformationAssetPr= operty'. > 2014-02-03 16:03:48 JRebel: Reloading class > 'com.xms.framework.architecture.domain.model.valuation.InformationAssetPr= operty$1'. > 2014-02-03 16:03:48 JRebel: Reloading class > 'com.xms.framework.architecture.domain.model.valuation.InformationSecurit= yProperty'. > 2014-02-03 16:03:48 JRebel: Reinitialized class > 'com.xms.framework.architecture.domain.model.valuation.InformationAssetPr= operty$1'. > 2014-02-03 16:03:48 JRebel: Reloading class > 'com.xms.framework.architecture.domain.model.valuation.InformationAssetPr= operty$2'. > 2014-02-03 16:03:48 JRebel: Reinitialized class > 'com.xms.framework.architecture.domain.model.valuation.InformationAssetPr= operty$2'. > .... > 2014-02-03 16:04:21 JRebel: Reloading class > 'com.xms.framework.risk.domain.model.continuity.application.DataObjectBCM= Information'. > 2014-02-03 16:04:22 JRebel: Reloading class > 'com.xms.framework.risk.domain.model.continuity.technology.ArtifactBCMInf= ormation'. > 2014-02-03 16:04:24 JRebel: Reinitialized class > 'com.xms.framework.architecture.domain.model.valuation.ValuationDimension= $$EnhancerByCGLIB$$258191d0'. > 2014-02-03 16:04:25 JRebel: Reinitialized class > 'com.xms.framework.architecture.domain.model.valuation.ValuationDimension= sSet$$EnhancerByCGLIB$$b0eb1417'. > 2014-02-03 16:04:26 JRebel: Reinitialized class > 'com.xms.framework.architecture.domain.model.valuation.ImpactCriterion$$E= nhancerByCGLIB$$206d735a'. > 2014-02-03 16:04:26 JRebel: Reinitialized class > 'com.xms.framework.architecture.domain.model.valuation.ImpactCriteriaSet$= $EnhancerByCGLIB$$7038328c'. > 2014-02-03 16:04:27 JRebel: Reinitialized class > 'com.xms.framework.architecture.domain.model.valuation.ImpactScale$$Enhan= cerByCGLIB$$f6feaeb'. > 2014-02-03 16:04:28 JRebel: Reinitialized class > 'com.xms.framework.architecture.domain.model.valuation.ImpactScales$$Enha= ncerByCGLIB$$5b4eeeca'. > > ------ > > But after reloading all classes, if I execute the action again, exactly > the same initial exception occurs: > > Caused by: javax.jdo.JDOFatalInternalException: Cannot instantiate > abstract class. > at > com.xms.framework.api.domain.model.isis.AbstractMultiTenantUnnamedEntity.= jdoNewInstance(AbstractMultiTenantUnnamedEntity.java) > ... > > > Thanks, > > Oscar > > > > > > > > > El 03/02/2014, a las 08:20, GESCONSULTOR > escribi=F3: > > > Oh! I forgot to change the QuickStart pom! > > Sure that's it. I'll let you know. > > Thanks > > El 03/02/2014, a las 08:12, Dan Haywood > escribi=F3: > > Hi Oscar, > You need to use trunk (1.4.0-SNAPSHOT) rather than 1.3.1; I think that's > the problem. > Let me know > Cheers > Dan > > Sorry to be brief, sent from my phone > On 2 Feb 2014 19:08, "GESCONSULTOR - =D3scar Bou" > wrote: > > > Hi, Dan. > > I'm very excited about the possibility to use the JRebel plugin, as it ca= n > accelerate a lot the workflow. > I've downloaded and configured it, and I'm working over the latest > quickstart archetype. > > I've added 1 new property to the TodoItem entity, and it has not been > showed on the interface. > > These are the detailed steps followed. > > > > > 1. Quickstart prototype. > > I create a new folder and run maven to create a project based on the > latest Isis quickstart: > > mvn archetype:generate -D archetypeGroupId=3Dorg.apache.isis.archety= pe > -D archetypeArtifactId=3Dquickstart_wicket_restful_jdo-archetype -D > archetypeVersion=3D1.3.1 -D groupId=3Dcom.mycompany -D artifactId= =3Dmyapp > -D version=3D1.0-SNAPSHOT -B > > > 2. JRebel configuration. > > I've installed JRebel, and on the JRebel Config Center I've marked the > "dom" and "webapp" projects. to be followed for changes by JRebel. > > I've downloaded from [1] the > danhaywood-isis-jrebel-plugin-1.0.0-SNAPSHOT.jar plugin and copied it on > the lib folder of the "webapp" module. > > I've copied the ToDoApp-no-fixtures-PROTOTYPE.launch on the "webapp" > module to a new ToDoApp-no-fixtures-PROTOTYPE-Rebel.launch file, and adde= d: > > key=3D"org.eclipse.jdt.launching.VM_ARGUMENTS" > value=3D"${jrebel_args} -Drebel.log=3Dfalse > -Drebel.plugins=3D./lib/danhaywood-isis-jrebel-plugin-1.0.0-SNAPSHOT.jar > -Disis-jrebel-plugin.packagePrefix=3Ddom.simple -XX:MaxPermSize=3D128m"/> > > 3. DataNucleus. > > I assume that the "DataNucleus - auto-enhancement" option must be enabled > on the "dom" module. > That originates that, each time the Enhancer is executed (that's after an= y > change on any file on the module) a JRebel dialog asks: > "You are launching a JRebel-enabled application without the JRebel agent. > JRebel will not work without it." > For avoiding that, I've checked the "Don't perform this check again (you > can restore it from preferences)", and have chosen the "Not this time" > option. > > 4. Run the webapp. > > I've launched the newly created Eclipse configuration and navigated to " > http://localhost:8080/wicket/". > I've installed the fixtures. > > 5. Changes in code. > > I add a new field to the ToDoItem entity. The following message appears o= n > Eclipse: > > Class 'xxx' has a new non-sttic field 'newField', it will be null on > existing instances. > > But after refreshing the webapp entity page, the field it's not showed. > I've waited enough time. In fact, the following messages have been logged= : > > 2014-02-02 19:56:40 JRebel: Reloading class 'dom.todo.ToDoItem'. > 19:56:40,515 [Native 1238094722@qtp-1337505800-5 DEBUG] > SELECT > > "A0"."category","A0"."complete","A0"."cost","A0"."description","A0"."dueB= y","A0"."notes","A0"."ownedBy","A0"."subcategory","A0"."version" > FROM "ToDoItem" "A0" WHERE "A0"."id" =3D <11> > 2014-02-02 19:56:40 JRebel: Reloading class 'dom.todo.ToDoItem$Category'. > 2014-02-02 19:56:40 JRebel: Reloading class 'dom.todo.ToDoItem$Category$1= '. > 2014-02-02 19:56:40 JRebel: Reloading class > 'dom.todo.ToDoItem$Subcategory'. > 2014-02-02 19:56:40 JRebel: Reloading class > 'dom.todo.ToDoItem$Subcategory$1'. > 2014-02-02 19:56:40 JRebel: Reinitialized class > 'dom.todo.ToDoItem$Subcategory'. > 2014-02-02 19:56:40 JRebel: Reinitialized class > 'dom.todo.ToDoItem$Category$1'. > 2014-02-02 19:56:40 JRebel: Reloading class 'dom.todo.ToDoItem$Category$2= '. > 2014-02-02 19:56:40 JRebel: Reinitialized class > 'dom.todo.ToDoItem$Category$2'. > 2014-02-02 19:56:40 JRebel: Reloading class 'dom.todo.ToDoItem$Category$3= '. > 2014-02-02 19:56:40 JRebel: Reinitialized class > 'dom.todo.ToDoItem$Category$3'. > 2014-02-02 19:56:40 JRebel: Reinitialized class > 'dom.todo.ToDoItem$Category'. > 19:56:40,697 [Native 1238094722@qtp-1337505800-5 DEBUG] > SELECT 'dom.todo.ToDoItem' AS > > NUCLEUS_TYPE,"A1"."category","A1"."complete","A1"."cost","A1"."descriptio= n","A1"."dueBy","A1"."notes","A1"."ownedBy","A1"."subcategory","A1"."id","A= 1"."version" > FROM "ToDoItemDependencies" "A0" INNER JOIN "ToDoItem" "A1" ON > "A0"."dependentId" =3D "A1"."id" WHERE "A0"."dependingId" =3D <11> > 2014-02-02 19:56:40 JRebel: Reloading class > 'dom.todo.ToDoItem$DependenciesComparator'. > 2014-02-02 19:56:40 JRebel: Reloading class > 'dom.todo.ToDoItem$DependenciesComparator$1'. > 19:56:40,771 [Native 1238094722@qtp-1337505800-5 DEBUG] > SELECT 'dom.todo.ToDoItem' AS > > NUCLEUS_TYPE,"A0"."category","A0"."complete","A0"."cost","A0"."descriptio= n","A0"."dueBy","A0"."notes","A0"."ownedBy","A0"."subcategory","A0"."id","A= 0"."version" > FROM "ToDoItem" "A0" WHERE "A0"."ownedBy" =3D <'sven'> AND "A0"."category= " =3D > <'Professional'> > 19:56:40,789 [Native 1238094722@qtp-1337505800-5 DEBUG] > SELECT "A0"."attachment","A0"."version" FROM "ToDoItem" "A0" WHERE > "A0"."id" =3D <9> > 19:56:40,806 [Native 1238094722@qtp-1337505800-5 DEBUG] > SELECT "A0"."attachment","A0"."version" FROM "ToDoItem" "A0" WHERE > "A0"."id" =3D <10> > 19:56:40,812 [Native 1238094722@qtp-1337505800-5 DEBUG] > SELECT "A0"."attachment","A0"."version" FROM "ToDoItem" "A0" WHERE > "A0"."id" =3D <8> > 19:56:41,351 [ResourceServlet 447422450@qtp-1337505800-2 INFO ] > request: css/application.css > 19:56:41,351 [ResourceServlet 1203999762@qtp-1337505800-0 INFO ] > request: scripts/application.js > 19:56:41,362 [ResourceServlet 1238094722@qtp-1337505800-5 INFO ] > request: images/spinning-icon.gif > > > > On this state, if I press Edit and try to change the ToDoItem description= , > the following exception is logged: > > > > org.mortbay.jetty.bio.SocketConnector$Connection#run(SocketConnector.java= :228) > > > org.mortbay.thread.QueuedThreadPool$PoolThread#run(QueuedThreadPool.java:= 582) > java.lang.NullPointerException > > > org.datanucleus.state.JDOStateManager#setObjectField(JDOStateManager.java= :1843) > dom.todo.ToDoItem#setSubcategory(ToDoItem.java:-1) > > > sun.reflect.NativeMethodAccessorImpl#invoke0(NativeMethodAccessorImpl.jav= a:-2) > > > sun.reflect.NativeMethodAccessorImpl#invoke(NativeMethodAccessorImpl.java= :39) > > > sun.reflect.DelegatingMethodAccessorImpl#invoke(DelegatingMethodAccessorI= mpl.java:25) > java.lang.reflect.Method#invoke(Method.java:597) > > > org.apache.isis.core.commons.lang.MethodExtensions#invoke(MethodExtension= s.java:50) > > > org.apache.isis.core.commons.lang.MethodExtensions#invoke(MethodExtension= s.java:45) > > > org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils#invoke(Ada= pterInvokeUtils.java:44) > > > org.apache.isis.core.progmodel.facets.properties.modify.PropertyClearFace= tViaSetterMethod#clearProperty(PropertyClearFacetViaSetterMethod.java:62) > > > org.apache.isis.core.runtime.transaction.facets.PropertyClearFacetWrapTra= nsaction$1#execute(PropertyClearFacetWrapTransaction.java:55) > > > org.apache.isis.core.runtime.system.transaction.IsisTransactionManager#ex= ecuteWithinTransaction(IsisTransactionManager.java:175) > > > org.apache.isis.core.runtime.transaction.facets.PropertyClearFacetWrapTra= nsaction#clearProperty(PropertyClearFacetWrapTransaction.java:52) > > > org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationImp= l#clearValue(OneToOneAssociationImpl.java:200) > > > org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationImp= l#set(OneToOneAssociationImpl.java:164) > > > org.apache.isis.viewer.wicket.model.models.EntityModel#apply(EntityModel.= java:427) > > > org.apache.isis.viewer.wicket.ui.components.entity.properties.EntityPrope= rtiesForm$2#onSubmit(EntityPropertiesForm.java:365) > org.apache.wicket.markup.html.form.Form#delegateSubmit(Form.java:1253) > org.apache.wicket.markup.html.form.Form#process(Form.java:925) > > > org.apache.isis.viewer.wicket.ui.panels.FormAbstract#process(FormAbstract= .java:118) > org.apache.wicket.markup.html.form.Form#onFormSubmitted(Form.java:771) > org.apache.wicket.markup.html.form.Form#onFormSubmitted(Form.java:704) > > > sun.reflect.NativeMethodAccessorImpl#invoke0(NativeMethodAccessorImpl.jav= a:-2) > > > sun.reflect.NativeMethodAccessorImpl#invoke(NativeMethodAccessorImpl.java= :39) > > > sun.reflect.DelegatingMethodAccessorImpl#invoke(DelegatingMethodAccessorI= mpl.java:25) > java.lang.reflect.Method#invoke(Method.java:597) > > > org.apache.wicket.RequestListenerInterface#internalInvoke(RequestListener= Interface.java:258) > > > org.apache.wicket.RequestListenerInterface#invoke(RequestListenerInterfac= e.java:216) > > > org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler#in= vokeListener(ListenerInterfaceRequestHandler.java:240) > > > org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler#re= spond(ListenerInterfaceRequestHandler.java:226) > > > org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor#respond(Requ= estCycle.java:861) > > > org.apache.wicket.request.RequestHandlerStack#execute(RequestHandlerStack= .java:64) > org.apache.wicket.request.cycle.RequestCycle#execute(RequestCycle.java:26= 1) > > > org.apache.wicket.request.cycle.RequestCycle#processRequest(RequestCycle.= java:218) > > > org.apache.wicket.request.cycle.RequestCycle#processRequestAndDetach(Requ= estCycle.java:289) > > > org.apache.wicket.protocol.http.WicketFilter#processRequestCycle(WicketFi= lter.java:259) > > > org.apache.wicket.protocol.http.WicketFilter#processRequest(WicketFilter.= java:201) > > > org.apache.wicket.protocol.http.WicketFilter#doFilter(WicketFilter.java:2= 82) > > > org.mortbay.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHand= ler.java:1212) > > > org.apache.shiro.web.servlet.AbstractShiroFilter#executeChain(AbstractShi= roFilter.java:449) > > > org.apache.shiro.web.servlet.AbstractShiroFilter$1#call(AbstractShiroFilt= er.java:365) > > > org.apache.shiro.subject.support.SubjectCallable#doCall(SubjectCallable.j= ava:90) > > > org.apache.shiro.subject.support.SubjectCallable#call(SubjectCallable.jav= a:83) > > > org.apache.shiro.subject.support.DelegatingSubject#execute(DelegatingSubj= ect.java:383) > > > org.apache.shiro.web.servlet.AbstractShiroFilter#doFilterInternal(Abstrac= tShiroFilter.java:362) > > > org.apache.shiro.web.servlet.OncePerRequestFilter#doFilter(OncePerRequest= Filter.java:125) > > > org.mortbay.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHand= ler.java:1212) > org.mortbay.jetty.servlet.ServletHandler#handle(ServletHandler.java:399) > org.mortbay.jetty.security.SecurityHandler#handle(SecurityHandler.java:21= 6) > org.mortbay.jetty.servlet.SessionHandler#handle(SessionHandler.java:182) > org.mortbay.jetty.handler.ContextHandler#__handle(ContextHandler.java:766= ) > org.mortbay.jetty.handler.ContextHandler#handle(ContextHandler.java:-1) > org.mortbay.jetty.webapp.WebAppContext#handle(WebAppContext.java:450) > org.mortbay.jetty.handler.HandlerWrapper#handle(HandlerWrapper.java:152) > org.mortbay.jetty.Server#handle(Server.java:326) > org.mortbay.jetty.HttpConnection#handleRequest(HttpConnection.java:542) > > > org.mortbay.jetty.HttpConnection$RequestHandler#content(HttpConnection.ja= va:945) > org.mortbay.jetty.HttpParser#parseNext(HttpParser.java:756) > org.mortbay.jetty.HttpParser#parseAvailable(HttpParser.java:218) > org.mortbay.jetty.HttpConnection#handle(HttpConnection.java:404) > > > org.mortbay.jetty.bio.SocketConnector$Connection#run(SocketConnector.java= :228) > > > org.mortbay.thread.QueuedThreadPool$PoolThread#run(QueuedThreadPool.java:= 582) > > > [1] https://github.com/danhaywood/isis-jrebel-plugin.git > > > > =D3scar Bou Bou > Responsable de Producto > Auditor Jefe de Certificaci=F3n 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=F3n 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=EDo a su direcci=F3n electr= =F3nica; > no deber=E1 copiar el mensaje ni divulgar su contenido a ninguna persona. > Su direcci=F3n de correo electr=F3nico junto a sus datos personales const= an en > un fichero titularidad de Gesdatos Software, S.L. cuya finalidad es la de > mantener el contacto con Ud. Si quiere saber de qu=E9 informaci=F3n dispo= nemos > de Ud., modificarla, y en su caso, cancelarla, puede hacerlo enviando un > escrito al efecto, acompa=F1ado de una fotocopia de su D.N.I. a la siguie= nte > direcci=F3n: Gesdatos Software, S.L. , Paseo de la Castellana, 153 bajo - > 28046 (Madrid), y Avda. Cortes Valencianas num. 50, 1=BAC - 46015 (Valenc= ia). > Asimismo, es su responsabilidad comprobar que este mensaje o sus archivos > adjuntos no contengan virus inform=E1ticos, y en caso que los tuvieran > eliminarlos. > > > > > > --001a11c24518047bd604f1824266 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
Hi Oscar,
Hmm.

There's a = couple of things to remark on here.

1. The JRebel = integration does still require the DN enhancement to be done first, which b= asically means running the DN enhancer automatically, or manually.
2. What I've noticed is that, from JRebel's point of view, the= bytecode changes twice: (a) initially it is recompiled by Eclipse, then (b= ) the DN enhancer runs. =A0This causes the plugin to be fired twice.
3. Assuming that the plugin sees the enhanced bytecode when the a= pp is initially loaded, this byteode is then cached. =A0So even if the plug= in is given the unenhanced bytecode (ie at step 2(a)), it will still emit v= alid bytecode to JRebel.
4. From what I've observed, JRebel seems to eager= ly pick up the first bytecode change (by Eclipse)... this causes the plugin= to emit the cached bytecode. =A0But, when you interact with the app, this = causes JRebel to lazily pick up the bytecode as enhanced by DN.
=A0
So it oughtn't to be possible when using JRebe= l and the plugin for there ever to be unenhanced bytecode (assuming it was = all enhanced initially).

You could try upping the = loggingLevel to DEBUG:

=A0 =A0 -Disis-jrebel-plugin.loggingLevel=3Ddebug


and see if it provides any further c= lues.

~~~
In terms of your stack trace:<= /div>

5. I wonder whether that exception really is an enhance= ment issue. =A0The line failing says:=A0

Cannot i= nstantiate abstract class.
at com.xms.framework.api.domain.mode= l.isis.AbstractMultiTenantUnnamedEntity.jdoNewInstance(AbstractMultiTenantUnnamedEntity.java)

which looks like a rather odd thing for = the framework to attempt.

6. Those "ValuationDimension$$EnhancerByCGLIB$$258191d0" classes are coming from the WrapperFac= tory, which is probably from integration tests? =A0Not quite sure what the = interaction is there, shouldn't matter, I think, but a bit odd.<= /div>

Is it possible to strip back the example a bit= , try something simpler in the first case?

Thx
Dan




On 3= February 2014 15:15, GESCONSULTOR - =D3scar Bou <o.bou@gesconsultor.= com> wrote:
Hi again, Dan.

I've configured it = in our project, and updated to the latest trunk commit.=A0

An exception is thrown when executing a fixture for loa= ding demo data. This kind of exception is an old friend, as it's common= ly due to a un-enhanced class.=A0

----




at = org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.jetty.bio.SocketConnec= tor$Connection.run(SocketConnector.java:228)
at org.mortbay.thread.QueuedTh= readPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: java.lang.= reflect.InvocationTargetException
= at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAcc= essorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(= DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.in= voke(Method.java:597)
at or= g.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInte= rface.java:258)
... 35 more
Caused by: java= x.jdo.JDOFatalInternalException: Cannot instantiate abstract class.
at com.xms.framework.api.domain.mo= del.isis.AbstractMultiTenantUnnamedEntity.jdoNewInstance(AbstractMultiTenan= tUnnamedEntity.java)
at org.datanucleus.state.JDOSt= ateManager.saveFields(JDOStateManager.java:693)
at org.datanucleus.state.JDOStateManager.initialiseFor= PersistentNew(JDOStateManager.java:437)
at org.apache.isis.objectstore= .jdo.datanucleus.JDOStateManagerForIsis.initialiseForPersistentNew(JDOState= ManagerForIsis.java:86)
at = org.datanucleus.state.ObjectProviderFactoryImpl.newForPersistentNew(ObjectP= roviderFactoryImpl.java:232)
at org.datanucleus.ExecutionCo= ntextImpl.newObjectProviderForPersistentNew(ExecutionContextImpl.java:1415)=
at org.datanucleus.Executi= onContextImpl.persistObjectInternal(ExecutionContextImpl.java:2219)
at org.datanucleus.ExecutionCo= ntextImpl.persistObjectWork(ExecutionContextImpl.java:2066)
at org.datanucleus.ExecutionContextImpl.p= ersistObject(ExecutionContextImpl.java:1914)
at org.datanucleus.api.jdo.JDO= PersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:727)
at org.datanucleus.api.jdo.JDOPer= sistenceManager.makePersistent(JDOPersistenceManager.java:752)
at org.apache.isis.objectstore= .jdo.datanucleus.persistence.commands.DataNucleusCreateObjectCommand.execut= e(DataNucleusCreateObjectCommand.java:54)
at org.apache.isis.objectstore.jdo.datanucleus.DataNucleusOb= jectStore.executeCommands(DataNucleusObjectStore.java:361)
at org.apache.isis.objectstore= .jdo.datanucleus.DataNucleusObjectStore.execute(DataNucleusObjectStore.java= :355)
at org.apache.isis.co= re.runtime.system.transaction.IsisTransaction.doFlush(IsisTransaction.java:= 409)
at org.apache.isis.core.runtim= e.system.transaction.IsisTransaction.flush(IsisTransaction.java:358)
at org.apache.isis.core.runtime.s= ystem.transaction.IsisTransactionManager.flushTransaction(IsisTransactionMa= nager.java:311)
at org.apache.isis.core.runtim= e.persistence.internal.RuntimeContextFromSession$7.flush(RuntimeContextFrom= Session.java:221)
at org.ap= ache.isis.core.metamodel.services.container.DomainObjectContainerDefault.fl= ush(DomainObjectContainerDefault.java:229)
at com.xms.framework.api.domai= n.model.isis.AbstractXMSDomainObjectRepositoryAndFactory.persist(AbstractXM= SDomainObjectRepositoryAndFactory.java:58)
at com.xms.framework.measurement.domain.model.measure.BaseM= easures.createBaseMeasureAlienVault(BaseMeasures.java:95)
at sun.reflect.NativeMethodAcc= essorImpl.invoke0(Native Method)
<= /span>at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorIm= pl.java:39)
at sun.reflect.DelegatingMetho= dAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method= .java:597)
at org.apache.isis.core.progmo= del.facets.actions.invoke.ActionInvocationFacetViaMethod.invoke(ActionInvoc= ationFacetViaMethod.java:172)
at org.apache.isis.core.runtime.transaction.facets.ActionInvocationFacet= WrapTransaction$1.execute(ActionInvocationFacetWrapTransaction.java:57)
at org.apache.isis.core.runtim= e.transaction.facets.ActionInvocationFacetWrapTransaction$1.execute(ActionI= nvocationFacetWrapTransaction.java:54)
at org.apache.isis.core.runtime.system.transaction.IsisTransact= ionManager.executeWithinTransaction(IsisTransactionManager.java:223)
at org.apache.isis.core.runtim= e.transaction.facets.ActionInvocationFacetWrapTransaction.invoke(ActionInvo= cationFacetWrapTransaction.java:54)
at org.apache.isis.core.metamodel.specloader.specimpl.ObjectAction= Impl.execute(ObjectActionImpl.java:342)
at org.apache.isis.core.wrappe= r.internal.DomainObjectInvocationHandler.handleActionMethod(DomainObjectInv= ocationHandler.java:509)
at= org.apache.isis.core.wrapper.internal.DomainObjectInvocationHandler.invoke= (DomainObjectInvocationHandler.java:236)
at org.apache.isis.core.wrappe= r.internal.InvocationHandlerMethodInterceptor.intercept(InvocationHandlerMe= thodInterceptor.java:37)
at= com.xms.framework.measurement.domain.model.measure.BaseMeasures$$EnhancerB= yCGLIB$$5b26939b.createBaseMeasureAlienVault(<generated>)
at com.xms.framework.measureme= nt.domain.model.measure.BaseMeasures.createBaseMeasuresFromAlienVaultTempla= teCatalog(BaseMeasures.java:172)
<= /span>at com.xms.framework.measurement.fixtures.MeasurementFixture.installM= easurementFixture(MeasurementFixture.java:46)
at com.xms.framework.measureme= nt.fixtures.MeasurementFixture.install(MeasurementFixture.java:34)
at com.xms.framework.measurement.fi= xtures.MeasurementFixtureService.installDemoData(MeasurementFixtureService.= java:23)
at com.xms.framework.continuit= y.fixtures.BCMFixture.installMeasurementFixture(BCMFixture.java:128)
at com.xms.framework.continuity.f= ixtures.BCMFixture.install(BCMFixture.java:42)
at com.xms.framework.continuit= y.fixtures.BCMFixtureService.installDemoData(BCMFixtureService.java:28)
= at sun.reflect.NativeMethodAcc= essorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAcc= essorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(= DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.in= voke(Method.java:597)
at or= g.apache.isis.core.progmodel.facets.actions.invoke.ActionInvocationFacetVia= Method.invoke(ActionInvocationFacetViaMethod.java:172)
at org.apache.isis.core.runtim= e.transaction.facets.ActionInvocationFacetWrapTransaction$1.execute(ActionI= nvocationFacetWrapTransaction.java:57)
at org.apache.isis.core.runtime.transaction.facets.ActionInvoca= tionFacetWrapTransaction$1.execute(ActionInvocationFacetWrapTransaction.jav= a:54)
at org.apache.isis.core.runtim= e.system.transaction.IsisTransactionManager.executeWithinTransaction(IsisTr= ansactionManager.java:223)
= at org.apache.isis.core.runtime.transaction.facets.ActionInvocationFacetWra= pTransaction.invoke(ActionInvocationFacetWrapTransaction.java:54)
at org.apache.isis.core.metamo= del.specloader.specimpl.ObjectActionImpl.execute(ObjectActionImpl.java:342)=
at org.apache.isis.viewer.= wicket.model.models.ActionModel.executeAction(ActionModel.java:434)
at org.apache.isis.viewer.wick= et.model.models.ActionModel.load(ActionModel.java:421)
at org.apache.isis.viewer.wicket.model.models.A= ctionModel.load(ActionModel.java:73)
at org.apache.wicket.model.Loa= dableDetachableModel.getObject(LoadableDetachableModel.java:121)
at org.apache.isis.viewer.wicket.ui.c= omponents.actions.ActionPanel.executeActionHandlingApplicationExceptions(Ac= tionPanel.java:291)
at org.apache.isis.viewer.wick= et.ui.components.actions.ActionPanel.executeActionOnTargetAndProcessResults= (ActionPanel.java:200)
at o= rg.apache.isis.viewer.wicket.ui.components.actions.ActionPanel.executeActio= nAndProcessResults(ActionPanel.java:147)
at org.apache.isis.viewer.wick= et.ui.components.actions.ActionPanel.buildGui(ActionPanel.java:86)
at org.apache.isis.viewer.wicket.ui= .components.actions.ActionPanel.<init>(ActionPanel.java:79)
at org.apache.isis.viewer.wick= et.ui.components.actions.ActionPanelFactory.createComponent(ActionPanelFact= ory.java:49)
at org.apache.= isis.viewer.wicket.viewer.registries.components.ComponentFactoryRegistryDef= ault.createComponent(ComponentFactoryRegistryDefault.java:129)
at org.apache.isis.viewer.wick= et.ui.components.widgets.cssmenu.ActionLinkFactoryAbstract$1.onClick(Action= LinkFactoryAbstract.java:104)
at org.apache.wicket.ajax.markup.html.AjaxLink$1.onEvent(AjaxLink.java:8= 6)
at org.apache.wicket.ajax.Ajax= EventBehavior.respond(AjaxEventBehavior.java:123)
at org.apache.wicket.ajax.AbstractDefaultAjaxBehavio= r.onRequest(AbstractDefaultAjaxBehavior.java:626)
... 40 more
16:06:12,662 = =A0[RequestCycleExtra =A0 =A0597516262@qtp-1626371610-0 WARN ] =A0*********= ***********************
2014-02-03 16:06:15 JRebel: JRebel will clear Wi= cket property caches because of the newly added key: 'noMatches'. H= ave you specified this key in Wicket's properties files?
16:06:16,769 =A0[PropertiesFactory =A0 =A0597516262@qtp-1626371610-0 INFO ]= =A0Loading properties files from jar:file:/Users/oscarboubou/.m2/repositor= y/com/vaynberg/wicket/select2/wicket-select2/2.2.2/wicket-select2-2.2.2.jar= !/com/vaynberg/wicket/select2/AbstractSelect2Choice.utf8.properties with lo= ader org.apache.wicket.resource.UtfPropertiesFilePropertiesLoader@61b52c64<= br>


----

Normally it= 's solved by going to the class, making a small change (i.e., pressing = intro and deleting the new line) forcing Eclipse to recompile and DN to enh= ance it again.=A0
I've done that, and after waiting for the enhancer to run, I'v= e gone again to the wicket interface.=A0
That has "forced&qu= ot; JRebel to reload all classes inheriting from it. Seeing different kind = of entries, including some classes named as "xxx$$EnhancerByCGLIB$$yyy= ".

=A0
2014-02-03 16:03:48 JRebel: Reloading cla= ss 'com.xms.framework.architecture.domain.model.EnterpriseArchitectureM= anagement'.
2014-02-03 16:03:48 JRebel: Reloading class 'com.xms= .framework.architecture.domain.model.EnterpriseArchitectureModel'.
2014-02-03 16:03:48 JRebel: Reloading class 'com.xms.framework.architec= ture.domain.model.TypeOfCost'.
2014-02-03 16:03:48 JRebel: Reloading= class 'com.xms.framework.architecture.domain.model.valuation.Valuation= DimensionsSets'.
2014-02-03 16:03:48 JRebel: Reloading class 'com.xms.framework.architec= ture.domain.model.valuation.InformationAssetProperty'.
2014-02-03 16= :03:48 JRebel: Reloading class 'com.xms.framework.architecture.domain.m= odel.valuation.InformationAssetProperty$1'.
2014-02-03 16:03:48 JRebel: Reloading class 'com.xms.framework.architec= ture.domain.model.valuation.InformationSecurityProperty'.
2014-02-03= 16:03:48 JRebel: Reinitialized class 'com.xms.framework.architecture.d= omain.model.valuation.InformationAssetProperty$1'.
2014-02-03 16:03:48 JRebel: Reloading class 'com.xms.framework.architec= ture.domain.model.valuation.InformationAssetProperty$2'.
2014-02-03 = 16:03:48 JRebel: Reinitialized class 'com.xms.framework.architecture.do= main.model.valuation.InformationAssetProperty$2'.
....
2014-02-03 16:04:21 JRebel: Reloading class 'com.xms.fra= mework.risk.domain.model.continuity.application.DataObjectBCMInformation= 9;.
2014-02-03 16:04:22 JRebel: Reloading class 'com.xms.framework.r= isk.domain.model.continuity.technology.ArtifactBCMInformation'.
2014-02-03 16:04:24 JRebel: Reinitialized class 'com.xms.framework.arch= itecture.domain.model.valuation.ValuationDimension$$EnhancerByCGLIB$$258191= d0'.
2014-02-03 16:04:25 JRebel: Reinitialized class 'com.xms.fr= amework.architecture.domain.model.valuation.ValuationDimensionsSet$$Enhance= rByCGLIB$$b0eb1417'.
2014-02-03 16:04:26 JRebel: Reinitialized class 'com.xms.framework.arch= itecture.domain.model.valuation.ImpactCriterion$$EnhancerByCGLIB$$206d735a&= #39;.
2014-02-03 16:04:26 JRebel: Reinitialized class 'com.xms.frame= work.architecture.domain.model.valuation.ImpactCriteriaSet$$EnhancerByCGLIB= $$7038328c'.
2014-02-03 16:04:27 JRebel: Reinitialized class 'com.xms.framework.arch= itecture.domain.model.valuation.ImpactScale$$EnhancerByCGLIB$$f6feaeb'.=
2014-02-03 16:04:28 JRebel: Reinitialized class 'com.xms.framework.= architecture.domain.model.valuation.ImpactScales$$EnhancerByCGLIB$$5b4eeeca= '.

------

But after reloading all= classes, if I execute the action again, exactly the same initial exception= occurs:

Caused by: javax.jdo.JDOFatalInternalException: Cann= ot instantiate abstract class.
at com.xms.framework.api.domai= n.model.isis.AbstractMultiTenantUnnamedEntity.jdoNewInstance(AbstractMultiT= enantUnnamedEntity.java)
...


Thanks,

Oscar








El 03/02/2014, a las 08:20, GESCONSULTOR <o.bou@gesconsultor.com> escrib= i=F3:


Oh! I forgot to change = the QuickStart pom!

Sure that's it. I'll let you know.
Thanks

El 03/02/2014, a las 08:12, Dan H= aywood <dan@haywood-associates.co.uk> escribi=F3:

Hi Oscar,
You need to use trunk (1.4.0-SNAPSHOT) rather than 1.3.1; = I think that's
the problem.
Let me know
Cheers
Dan

S= orry to be brief, sent from my phone
On 2 Feb 2014 19:08, "GESCONSU= LTOR - =D3scar Bou" <o.bou@gesconsultor.com>
wrote:


Hi, Dan.

I'm very ex= cited about the possibility to use the JRebel plugin, as it can
accelera= te a lot the workflow.
I've downloaded and configured it, and I'= m working over the latest
quickstart archetype.

I've added 1 new property to the TodoItem = entity, and it has not been
showed on the interface.

These are th= e detailed steps followed.




1. Quickstart prototype.

I create a new folder and run maven to create a project based on thelatest Isis quickstart:

mvn archetype:generate =A0 =A0 =A0-D archet= ypeGroupId=3Dorg.apache.isis.archetype
=A0 -D archetypeArtifactId=3Dquic= kstart_wicket_restful_jdo-archetype =A0 =A0 -D
archetypeVersion=3D1.3.1 =A0 =A0 -D groupId=3Dcom.mycompany =A0 =A0 -D arti= factId=3Dmyapp
=A0 -D version=3D1.0-SNAPSHOT =A0 =A0 -B


2. JR= ebel configuration.

I've installed JRebel, and on the JRebel Con= fig Center I've marked the
"dom" and "webapp" projects. to be followed for changes= by JRebel.

I've downloaded from [1] the
danhaywood-isis-jreb= el-plugin-1.0.0-SNAPSHOT.jar plugin and copied it on
the lib folder of t= he "webapp" module.

I've copied the ToDoApp-no-fixtures-PROTOTYPE.launch on the "w= ebapp"
module to a new ToDoApp-no-fixtures-PROTOTYPE-Rebel.launch f= ile, and added:

<stringAttribute
=A0 =A0 key=3D"org.eclip= se.jdt.launching.VM_ARGUMENTS"
=A0 =A0 value=3D"${jrebel_args} -Drebel.log=3Dfalse
-Drebel.plugins= =3D./lib/danhaywood-isis-jrebel-plugin-1.0.0-SNAPSHOT.jar
-Disis-jrebel-= plugin.packagePrefix=3Ddom.simple -XX:MaxPermSize=3D128m"/>

= 3. DataNucleus.

I assume that the "DataNucleus - auto-enhancement" option mus= t be enabled
on the "dom" module.
That originates that, eac= h time the Enhancer is executed (that's after any
change on any file= on the module) a JRebel dialog asks:
"You are launching a JRebel-enabled application without the JRebel age= nt.
JRebel will not work without it."
For avoiding that, I'v= e checked the "Don't perform this check again (you
can restore = it from preferences)", and have chosen the "Not this time" option.

4. Run the webapp.

I've launched the newly create= d Eclipse configuration and navigated to "
http://localhost:8080/wicket/"= .
I've installed the fixtures.

5. Changes in code.

I add a = new field to the ToDoItem entity. The following message appears on
Eclip= se:

Class 'xxx' has a new non-sttic field 'newField'= , it will be null on
existing instances.

But after refreshing the webapp entity page, the= field it's not showed.
I've waited enough time. In fact, the fo= llowing messages have been logged:

2014-02-02 19:56:40 JRebel: Reloa= ding class 'dom.todo.ToDoItem'.
19:56:40,515 =A0[Native =A0 =A0 =A0 =A0 =A0 =A0 =A0 1238094722@qtp-13375058= 00-5 DEBUG]
SELECT
"A0"."category","A0"= ."complete","A0"."cost","A0"."= description","A0"."dueBy","A0"."not= es","A0"."ownedBy","A0"."subcategor= y","A0"."version"
FROM "ToDoItem" "A0" WHERE "A0"."id"= ; =3D <11>
2014-02-02 19:56:40 JRebel: Reloading class 'dom.to= do.ToDoItem$Category'.
2014-02-02 19:56:40 JRebel: Reloading class &= #39;dom.todo.ToDoItem$Category$1'.
2014-02-02 19:56:40 JRebel: Reloading class
'dom.todo.ToDoItem$Subca= tegory'.
2014-02-02 19:56:40 JRebel: Reloading class
'dom.tod= o.ToDoItem$Subcategory$1'.
2014-02-02 19:56:40 JRebel: Reinitialized= class
'dom.todo.ToDoItem$Subcategory'.
2014-02-02 19:56:40 JRebel: Rei= nitialized class
'dom.todo.ToDoItem$Category$1'.
2014-02-02 1= 9:56:40 JRebel: Reloading class 'dom.todo.ToDoItem$Category$2'.
2014-02-02 19:56:40 JRebel: Reinitialized class
'dom.todo.ToDoItem$C= ategory$2'.
2014-02-02 19:56:40 JRebel: Reloading class 'dom.tod= o.ToDoItem$Category$3'.
2014-02-02 19:56:40 JRebel: Reinitialized cl= ass
'dom.todo.ToDoItem$Category$3'.
2014-02-02 19:56:40 JRebel: Rein= itialized class
'dom.todo.ToDoItem$Category'.
19:56:40,697 = =A0[Native =A0 =A0 =A0 =A0 =A0 =A0 =A0 1238094722@qtp-1337505800-5 DEBUG]SELECT 'dom.todo.ToDoItem' AS
NUCLEUS_TYPE,"A1"."category","A1"."compl= ete","A1"."cost","A1"."description&= quot;,"A1"."dueBy","A1"."notes",&qu= ot;A1"."ownedBy","A1"."subcategory",&quo= t;A1"."id","A1"."version"
FROM "ToDoItemDependencies" "A0" INNER JOIN "ToDoI= tem" "A1" ON
"A0"."dependentId" =3D &= quot;A1"."id" WHERE "A0"."dependingId" = =3D <11>
2014-02-02 19:56:40 JRebel: Reloading class
'dom.todo.ToDoItem$Depen= denciesComparator'.
2014-02-02 19:56:40 JRebel: Reloading class
&= #39;dom.todo.ToDoItem$DependenciesComparator$1'.
19:56:40,771 =A0[Na= tive =A0 =A0 =A0 =A0 =A0 =A0 =A0 1238094722@qtp-1337505800-5 DEBUG]
SELECT 'dom.todo.ToDoItem' AS
NUCLEUS_TYPE,"A0"."= category","A0"."complete","A0"."cos= t","A0"."description","A0"."dueBy&q= uot;,"A0"."notes","A0"."ownedBy",&q= uot;A0"."subcategory","A0"."id","A0= "."version"
FROM "ToDoItem" "A0" WHERE "A0"."ownedBy= " =3D <'sven'> AND "A0"."category" = =3D
<'Professional'>
19:56:40,789 =A0[Native =A0 =A0 = =A0 =A0 =A0 =A0 =A0 1238094722@qtp-1337505800-5 DEBUG]
SELECT "A0"."attachment","A0"."version&q= uot; FROM "ToDoItem" "A0" WHERE
"A0"."= ;id" =3D <9>
19:56:40,806 =A0[Native =A0 =A0 =A0 =A0 =A0 =A0 = =A0 1238094722@qtp-1337505800-5 DEBUG]
SELECT "A0"."attachment","A0"."version&q= uot; FROM "ToDoItem" "A0" WHERE
"A0"."= ;id" =3D <10>
19:56:40,812 =A0[Native =A0 =A0 =A0 =A0 =A0 =A0= =A0 1238094722@qtp-1337505800-5 DEBUG]
SELECT "A0"."attachment","A0"."version&q= uot; FROM "ToDoItem" "A0" WHERE
"A0"."= ;id" =3D <8>
19:56:41,351 =A0[ResourceServlet =A0 =A0 =A04474= 22450@qtp-1337505800-2 INFO ]
request: css/application.css
19:56:41,351 =A0[ResourceServlet =A0 =A0 = =A01203999762@qtp-1337505800-0 INFO ]
request: scripts/application.js19:56:41,362 =A0[ResourceServlet =A0 =A0 =A01238094722@qtp-1337505800-5 IN= FO ]
request: images/spinning-icon.gif



On this state, if I press Edit and try to change the ToDoItem d= escription,
the following exception is logged:


org.mortbay.je= tty.bio.SocketConnector$Connection#run(SocketConnector.java:228)

org.mortbay.thread.QueuedThreadPool$PoolThread#run(QueuedThreadPool.java:58= 2)
java.lang.NullPointerException

org.datanucleus.state.JDOStateM= anager#setObjectField(JDOStateManager.java:1843)
dom.todo.ToDoItem#setSu= bcategory(ToDoItem.java:-1)

sun.reflect.NativeMethodAccessorImpl#invoke0(NativeMethodAccessorImpl.j= ava:-2)

sun.reflect.NativeMethodAccessorImpl#invoke(NativeMethodAcce= ssorImpl.java:39)

sun.reflect.DelegatingMethodAccessorImpl#invoke(De= legatingMethodAccessorImpl.java:25)
java.lang.reflect.Method#invoke(Method.java:597)

org.apache.isis.cor= e.commons.lang.MethodExtensions#invoke(MethodExtensions.java:50)

org= .apache.isis.core.commons.lang.MethodExtensions#invoke(MethodExtensions.jav= a:45)

org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils#invoke(A= dapterInvokeUtils.java:44)

org.apache.isis.core.progmodel.facets.pro= perties.modify.PropertyClearFacetViaSetterMethod#clearProperty(PropertyClea= rFacetViaSetterMethod.java:62)

org.apache.isis.core.runtime.transaction.facets.PropertyClearFacetWrapT= ransaction$1#execute(PropertyClearFacetWrapTransaction.java:55)

org.= apache.isis.core.runtime.system.transaction.IsisTransactionManager#executeW= ithinTransaction(IsisTransactionManager.java:175)

org.apache.isis.core.runtime.transaction.facets.PropertyClearFacetWrapT= ransaction#clearProperty(PropertyClearFacetWrapTransaction.java:52)

= org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationImpl#= clearValue(OneToOneAssociationImpl.java:200)

org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationI= mpl#set(OneToOneAssociationImpl.java:164)

org.apache.isis.viewer.wic= ket.model.models.EntityModel#apply(EntityModel.java:427)

org.apache.= isis.viewer.wicket.ui.components.entity.properties.EntityPropertiesForm$2#o= nSubmit(EntityPropertiesForm.java:365)
org.apache.wicket.markup.html.form.Form#delegateSubmit(Form.java:1253)
o= rg.apache.wicket.markup.html.form.Form#process(Form.java:925)

org.ap= ache.isis.viewer.wicket.ui.panels.FormAbstract#process(FormAbstract.java:11= 8)
org.apache.wicket.markup.html.form.Form#onFormSubmitted(Form.java:771)
o= rg.apache.wicket.markup.html.form.Form#onFormSubmitted(Form.java:704)
sun.reflect.NativeMethodAccessorImpl#invoke0(NativeMethodAccessorImpl.jav= a:-2)

sun.reflect.NativeMethodAccessorImpl#invoke(NativeMethodAccessorImpl.ja= va:39)

sun.reflect.DelegatingMethodAccessorImpl#invoke(DelegatingMet= hodAccessorImpl.java:25)
java.lang.reflect.Method#invoke(Method.java:597= )

org.apache.wicket.RequestListenerInterface#internalInvoke(RequestListen= erInterface.java:258)

org.apache.wicket.RequestListenerInterface#inv= oke(RequestListenerInterface.java:216)

org.apache.wicket.core.reques= t.handler.ListenerInterfaceRequestHandler#invokeListener(ListenerInterfaceR= equestHandler.java:240)

org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler#= respond(ListenerInterfaceRequestHandler.java:226)

org.apache.wicket.= request.cycle.RequestCycle$HandlerExecutor#respond(RequestCycle.java:861)
org.apache.wicket.request.RequestHandlerStack#execute(RequestHandlerSta= ck.java:64)
org.apache.wicket.request.cycle.RequestCycle#execute(Request= Cycle.java:261)

org.apache.wicket.request.cycle.RequestCycle#process= Request(RequestCycle.java:218)

org.apache.wicket.request.cycle.RequestCycle#processRequestAndDetach(Re= questCycle.java:289)

org.apache.wicket.protocol.http.WicketFilter#pr= ocessRequestCycle(WicketFilter.java:259)

org.apache.wicket.protocol.= http.WicketFilter#processRequest(WicketFilter.java:201)

org.apache.wicket.protocol.http.WicketFilter#doFilter(WicketFilter.java= :282)

org.mortbay.jetty.servlet.ServletHandler$CachedChain#doFilter(= ServletHandler.java:1212)

org.apache.shiro.web.servlet.AbstractShiro= Filter#executeChain(AbstractShiroFilter.java:449)

org.apache.shiro.web.servlet.AbstractShiroFilter$1#call(AbstractShiroFi= lter.java:365)

org.apache.shiro.subject.support.SubjectCallable#doCa= ll(SubjectCallable.java:90)

org.apache.shiro.subject.support.Subject= Callable#call(SubjectCallable.java:83)

org.apache.shiro.subject.support.DelegatingSubject#execute(DelegatingSu= bject.java:383)

org.apache.shiro.web.servlet.AbstractShiroFilter#doF= ilterInternal(AbstractShiroFilter.java:362)

org.apache.shiro.web.ser= vlet.OncePerRequestFilter#doFilter(OncePerRequestFilter.java:125)

org.mortbay.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHa= ndler.java:1212)
org.mortbay.jetty.servlet.ServletHandler#handle(Servlet= Handler.java:399)
org.mortbay.jetty.security.SecurityHandler#handle(Secu= rityHandler.java:216)
org.mortbay.jetty.servlet.SessionHandler#handle(SessionHandler.java:182)org.mortbay.jetty.handler.ContextHandler#__handle(ContextHandler.java:766)=
org.mortbay.jetty.handler.ContextHandler#handle(ContextHandler.java:-1)=
org.mortbay.jetty.webapp.WebAppContext#handle(WebAppContext.java:450)
or= g.mortbay.jetty.handler.HandlerWrapper#handle(HandlerWrapper.java:152)
o= rg.mortbay.jetty.Server#handle(Server.java:326)
org.mortbay.jetty.HttpCo= nnection#handleRequest(HttpConnection.java:542)

org.mortbay.jetty.HttpConnection$RequestHandler#content(HttpConnection.= java:945)
org.mortbay.jetty.HttpParser#parseNext(HttpParser.java:756)org.mortbay.jetty.HttpParser#parseAvailable(HttpParser.java:218)
org.mo= rtbay.jetty.HttpConnection#handle(HttpConnection.java:404)

org.mortbay.jetty.bio.SocketConnector$Connection#run(SocketConnector.ja= va:228)

org.mortbay.thread.QueuedThreadPool$PoolThread#run(QueuedThr= eadPool.java:582)


[1] https://github.com/danhaywood/isis= -jrebel-plugin.git


=D3scar Bou= Bou
Responsable de Producto
Auditor Jefe de Certificaci=F3n ISO 2700= 1 en BSI
CISA, CRISC, APMG ISO 20000, ITIL-F

=A0=A0=A0902 900 231 / 620 267 520
=A0=A0=A0http://www.twitter.com/oscarbou

<= span style=3D"color:rgb(0,0,0);font-family:Helvetica;font-size:12px;font-st= yle:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;lin= e-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none= ;white-space:normal;word-spacing:0px">=A0=A0
=A0http://es.linkedin.com/in/oscarbou

<= span style=3D"color:rgb(0,0,0);font-family:Helvetica;font-size:12px;font-st= yle:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;lin= e-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none= ;white-space:normal;word-spacing:0px">=A0=A0
=A0http://w= ww.GesConsultor.com=A0



Este mensaje y los ficheros anexos son= confidenciales. Los mismos contienen informaci=F3n reservada que no puede = ser difundida. Si usted ha recibido este correo por error, tenga la amabili= dad de eliminarlo de su sistema y avisar al remitente mediante reenv=EDo a = su direcci=F3n electr=F3nica; no deber=E1 copiar el mensaje ni divulgar su = contenido a ninguna persona.
Su direcci=F3n de correo electr=F3nico junto a su= s 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 d= e qu=E9 informaci=F3n disponemos de Ud., modificarla, y en su caso, cancela= rla, puede hacerlo enviando un escrito al efecto, acompa=F1ado de una fotoc= opia de su D.N.I. a la siguiente direcci=F3n: Gesdatos Software, S.L. ,=A0P= aseo=A0de la=A0Castellana, 153 bajo - 28046 (Madrid), y=A0Avda. Cortes Vale= ncianas num. 50, 1=BAC - 46015 (Valencia). Asimismo, es su responsabilidad = comprobar que este mensaje o sus archivos adjuntos no contengan virus infor= m=E1ticos, y en caso que los tuvieran eliminarlos.






--001a11c24518047bd604f1824266-- --001a11c24518047bd804f1824267--