Looks like it doesn't have an adaptor, so you should try specifying one
(this is line 103):

        *boolean* supportsGeneratedKeys = node
.getAdapter().supportsGeneratedKeys();


On Thu, Oct 29, 2020 at 9:51 AM Tony Giaccone <[email protected]> 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 <[email protected]>
> 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 <[email protected]>
> > 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 <[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.
> > >>>>
> > >>>
> > >
> >
> >
>

Reply via email to