Hi Dan
1. I am not sure what has changed apart from the method is now defined as,
public List<Card> listAll() {
return container.allInstances(Card.class);
}
2. The problem is fixed, I only see single statement in console output.
Regards
Dharmesh
-----Original Message-----
From: Dan Haywood [mailto:[email protected]]
Sent: Monday, March 03, 2014 12:26 PM
To: users
Subject: Re: Integration testing
On 3 March 2014 12:09, Chohan, Dharmesh <[email protected]> wrote:
> Hi Dan
>
> 1. The issue has been solved, there was a change in the file.
>
I'm keen to know a bit more about your fix, cos I'm puzzled what happened here
originally Can you provide more info?
2. I have modified the logging.properties but the console ouput is still
> the same.
>
>
I forgot to say explicitly... there are actually two logging.properties files.
There's the one in WEB-INF (as used by the app), and there's the one in the
root directory of the integtest module.
Did you change both?
Dan
> Thanks
> Dharmesh
>
> -----Original Message-----
> From: Dan Haywood [mailto:[email protected]]
> Sent: Monday, March 03, 2014 11:17 AM
> To: users
> Subject: Re: Integration testing
>
> On 3 March 2014 10:49, Chohan, Dharmesh <[email protected]> wrote:
>
> > Hi
> >
> > I am running some integration test and I have noticed some behaviour
> > that I do not understand.
> >
> > 1. The following is the output from running the "mvn clean install"
> > command. The test seems to pass but then I am getting the following
> error.
> > This is the method called from the test,
> >
> > public final List<Card> listAll() {
> > return allInstances(Card.class);
> > }
> >
> > 8 Scenarios (8 passed)
> > 24 Steps (24 passed)
> > 0m5.731s
> >
> > Tests run: 32, Failures: 0, Errors: 0, Skipped: 0, Time elapsed:
> > 10.852 sec
> > Running integration.tests.smoke.EnterTopUpDetailsTest
> > Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed:
> > 0.14 sec <<< FAILURE!
> >
> > Results :
> >
> > Tests in error:
> > listAll(integration.tests.smoke.EnterTopUpDetailsTest): Method
> > 'allInstances' being invoked does not correspond to any of the
> > object's fields or actions.
> >
> >
> Hmm, I can explain that message, but I'm not exactly sure how it came
> to be called.
>
> The message is thrown by the wrapped object, so I'm guessing that the
> repository being called is wrapped. The "listAll" method is called on
> the wrapping proxy object that then delegates down to the underlying
> wrapped domain object.
>
> What then seems to be happening is that the domain object is somehow
> (and I can't quite see how) calling allInstances() back on the wrapping proxy.
>
> Now allInstances is a protected method inherited from
> AbstractContainedObject, and protected methods are not recognized as
> actions (they must be public). The proxy is therefore complaining
> that it can't find this action.
>
> The workaround would be to override allInstances in your repository
> and make it public, or - as you do below - to delegate to the DOC.
> But - as I say - I can't quite see how the wrapped domain object ends
> up calling back on the wrapping proxy.
>
>
>
>
> >
> > In the same class file I am injecting the DomainObjectContainer
> > object with name container. If I modify the return statement to the
> > following, then I get a different error.
> >
> > public final List<Card> listAll() {
> > return container.allInstances(Card.class);
> > }
> >
> > 8 Scenarios (1 failed, 7 passed)
> > 24 Steps (1 failed, 2 skipped, 21 passed) 0m5.221s
> >
> > java.lang.NullPointerException
> > at
> net.atos.tfgm.services.CardService.listAll(CardService.java:88)
> > at
> >
> integration.glue.simple.EnterTopUpDetailsGlue$1.<init>(EnterTopUpDetai
> lsGlue.java:74)
> > at
> >
> integration.glue.simple.EnterTopUpDetailsGlue.There_are_initially_Smar
> tis_cards(EnterTopUpDetailsGlue.java:72)
> > at ?.Given There are initially 3 Smartis
> > cards(integration/specs/simple/EnterTopUpDetailsSpec_listAllAndCreate.
> > feature:28)
> >
> >
> This looks to me that the container field isn't injected, so its a
> simple NPE. Since you are inheriting from AbstractContainedObject,
> use
> getContainer() instead.
>
>
>
>
> > 2. The second issue I have seen in the console output is that the
> > fixtures are getting called 3 times for everything, i.e. create
> > table, inserts and selects. I am not sure if there is something in
> > configuration file that needs changing?
> >
> > 10:40:59,946 [Native main DEBUG] INSERT INTO
> > "Card"
> > ("expiryDate","cardId","category","type","cardNumber","status","vers
> > io
> > n")
> > VALUES
> > (<2014-03-03>,<633597111>,<'ITSO'>,<null>,<'123456789111'>,<'Live'>,<1>)
> > 10:40:59,946 [Native main DEBUG] INSERT INTO
> > "Card"
> > ("expiryDate","cardId","category","type","cardNumber","status","vers
> > io
> > n")
> > VALUES
> > (<2014-03-03>,<633597111>,<'ITSO'>,<null>,<'123456789111'>,<'Live'>,<1>)
> > 10:40:59,946 [Native main DEBUG] INSERT INTO
> > "Card"
> > ("expiryDate","cardId","category","type","cardNumber","status","vers
> > io
> > n")
> > VALUES
> > (<2014-03-03>,<633597111>,<'ITSO'>,<null>,<'123456789111'>,<'Live'>,<1>)
> > 1
> >
> >
> It's only called once, it's just that the logging is setup incorrectly....
> the log4j.additivity clause was missing.
>
> Modify your logging.properties for DataNucleus to read:
>
>
> # DataNucleus
>
> # these are the two most useful ones
> # Native shows DML SQL, Schema shows DDL SQL
> log4j.logger.DataNucleus.Datastore.Native=DEBUG, Console
> log4j.logger.DataNucleus.Datastore.Schema=DEBUG, Console
>
> # typically leave the remainder as WARN or ERROR.
> log4j.logger.DataNucleus.Persistence=WARN, Console
> log4j.logger.DataNucleus.Transaction=WARN, Console
> log4j.logger.DataNucleus.Connection=WARN, Console
> log4j.logger.DataNucleus.Query=WARN, Console
> log4j.logger.DataNucleus.Cache=WARN, Console
> log4j.logger.DataNucleus.MetaData=WARN, Console
> log4j.logger.DataNucleus.Datastore=WARN, Console
> log4j.logger.DataNucleus.Datastore.Persist=WARN, Console
> log4j.logger.DataNucleus.Datastore.Retrieve=WARN, Console
> log4j.logger.DataNucleus.General=WARN, Console
> log4j.logger.DataNucleus.Lifecycle=WARN, Console
> log4j.logger.DataNucleus.ValueGeneration=WARN, Console
> log4j.logger.DataNucleus.Enhancer=WARN, Console
> log4j.logger.DataNucleus.SchemaTool=ERROR, Console
> log4j.logger.DataNucleus.JDO=WARN, Console
> log4j.logger.DataNucleus.JPA=ERROR, Console
> log4j.logger.DataNucleus.JCA=WARN, Console
> log4j.logger.DataNucleus.IDE=ERROR, Console
>
> log4j.additivity.DataNucleus.Datastore.Native=false
> log4j.additivity.DataNucleus.Datastore.Schema=false
> log4j.additivity.DataNucleus.Datastore.Persistence=false
> log4j.additivity.DataNucleus.Datastore.Transaction=false
> log4j.additivity.DataNucleus.Datastore.Connection=false
> log4j.additivity.DataNucleus.Datastore.Query=false
> log4j.additivity.DataNucleus.Datastore.Cache=false
> log4j.additivity.DataNucleus.Datastore.MetaData=false
> log4j.additivity.DataNucleus.Datastore.Datastore=false
> log4j.additivity.DataNucleus.Datastore.Datastore.Persist=false
> log4j.additivity.DataNucleus.Datastore.Datastore.Retrieve=false
> log4j.additivity.DataNucleus.Datastore.General=false
> log4j.additivity.DataNucleus.Datastore.Lifecycle=false
> log4j.additivity.DataNucleus.Datastore.ValueGeneration=false
> log4j.additivity.DataNucleus.Datastore.Enhancer=false
> log4j.additivity.DataNucleus.Datastore.SchemaTool=false
> log4j.additivity.DataNucleus.Datastore.JDO=false
> log4j.additivity.DataNucleus.Datastore.JPA=false
> log4j.additivity.DataNucleus.Datastore.JCA=false
> log4j.additivity.DataNucleus.Datastore.IDE=false
>
>
>
> and see if that fixes the issue. Hopefully it will, this is the fix
> going forward in 1.4.0-snapshot and will be in the next archetype we
> release
>
> HTH
> Dan
>
>
>
> > Thanks
> > Dharmesh
> >
> >
>