John,
> https://stackoverflow.com/questions/18948418/set-database-path-in-cayenne
Thanks for the link. I perused Andrus’ post, as well as the embedded link.
I am not quite following your suggested strategy though …
1. As best as I can tell, the posting suggests a strategy that addresses the
connection-url (not the multiple schema-refs in the cayenne-generated map.xml
file)
2. Core Issue:
- if I did not define the problem well enough, here is an example ...
- (from log-file analysis), cayenne-runtime generates select statements
with fully qualified table names
- ex: "d1.t1”
- it appears to get “d1” from the cayenne-modeler generated map.xml
file schema-ref
ex: "<db-entity name=“t1" schema=“d1”>”
- there are currently about 25-30 references in the cayenne
config files
- changing the connection-url alone does *not* change the dbname in the
runtime-select-statements (per log file)
- if I just change the connection-url to another dbname,
cayenne still uses the map.xml schema references to qualify the table names
- so even if you specify “d0” in your connection url, cayenne
will override and generate sql based on the scheme-ref “d1" in the map.xml file
- therefore, in order to support multiple instances of my app (each
with a separate dbname), I am forced to change all 25-30 schema-refs for every
instance I support.
3. My goal:
- genericize the 25-30x schema-refs to 1x schema-ref, so that I can
deploy to multiple instances (each with its own dbname).
- I am hoping for a DBMS-like namespace specifier (like “use dbname”)
to change the schema-ref in one location.
Comments:
1. my current strategy manual strategy is working - it is just “klunky”, and
does not easily support CI/CD.
2. Just trying to find out if the (schema-namespace / single-change) strategy
is possible - if not, I will just go with the manual strategy
To Simplify:
1. Is there a way to specify the dbname in *one* location (like a single config
file, or gradle param)?
2. or could I do something with db-entity tag so that it would ref the
defaultSchema?
<property name="defaultSchema" value="cmstest"/>
so instead of
<db-entity name=“t1" schema=“d1”>
it might say:
<db-entity name=“t1" schema='use-default'>
Thanks,
Joe
> On Jul 6, 2019, at 10:04 PM, John Huss <[email protected]> wrote:
>
> https://stackoverflow.com/questions/18948418/set-database-path-in-cayenne
>
> On Sat, Jul 6, 2019 at 8:36 PM Joe Baldwin <[email protected]> wrote:
>
>> I am trying to genericize the map.xml for multiple instances with multiple
>> dbnames (looking for a “use <dbname>” analogue for cayenne config files -
>> or a better idea if you have one)
>>
>> Details ...
>>
>> Context:
>> cayenne: 4.0.1
>> db: mysql 8.0.16
>> dbname: “cms" / “cmstest" / "cms_<bunch of others suffixes>” (all
>> referring to the same schema)
>>
>> Goals:
>> - migrate to cicd (gradle, git, jenkins, automated testing,etc)
>> - support testing configurations, as well as multiple instances of the
>> same app but with unique dbnames
>>
>> Prob:
>> While trying to migrate to fully automated testing (using junit-5) I hit a
>> snag:
>> - the cayenne map.xml has the datasource name (“cms” in this instance)
>> embedded in the map.xml config file:
>>
>> <property name="defaultSchema" value="cms”/>
>> ...
>> <db-entity name="admin" schema="cms">
>> …
>> </db-entity>
>>
>> So the general idea I had was to create a tmp-test database (cmstest), run
>> the junit tests for unit & complex unit testing configured using gradle,
>> then move on to a more complex testing config downstream. When I deploy
>> it will be to multiple instances (with unique dbnames).
>>
>> But I cannot figure out how to genericize this map.xml so that I can
>> easily change the datasource name - I could throw sed/awk at it - to change
>> all the schema-name-refs, but I was hoping for something a bit more
>> cayenne-oriented (and less brittle than sed/awk).
>>
>> Ideally, I am searching for a cayenne-analogue to mysql “use <dbname>” so
>> that I could change the datasource name in one location (vs 25).
>>
>> Thanks
>> Joe
>> PS if you have any other gradle tricks that you rely on, please do send a
>> link
>>
>>