> Because it's included in a bootique app, we can't use Bootique to do the > testing here.
You'd be adding Bootique dependencies to the test scope only, so none of it should leak to the modules that include your .jar. But there is a Bootique-free solution as well. See below. > So any ideas about what might be going wrong here? >> 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(); Overriding connection properties affects a pre-existing DataNode. It won't create a new one. But using explicit ServerRuntimeBuilder API would result in creation of a so-called "synthetic" DataNode behind the scenes. So rewrite the above as follows: runtime = ServerRuntime.builder() .addConfig("cayenne-CohortManager.xml") .jdbcDriver("org.h2.Driver") .url("jdbc:h2:mem:CohortDB") .build(); and this should produce a working stack. Andrus > On Oct 29, 2020, at 5:50 PM, Tony Giaccone <t...@giaccone.org> wrote: > > Andrus, we're using Bootique, but this portion of the code is in it's own > jar file, it's just the model and some basic services on the objects. > Because it's included in a bootique app, we can't use Bootique to do the > testing here. It needs to be just Cayenne. So any ideas about what might be > going wrong here? > > > Tony > > On Thu, Oct 29, 2020 at 1:56 AM Andrus Adamchik <and...@objectstyle.org> > wrote: > >> 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. >>>>>> >>>>> >>> >> >>