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 <johnth...@gmail.com> wrote:
> 
> https://stackoverflow.com/questions/18948418/set-database-path-in-cayenne
> 
> On Sat, Jul 6, 2019 at 8:36 PM Joe Baldwin <jfbald...@earthlink.net> 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
>> 
>> 

Reply via email to