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

Reply via email to