And while we are at it, I absolutely must plug a mention of Bootique 2.0 / 
JUnit 5 testing facilities :) 

https://bootique.io/docs/2.x/bootique-docs/#_testing
https://bootique.io/docs/2.x/bootique-jdbc-docs/#jdbc-testing

They are on a totally different level:

* Support for Docker/Testcontainers, so you'd test against a real DB, not Derby 
or H2
* Liquibase migrations in tests, so you can use a real up-to-date schema
* "Global" scope for test databases and "apps", so you can share them across 
test classes, improving performance
* Improved "Table" API for datatsets preparation and data assertions

Andrus


> On Oct 29, 2020, at 8:48 AM, Andrus Adamchik <and...@objectstyle.org> wrote:
> 
> You can still start a BQRuntime in tests, even if the module doesn't use 
> Bootique. Then you'd define a DataSource within BQRuntime, and 
> "bootique-cayenne" would create a DataNode for it automatically and 
> transparently. YMMV with older Bootique versions. E.g. Agrest (that has no 
> Bootique dependency itself) is using Bootique for tests. 
> 
> Andrus
> 
>> On Oct 29, 2020, at 7:27 AM, Tony Giaccone <t...@giaccone.org> wrote:
>> 
>> This is what I have now for the spin up:
>> 
>> runtime = ServerRuntime.builder()
>>       .addConfig("cayenne-PriceIncrease.xml")
>>       .addModule(binder -> {
>>           ServerModule.contributeProperties(binder)
>>                   .put("cayenne.jdbc.driver", "org.h2.Driver")
>>                   .put("cayenne.jdbc.url", "jdbc:h2:mem:CohortDB");
>>       })
>>       .build();
>> DataNode node = new DataNode("testNode");
>> runtime.getDataDomain().setDefaultNode(node);
>> 
>> 
>> And now on commit changes I get this:
>> 
>> 
>> Caused by: java.lang.NullPointerException
>> at
>> org.apache.cayenne.access.DataDomainInsertBucket.createPermIds(DataDomainInsertBucket.java:103)
>> at
>> org.apache.cayenne.access.DataDomainInsertBucket.appendQueriesInternal(DataDomainInsertBucket.java:73)
>> at
>> org.apache.cayenne.access.DataDomainSyncBucket.appendQueries(DataDomainSyncBucket.java:78)
>> at
>> org.apache.cayenne.access.DataDomainFlushAction.preprocess(DataDomainFlushAction.java:185)
>> at
>> org.apache.cayenne.access.DataDomainFlushAction.flush(DataDomainFlushAction.java:143)
>> 
>> 
>> 
>> On Wed, Oct 28, 2020 at 4:08 PM John Huss <johnth...@gmail.com> wrote:
>> 
>>> You could add a node at runtime:
>>> 
>>> DataNode node = *new* DataNode("node");
>>> 
>>> ... // configure node
>>> 
>>> runtime.getDataDomain().addNode(node);
>>> 
>>> runtime.getDataDomain().setDefaultNode(node);
>>> 
>>> On Wed, Oct 28, 2020 at 2:52 PM Tony Giaccone <t...@giaccone.org> wrote:
>>> 
>>>> So I have a project which is running in Bootique, but the data model is
>>>> used in several different apps. To facilitate this, we created a jar file
>>>> that includes the generated classes, and the code and the
>>>> cayenne-project.xml file in one jar file.  The result of this is tests
>>> run
>>>> for this jar, don't have access to the bootique runtime, as they are part
>>>> of a jar that's going to be included in other apps.
>>>> 
>>>> We're using an older version of Bootique and so the version of Cayenne is
>>>> 4.0.B2
>>>> 
>>>> The cayenne project, only has a datamap there is no datanode defined in
>>> the
>>>> xml.
>>>> 
>>>> So I'm trying to spin up a cayenne runtime, using this code.
>>>> 
>>>> runtime = ServerRuntime.builder()
>>>>       .addConfig("cayenne-CohortManager.xml")
>>>>       .addModule(binder -> {
>>>>           ServerModule.contributeProperties(binder)
>>>>                   .put("cayenne.jdbc.driver", "org.h2.Driver")
>>>>                   .put("cayenne.jdbc.url", "jdbc:h2:mem:CohortDB");
>>>>       })
>>>>       .build();
>>>> 
>>>> 
>>>> The problem is that later, when I try to commit changes, I get this
>>> error:
>>>> 
>>>> org.apache.cayenne.CayenneRuntimeException: [v.4.0.B2 Sep 26 2017
>>>> 10:05:06] No DataNode configured for DataMap 'datamap' and no default
>>>> DataNode set
>>>> 
>>>> I'm successfully able to run other tests, because they never do a
>>>> commitobjects.
>>>> 
>>>> 
>>>> Any suggestions on how to resolve my problem.
>>>> 
>>> 
> 

Reply via email to