Some immediate feedback... you've checked in the target and target-ide
folders; not good practice.  Delete these and use a .gitignore file to
exclude them thenceforth.

I also suggest you delete the project, .classpath files and the .settings
folders and exclude similarly; these are recreated when reimporting the
project into Eclipse.


Also, you don't need the DN enhancer on the webapp module, just the dom
module


When I ran the app I discovered that it is setup to run against mysql;
there is no sample fixture data.  I recommend you use fixture data and an
inmemory database instead (as Estatio does); this will also give you some
sample data for writing integration tests.

As it is, I reconfigured to use an in-memory DB, and tried to add some
sample data to your system.  However, it seems that to create a Party I
need a User, and to create a User I need a Party. So I got stuck.

Can I suggest you do some general tidy-up, remove the old todo classes,
create some packages, and create some fixtures for use in standalone.  You
might also want to port up to 1.4.1,  There may well be an issue with view
models, I don't know; but right now the domain code is a bit of a mess.
 Can I strongly suggest that you focus on getting the core domain sorted,
first, then we can go round the loop with this view model.

Thx
Dan


On 25 March 2014 22:37, james agada <[email protected]> wrote:

> Done it. Actually just the whole code, it is not that big. Here is the git
> repo https://github.com/jamesagada/iserve. Will appreciate the help.
>
>
> On Sun, Mar 23, 2014 at 4:33 PM, Dan Haywood
> <[email protected]>wrote:
>
> > Hi James,
> > can you create a small example on github that reproduces the problem,
> then
> > I can take a look into it in more detail.
> > Thx
> > Dan
> >
> >
> > On 23 March 2014 15:16, james agada <[email protected]> wrote:
> >
> > > 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?
> > > >> > > > >
> > > >> > > > >>
> > > >> > > > >
> > > >> > > > >
> > > >> > > > >
> > > >> > > > >
> > > >> > > > >
> > > >> > > > >
> > > >> > > > >
> > > >> > > > >
> > > >> > > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > > >
> > > >
> > >
> >
>

Reply via email to