If it is not a Bootique project, the property should work. A few non-Bootique
projects that I still have (that are on Cayenne 4.0) are started using
-Dcayenne.* properties from the docs.
If it is a Bootique project, you will need to use the Bootique approach to
configure credentials for anything [1], Cayenne included. E.g. for a sample
config [2], you'd be setting a value for the property
"-Dbq.jdbc.mysql.password". Another way (preferred to -D IMO) is to define a
shell variable pointing to the same property, and then exporting the var:
in MyModule.java:
BQCoreModule.extend(binder)
.declareVar("jdbc.mysql.username", "DB_USER");
.declareVar("jdbc.mysql.password", "DB_PASSWORD");
in startup script:
export DB_PASSWORD=root
export DB_PASSWORD=secret
java -jar my.jar # no password in the Java process sig
Andrus
[1]
http://bootique.io/docs/0/bootique-docs/index.html#chapter-7-configuration-and-configurable-factories
[2]
https://github.com/bootique-examples/bootique-cayenne-demo/blob/master/config.yml
> On Jan 17, 2018, at 12:22 AM, Pascal Robert <[email protected]> wrote:
>
> Do -Dcayenne.jdbc.username really work? I’m trying to use that (so that the
> password is not stored in Git), and the runtime is still using the login
> information from the XML file.
>
> Cayenne 4.1.M1.
> ServerRuntime mysqlRuntime =
> ServerRuntime.builder().addConfig("cayenne-mysql.xml").build();
>
>> Le 18 déc. 2017 à 11:49, Andrus Adamchik <[email protected]> a écrit :
>>
>> Hi Mark,
>>
>> We've done quite a bit of work in Cayenne to avoid complex things like
>> PasswordEncoding or custom DataSourceFactories. If all that is needed is to
>> change / define login credentials, the simplest way is via properties [1].
>> [2] shows an example with a single DataNode. If you have more than one, you
>> will need to add the project name and the DataNode name to the base property
>> name. E.g.:
>>
>> export MY_USER=user
>> export MY_PASSWORD=secret
>>
>> java -Dcayenne.jdbc.username.project.mynode=$MY_USER \
>> -Dcayenne.jdbc.password.project.mynode=$MY_PASSWORD \
>> -jar myapp.jar
>>
>>
>> Hope this helps,
>> Andrus
>>
>> [1]
>> http://cayenne.apache.org/docs/4.0/cayenne-guide/configuration-properties.html
>> [2]
>> https://stackoverflow.com/questions/45781378/best-practice-to-manage-apache-cayenne-project-xml-file
>>
>>
>>
>>> On Dec 17, 2017, at 4:23 AM, Mark Hull <[email protected]> wrote:
>>>
>>> I apologize if this question has been asked and answered before but: What
>>> is the best-practices solution to redact the database user name and
>>> password from an XML file created and used by Cayenne Modeler? The
>>> ServerRuntime build statement is simply:
>>>
>>> cayenneRuntime = ServerRuntime.builder()
>>> .addConfig("com/hulles/a1icia/cayenne/cayenne-a1icia.xml")
>>> .build();
>>>
>>> It works just fine as long as the db user name and password are in the XML
>>> file, but I don't believe in leaving clear-text artifacts like that laying
>>> around in the code, so I want to add the user and password data at runtime
>>> from a Java method (not from an external file or an 'executable', whatever
>>> that means in the content of PasswordEncoding). Adding .user("xyz") and
>>> .password("zyx") to the build statement don't work, presumably because the
>>> DataNode is not the default and those statements just set their respective
>>> fields for the default DataNode.
>>>
>>> If I have to, I can create either a Module to change those properties
>>> somehow at runtime (though the documentation for doing so is, to be kind,
>>> sparse), somehow implement the PasswordEncoding (even less documentation,
>>> because I don't know where it's used), or just edit the XML at runtime
>>> (horrible choice but looking like the best of a bad lot at this point).
>>>
>>> All this seems like a lot of effort when I imagine this need must crop up
>>> fairly often among Cayenne users (it should, for security reasons IMO). Is
>>> there a simple standard way to do what I want? Or at least a standard way?
>>> I don't want to invent a new wheel here. I feel like I'm missing something
>>> obvious that everyone else knows about and that I just missed. Oh, by the
>>> way, whatever the solution is should still allow Cayenne Modeler to
>>> function normally.
>>>
>>> I promise I searched for the answer everywhere I could think of.
>>> StackOverflow had a couple answers that used deprecated methods and didn't
>>> work when I tried them.
>>>
>>> Thanks in advance for any help. I hope there's a really simple answer so I
>>> feel stupid but don't have to spend any more time on this than I have
>>> already. :)
>>>
>>> - Mark Hull
>>>
>>> /People say nothing is impossible, but I do nothing every day. - A. A.
>>> Milne/
>>
>