Any one with any ideas how to fix this?
On Sat, Mar 22, 2014 at 5:12 PM, james agada <[email protected]> wrote: > OK. I have gone through and identified what is happening. What I don't >> know is why. In the RootOidDefault class, there is this code > > /** >> >> * If specify version sequence, can optionally specify user and/or >> utc timestamp that the oid was changed. This is used for informational >> purposes only. >> >> */ >> >> public RootOidDefault(ObjectSpecId objectSpecId, final String >> identifier, final State state, Long versionSequence, String versionUser, >> Long versionUtcTimestamp) { >> >> this(objectSpecId, identifier, state, >> Version.create(versionSequence, versionUser, versionUtcTimestamp)); >> >> } >> >> >> public RootOidDefault(ObjectSpecId objectSpecId, final String >> identifier, final State state, Version version) { >> >> Ensure.ensureThatArg(objectSpecId, is(not(nullValue()))); >> >> Ensure.ensureThatArg(identifier, is(not(nullValue()))); >> >> Ensure.ensureThatArg(identifier, is(not(IsisMatchers.contains("#"))), >> "identifier '" + identifier + "' contains a '#' symbol"); >> >> Ensure.ensureThatArg(identifier, is(not(IsisMatchers.contains("@"))), >> "identifier '" + identifier + "' contains an '@' symbol"); >> >> Ensure.ensureThatArg(state, is(not(nullValue()))); >> >> >> >> this.objectSpecId = objectSpecId; >> >> this.identifier = identifier; >> >> this.state = state; >> >> this.version = version; >> >> initialized(); >> >> } >> >> > This line > > >> Ensure.ensureThatArg(identifier, is(not(IsisMatchers.contains("@" >> ))), "identifier '" + identifier + "' contains an '@' symbol"); > > raises the IllegalArgumentException whenever the identifier contains "@". > However when the object is from the view DailySalesTotalForParty, the > identifier does indeed contain "@". So now the question is > 1. Why is this particular case excluded? > 2. Why does it arise? I suspect the identifier is provided by DataNucleus. > I am using MySQL - does this have any impact? Can Datanucleus be configured > to not include @ in the identifier? > 3. How should this be fixed? Can't be from the view definition. What > happens if this check is not enforced? > > > On Tue, Mar 18, 2014 at 12:36 AM, Dan Haywood < > [email protected]> wrote: > >> Not completely sure what's happening yet, but I think that Isis is >> expecting an object being loaded by JDO to be a regular entity, and >> instead >> it's getting an SCO (a JDO term, I think it means "secondary class >> object"). This is probably the view object that was defined. >> >> Whatever. >> >> Searching through the code, that "contains an '@' symbol" string appears >> in >> the constructor for RootOidDefault. >> >> Could you put a break point there with a conditional to break only when >> the >> identifier contains an "@" symbol (as per [1]); when you hit the >> breakpoint >> could you then copy out the stacktrace for me. >> >> Thx >> Dan >> >> [1] >> >> https://www.dropbox.com/s/yjt8efefb9tis2d/Screenshot%202014-03-17%2023.34.03.png >> >> >> >> On 17 March 2014 23:27, james agada <[email protected]> wrote: >> >> > I checked the source code and the error seems to be raised from here >> > >> > private <T> T withLogging(PersistenceCapable pojo, Callable<T> >> > runnable, CalledFrom calledFrom) { >> > > if (LOG.isDebugEnabled()) { >> > > LOG.debug(logString(calledFrom, LoggingLocation.ENTRY, >> > pojo)); >> > > } >> > > try { >> > > return runnable.call(); >> > > } catch (Exception e) { >> > > throw new RuntimeException(e); >> > > } finally { >> > > if (LOG.isDebugEnabled()) { >> > > LOG.debug(logString(calledFrom, LoggingLocation.EXIT, >> > pojo)); >> > > } >> > > } >> > > } >> > > >> > > >> > from >> > >> > >> > >> org.apache.isis.objectstore.jdo.datanucleus.persistence.FrameworkSynchronizer.withLogging(FrameworkSynchronizer.java:273) >> > . >> > What I don't know is why and under what circumstances should the >> > RuntimeException be raised. >> > >> > >> > On Mon, Mar 17, 2014 at 9:54 PM, Jeroen van der Wal < >> [email protected] >> > >wrote: >> > >> > > Hi James, >> > > >> > > The invoice summaries in Estatio also contain queries. >> > > >> > > Example: >> > > >> > > >> > >> https://github.com/estatio/estatio/blob/master/dom/src/main/java/org/estatio/dom/invoice/viewmodel/InvoiceSummaryForInvoiceRun.java >> > > Accessed through the repository: >> > > >> > > >> > >> https://github.com/estatio/estatio/blob/master/dom/src/main/java/org/estatio/dom/invoice/viewmodel/InvoiceSummariesForInvoiceRun.java >> > > >> > > Hope this helps. >> > > >> > > Jeroen >> > > On 17 Mar 2014 20:50, "james agada" <[email protected]> wrote: >> > > >> > > > any help? Cant seem to be able to track this down. >> > > > >> > > > >> > > > On Sun, Mar 16, 2014 at 7:52 PM, james agada <[email protected]> >> > > wrote: >> > > > >> > > > > Following the examples in Estatio, I have defined a query model >> like >> > > this >> > > > > >> > > > >> >> > > > >> @javax.jdo.annotations.PersistenceCapable( >> > > > >> >> > > > >> identityType = IdentityType.NONDURABLE, >> > > > >> >> > > > >> table = "DailySalesTotalForParty", >> > > > >> >> > > > >> extensions = { >> > > > >> >> > > > >> @Extension(vendorName = "datanucleus", key = >> > > > >> "view-definition-mysql", >> > > > >> >> > > > >> value = "CREATE VIEW {DailySalesTotalForParty} " + >> > > > >> >> > > > >> "( " + >> > > > >> >> > > > >> " {this.transactionDate}, " + >> > > > >> >> > > > >> " {this.totalAmount} ," + >> > > > >> >> > > > >> " {this.fromPartyReference}, " + >> > > > >> >> > > > >> " {this.transactiontype} " + >> > > > >> >> > > > >> ") AS " + >> > > > >> >> > > > >> "SELECT " + >> > > > >> >> > > > >> " {Transaction.transactionDate} , " + >> > > > >> >> > > > >> >> > > > >> " SUM({Transaction.faceValue}) AS >> totalAmount >> > > ," + >> > > > >> >> > > > >> // " >> \"Transaction\".\"fromParty_Party_ID_OID\" >> > > AS >> > > > >> \"fromParty\", " + >> > > > >> >> > > > >> " {Transaction.fromPartyReference} , " + >> > > > >> >> > > > >> >> > > > >> " {Transaction.transactiontype} " + >> > > > >> >> > > > >> " FROM " + >> > > > >> >> > > > >> " {Transaction} " + >> > > > >> >> > > > >> "GROUP BY " + >> > > > >> >> > > > >> " {Transaction.transactionDate}, " + >> > > > >> >> > > > >> " {Transaction.fromPartyReference}, " + >> > > > >> >> > > > >> " {Transaction.transactiontype} " >> > > > >> >> > > > >> + >> > > > >> >> > > > >> "ORDER BY " + >> > > > >> >> > > > >> " {Transaction.transactionDate}, " + >> > > > >> >> > > > >> " {Transaction.fromPartyReference}, " + >> > > > >> >> > > > >> " {Transaction.transactiontype}" >> > > > >> >> > > > >> ) >> > > > >> >> > > > >> }) >> > > > >> >> > > > >> @javax.jdo.annotations.Inheritance(strategy = >> > > > >> InheritanceStrategy.NEW_TABLE) >> > > > >> >> > > > >> @javax.jdo.annotations.Queries( { >> > > > >> >> > > > >> @javax.jdo.annotations.Query( >> > > > >> >> > > > >> name="DailySalesForParty", language="JDOQL", >> > > > >> >> > > > >> value="SELECT FROM dom.todo.DailySalesTotalForParty WHERE >> > > > >> fromPartyReference == :party ") >> > > > >> >> > > > >> }) >> > > > >> >> > > > >> @Bookmarkable >> > > > >> >> > > > >> @Immutable >> > > > >> >> > > > >> public class DailySalesTotalForParty { ........ >> > > > >> >> > > > > >> > > > > I try to get the records from the view using the Query definition >> in >> > a >> > > > > service as >> > > > > >> > > > >> @Programmatic >> > > > >> >> > > > >> public List<DailySalesTotalForParty> >> > getDailySalesTotalForParty(Party >> > > > p){ >> > > > >> >> > > > >> //get party id >> > > > >> >> > > > >> //get party >> > > > >> >> > > > >> //String party = p.getUniqueRef(); >> > > > >> >> > > > >> //party="2"; >> > > > >> >> > > > >> return allMatches( >> > > > >> >> > > > >> new QueryDefault<DailySalesTotalForParty>( >> > > > DailySalesTotalForParty.class, >> > > > >> >> > > > >> "DailySalesForParty", >> > > > >> >> > > > >> "party",p.getUniqueRef()); >> > > > >> >> > > > >> } >> > > > >> >> > > > > >> > > > > But I end up with this error during runtime >> > > > > >> > > > > [exec] 19:52:40,699 [Native qtp1993764967-32 DEBUG] >> > > > SELECT >> > > > >> 'dom.todo.DailySalesTotalForParty' AS >> > > > >> >> > > > >> > > >> > >> NUCLEUS_TYPE,`A0`.`FROMPARTYREFERENCE`,`A0`.`TOTALAMOUNT`,`A0`.`TRANSACTIONDATE`,`A0`.`TRANSACTIONTYPE` >> > > > >> FROM `DAILYSALESTOTALFORPARTY` `A0` WHERE >> `A0`.`FROMPARTYREFERENCE` >> > = >> > > > <'2'> >> > > > >> >> > > > >> [exec] 19:52:40,778 [RequestCycleExtra qtp1993764967-32 >> > WARN >> > > ] >> > > > >> ******************************** >> > > > >> >> > > > >> [exec] 19:52:40,778 [RequestCycleExtra qtp1993764967-32 >> > WARN >> > > ] >> > > > >> Handling the following exception >> > > > >> >> > > > >> [exec] org.apache.wicket.WicketRuntimeException: Error >> > attaching >> > > > >> this container for rendering: [WebMarkupContainer [Component id = >> > > body]] >> > > > >> >> > > > >> [exec] at >> > > > >> >> > > > >> > > >> > >> org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1693) >> > > > >> >> > > > >> [exec] >> > > > >> >> > > > > .......... >> > > > > >> > > > > [exec] Caused by: java.lang.RuntimeException: >> > > > > java.lang.IllegalArgumentException: identifier >> > > > > >> > 'org.datanucleus.identity.SCOID_org.datanucleus.identity.SCOID@73946e71 >> > > ' >> > > > > contains an '@' symbol >> > > > > >> > > > > [exec] at >> > > > > >> > > > >> > > >> > >> org.apache.isis.objectstore.jdo.datanucleus.persistence.FrameworkSynchronizer.withLogging(FrameworkSynchronizer.java:273) >> > > > > >> > > > > [exec] at >> > > > > >> > > > >> > > >> > >> org.apache.isis.objectstore.jdo.datanucleus.persistence.FrameworkSynchronizer.withLogging(FrameworkSynchronizer.java:282) >> > > > > >> > > > > [exec] at >> > > > > >> > > > >> > > >> > >> org.apache.isis.objectstore.jdo.datanucleus.persistence.FrameworkSynchronizer.postLoadProcessingFor(FrameworkSynchronizer.java:69) >> > > > > >> > > > > [exec] at >> > > > > >> > > > >> > > >> > >> org.apache.isis.objectstore.jdo.datanucleus.persistence.queries.PersistenceQueryProcessorAbstract.loadAdapters(PersistenceQueryProcessorAbstract.java:82) >> > > > > >> > > > > [exec] at >> > > > > >> > > > >> > > >> > >> org.apache.isis.objectstore.jdo.datanucleus.persistence.queries.PersistenceQueryFindUsingApplibQueryProcessor.process(PersistenceQueryFindUsingApplibQueryProcessor.java:64) >> > > > > >> > > > > [exec] at >> > > > > >> > > > >> > > >> > >> org.apache.isis.objectstore.jdo.datanucleus.persistence.queries.PersistenceQueryFindUsingApplibQueryProcessor.process(PersistenceQueryFindUsingApplibQueryProcessor.java:43) >> > > > > >> > > > > [exec] at >> > > > > >> > > > >> > > >> > >> org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore.processPersistenceQuery(DataNucleusObjectStore.java:542) >> > > > > >> > > > > [exec] at >> > > > > >> > > > >> > > >> > >> org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore.loadInstancesAndAdapt(DataNucleusObjectStore.java:537) >> > > > > >> > > > > [exec] at >> > > > > >> > > > >> > > >> > >> org.apache.isis.core.runtime.system.persistence.PersistenceSession$1.execute(PersistenceSession.java:461) >> > > > > >> > > > > [exec] at >> > > > > >> > > > >> > > >> > >> org.apache.isis.core.runtime.system.persistence.PersistenceSession$1.execute(PersistenceSession.java:458) >> > > > > >> > > > > [exec] at >> > > > > >> > > > >> > > >> > >> org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.executeWithinTransaction(IsisTransactionManager.java:217) >> > > > > >> > > > > [exec] at >> > > > > >> > > > >> > > >> > >> org.apache.isis.core.runtime.system.persistence.PersistenceSession.getInstancesFromPersistenceLayer(PersistenceSession.java:458) >> > > > > >> > > > > [exec] at >> > > > > >> > > > >> > > >> > >> org.apache.isis.core.runtime.system.persistence.PersistenceSession.getInstances(PersistenceSession.java:454) >> > > > > >> > > > > [exec] at >> > > > > >> > > > >> > > >> > >> org.apache.isis.core.runtime.system.persistence.PersistenceSession.findInstances(PersistenceSession.java:391) >> > > > > >> > > > > [exec] at >> > > > > >> > > > >> > > >> > >> org.apache.isis.core.runtime.system.persistence.PersistenceSession.findInstances(PersistenceSession.java:386) >> > > > > >> > > > > [exec] at >> > > > > >> > > > >> > > >> > >> org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession$8.allMatchingQuery(RuntimeContextFromSession.java:260) >> > > > > >> > > > > [exec] at >> > > > > >> > > > >> > > >> > >> org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault.allMatches(DomainObjectContainerDefault.java:400) >> > > > > >> > > > > [exec] at >> > > > > >> > > > >> > > >> > >> org.apache.isis.applib.AbstractContainedObject.allMatches(AbstractContainedObject.java:175) >> > > > > >> > > > > [exec] at >> > > > > >> dom.todo.Partytypes.getDailySalesTotalForParty(Partytypes.java:392) >> > > > > >> > > > > [exec] at dom.todo.Party.getDailySales(Party.java:283) >> > > > > >> > > > > What could be wrong? What does >> > > > > >> > org.datanucleus.identity.SCOID_org.datanucleus.identity.SCOID@73946e71 >> > > ' >> > > > > contains an '@' symbol mean? Where do I start to look for the >> > problem? >> > > > > >> > > > >> >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > >> > > >> > >> > >
