Researching now... One possible difference in my code may be that I don't even model a DataNode in the Modeler. It is added as a DataSource in runtime. So a bug may have crept in for the other scenario.
Andrus > On Jan 17, 2018, at 3:57 PM, Amedeo Mantica <amedeomant...@me.com> wrote: > > I tried setting connection dictionary programmactically too, I was succesful, > but only after deletion of the existing connection discionary from the xml > > In my module: > > String driver = conf.getString(JDBC_DRIVER_PROPERTY); > String jdbcUrl = conf.getString(JDBC_URL_PROPERTY); > String username = conf.getString(JDBC_USERNAME_PROPERTY); > String password = conf.hasPath(JDBC_PASSWORD_PROPERTY) ? > conf.getString(JDBC_PASSWORD_PROPERTY) : ""; > > if(jdbcUrl != null) { > > binder.bindMap(Constants.PROPERTIES_MAP).put(Constants.JDBC_DRIVER_PROPERTY, > driver); > binder.bindMap(Constants.PROPERTIES_MAP).put(Constants.JDBC_URL_PROPERTY, > jdbcUrl); > > binder.bindMap(Constants.PROPERTIES_MAP).put(Constants.JDBC_USERNAME_PROPERTY, > username); > > binder.bindMap(Constants.PROPERTIES_MAP).put(Constants.JDBC_PASSWORD_PROPERTY, > password); > } > > Regards > Amedeo > >> On 17 Jan 2018, at 13:53, Pascal Robert <prob...@druide.com> wrote: >> >> It’s not a Bootique project, it’s a plain old Java project that I run in >> Eclipse. I can read the properties with System.getProperty, but Cayenne is >> still using the user and password from the model. >> >> INFO [main] (XMLDataChannelDescriptorLoader.java:125) - Loading XML >> configuration resource from >> file:/Users/probert/Code/modele-migration-filemaker/target/classes/cayenne-mysql.xml >> DEBUG [main] (DefaultHandlerFactory.java:38) - Skipping unknown tag >> <http://cayenne.apache.org/schema/10/domain:domain> >> INFO [main] (DataChannelChildrenHandler.java:106) - Loading XML DataMap >> resource from >> file:/Users/probert/Code/modele-migration-filemaker/target/classes/mysql.map.xml >> INFO [main] (DataSourceChildrenHandler.java:81) - loading user name and >> password. >> DEBUG [main] (DataDomainProvider.java:240) - finished configuration loading >> in 62 ms. >> INFO [main] (EntityResolver.java:118) - added runtime complimentary >> DbRelationship from adresse to ecole >> INFO [main] (EntityResolver.java:118) - added runtime complimentary >> DbRelationship from don_ecole to ecole >> INFO [main] (EntityResolver.java:118) - added runtime complimentary >> DbRelationship from no_serie to licence >> INFO [main] (EntityResolver.java:118) - added runtime complimentary >> DbRelationship from regroupement to utilisateur >> INFO [main] (EntityResolver.java:118) - added runtime complimentary >> DbRelationship from etat_utilisateur to utilisateur_etats >> INFO [main] (DriverDataSource.java:179) - Connecting to >> 'jdbc:mysql://localhost:3306/services_web' as 'xxxx' >> INFO [main] (DriverDataSource.java:170) - *** Connecting: FAILURE. >> java.sql.SQLException: Access denied for user 'xxxx'@'localhost' (using >> password: YES) >> >> I have tried with both -Dcayenne.jdbc.username.mysql.mysql=root and >> -Dcayenne.jdbc.username=root >> >>> Le 17 janv. 2018 à 00:58, Andrus Adamchik <and...@objectstyle.org> a écrit : >>> >>> 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 <prob...@druide.com> 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 <and...@objectstyle.org> 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 <mark.mkg...@gmail.com> 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/ >>>>> >>>> >>> >> >