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

Reply via email to