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>(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 > > > > >
