Re: Spinning up Cayenne in a unit test.

Andrus Adamchik <[email protected]>
Newsgroups gmane.comp.java.cayenne.user
Message-ID <[email protected]>
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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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.
>>> 
>>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.