Jose, FYI, you should be able to revert back to using a `ConfigKey<Map<String,Object>>` now, as the changes for pull request #182 [0] fixed resolution of `$brooklyn:component` references properly in map content. This is actually preferable as idiomatic entity code, and probably more understandable that the `MapConfigKey` version, so please try it and let me know how you get on. You may also be able to make use of the new `$brooklyn:object` method, and use a custom Java POJO as a DTO for the database properties if you want, see this blog post for more details:
- http://blog.abstractvisitorpattern.co.uk/2014/10/new-brooklyn-blueprint-features.html [0] https://github.com/apache/incubator-brooklyn/pull/182 Cheers, Andrew. -- -- andrew kennedy ? cloud engineer : http://blog.abstractvisitorpattern.co.uk/ ; On 25 September 2014 23:21, josec <[email protected]> wrote: > Hi Andrew, > > Thanks for your reply. > I checked this class las afternoon, but I do not undertand how the keySet(in > this case d_DatabaseHost and g_DatabasePort) is returned by MapConfigKey. > This keys are specified by the user, so they arenot known by the Java code > in runtime. > > However I can find the next lines: > > MapConfigKey<String> SALT_FORMULAS = new MapConfigKey<String>(String.class, > "salt.formulaUrls", "Map of Salt formula URLs (normally GutHub > repository archives from the salt-formulas user)"); > > and > > Map<String, String> formulas = app.getConfig(SaltConfig.SALT_FORMULAS); > > So, I hope formulas.keySet() returns <"g_DatabaseHost", "g_DatabasePort">, > then I could interate over the map > > I think it could be working good, I will tell you. :) > > Thanks a lot. > Jose > > El 25.09.2014 23:47, Andrew Kennedy escribió: > >> Jose, Hi. >> >> There are some issues using $brooklyn functions and deferred values >> using Map valued ConfigKeys at the moment, which I am working on >> resolving in pull request #182, however in the mean time I suggest you >> try this: >> >> Change the type of the key to MapConfigKey, declared like this: >> >> MapConfigKey<Object> DB_CONNECTION_CONFIG_PARAMS = new >> MapConfigKey<Object>(Object.class, "php.db.connection.config.params"); >> >> Then you should be able to specify the configuration in the YAML like >> this: >> >> brooklyn.config: >> db_connection_config_params: >> g_DatabaseHost: >> $brooklyn:component("db").attributeWhenReady("datastore.url") >> g_DatabasePort: >> $brooklyn:component("db").attributeWhenReady("mysql.port") >> >> Hopefully this is helpful. >> >> Cheers, >> Andrew. >> -- >> -- andrew kennedy ? cloud engineer : >> http://blog.abstractvisitorpattern.co.uk/ ; >> >> >> On 25 September 2014 19:16, Jose Carrasco <[email protected]> wrote: >>> >>> Hello, >>> >>> I am currently developing a new entities for Brooklyn (into SeaClouds >>> project context). >>> I have found a problem using the ConfigKey. >>> >>> I am using a ConfigKey<Map< String, String>> to my entity the parameters >>> necessaty to stablish a database >>> connection. I have decided to use a Map because the user could find a >>> smart >>> and flexible way flexible to specify >>> several attributes and their values, e.g.: >>> >>> name: PHP HelloWorld >>> services: >>> - serviceType: brooklyn.entity.webapp.apache.ApacheServer >>> name: Apache Server >>> location: localhost >>> brooklyn.config: >>> http_port: 80 >>> app_git_repo_url:https://bitbucket.org/seaclDem/nurocasestudyphp5-5.git >>> >>> <https://seaclDem:[email protected]/seaclDem/nurocasestudyphp5-5.git> >>> db_connection_config_params: >>> g_DatabaseHost: $brooklyn:formatString("%s", >>> component("db").attributeWhenReady("datastore.url")) >>> g_DatabasePort: >>> $brooklyn:component("db").attributeWhenReady("mysql.port") >>> >>> - serviceType: brooklyn.entity.database.mysql.MySqlNode >>> id: db >>> name: My DB >>> location: localhost >>> brooklyn.config: >>> datastore.creation.script.url: >>> file:///root/Desktop/brooklynTest/create.sql >>> >>> In this example the db_connection_config_params is a MapConfigKey: >>> >>> @SetFromFlag("db_connection_config_params") >>> public static final ConfigKey<Map<String,String>> >>> DB_CONNECTION_CONFIG_PARAMS = new BasicConfigKey( >>> Map.class, "php.db.connection.config.params", "PHP >>> application >>> file to start e.g. main.php, or launch.php"); >>> >>> Which contains two items which are used to configure the database. In >>> this >>> case, the values of the >>> aforementioned items are provided by MySQL entity. It works ok. >>> Here, I find a problem getting the values of the g_DatabaseHost and >>> g_DatabasePort in my java code. When >>> I read the values of the aforementiond items the returned values are >>> $brooklyn:formatString("%s"). >>> >>> I have changed the YAML definition using: >>> >>> g_DatabaseHost: >>> $brooklyn:component("db").attributeWhenReady("datastore.url")) >>> g_DatabasePort: >>> $brooklyn:component("db").attributeWhenReady("mysql.port") >>> >>> But I have obteined >>> $brooklyn:component("db").attributeWhenReady("datastore.url")) and >>> $brooklyn:component("db").attributeWhenReady("mysql.portl")) >>> respectively. >>> >>> I thought the problem could be the component values request (e.g. >>> $brooklyn:component("db"). >>> attributeWhenReady("datastore.url"))), then I assinged these values to >>> simple ConfigKey<String> but >>> they worked good. >>> >>> Thus, the problem may be ConfigKey<Map<,>> parser does not evalue the >>> expresions which uses >>> $brooklyn:... but I do not know. >>> >>> Could anyone point me in the right direction? Thank you very much. >>> >>> Thanks a lot, >>> Jose. >>> >>> >>> >
