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