Hi Dan 1. The issue has been solved, there was a change in the file. 2. I have modified the logging.properties but the console ouput is still the same.
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>(EnterTopUpDetailsGlue.java:74) > at > integration.glue.simple.EnterTopUpDetailsGlue.There_are_initially_Smartis_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","versio > 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","versio > 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","versio > 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 > >
