Hi Andrew, Thanks for the info. Currently, I am using the MaoConfigKey, but I think the ConfigKey is better too. So, I will change it an test it. Only, a question, When could MapConfigKeys be used?
Thanks a lot. Jose El 07/10/2014, a las 00:57, Andrew Kennedy <[email protected]> escribió: > 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. >>>> >>>> >>>> >>
