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