[ http://issues.apache.org/jira/browse/HADOOP-24?page=comments#action_12412376 ]
Gal Nitzan commented on HADOOP-24: ---------------------------------- Hi, In regards to the code compatibility - For Hadoop all new code is already included (tests also) is in this patch. For Nutch I already have the patch ready and it is not that big a change since most code uses Configuration (so the actual change is only in construction) so ConfigurationImpl has a copy constructor that accepts a Configuration. I actualy tested it also. I can submit it here as well if we decide to use this patch. I'm not sure it would be a good idea to change the current design/implementation just for the sake of compatibility. I think the design(Doug's) and the implementation are clean and shall be more understandable to implementers/extenders. > make Configuration an interface > ------------------------------- > > Key: HADOOP-24 > URL: http://issues.apache.org/jira/browse/HADOOP-24 > Project: Hadoop > Type: Improvement > Components: conf > Reporter: Doug Cutting > Attachments: HADOOP-24-2.patch, HADOOP-24-3.patch, HADOOP-24-4.patch, > HADOOP-24.patch, HADOOP-24.patch > > The Configuration class should become an interface, e.g.: > public interface Configuration { > String get(String nam); > String set(String name, String value); > int getInt(String name); > void setInt(String name, int value); > float getFloat(String name); > void setFloat(String name, float value); > //... other utility methods based on get(String) and set(String,String) ... > } > An abstract class named ConfigurationBase should be implemented as follows: > public abstract class ConfigurationBase implements Configuration { > abstract public String get(String nam); > abstract public String set(String name, String value); > public int getInt(String name) { ... implementation in terms of > get(String) ... } > public void setInt(String name, int value) {... implementation in terms of > set(String, String) ...} > public float getFloat(String name) { ... implementation in terms of > get(String) ... } > public void setFloat(String name, float value) {... implementation in > terms of set(String, String) ...} > //... other utility methods based on get(String) and set(String,String) ... > } > A concrete, default implementation will be provided as follows: > public class ConfigurationImpl implements Writable extends ConfigurationBase { > private Properties properties; > // implement abstract methods from ConfigurationBase > public String get(String name) { ... implemented in terms of props ...} > public String set(String name, String value) { .. implemented in terms of > props ... } > // Writable methods > public write(DataOutputStream out); > public readFields(DataInputStream in); > // permit chaining of configurations > public Configuration getDefaults(); > public void setDefaults(Configuration defaults); > } > Only code which creates configurations should need to be updated, so this > shouldn't be a huge change. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
