Singleton configuration class? concrete example
apache-commons-config, java
Solution
You could put the code to initialize `config` in a static initializer block and deal with the exception there. For example:
public class Settings {
public static final Configuration config;
static {
Configuration c = null;
try {
DefaultConfigurationBuilder factory = new DefaultConfigurationBuilder("config.xml");
c = factory.getConfiguration();
}
catch (SomeException e) {
// Deal with the exception
c = null;
}
config = c;
}
}
Problem
I have started reading the Apache commons documentation but its very extensive so I am hoping someone can answer a simple question so I don't need to read all of it just to start using it for basic configuration. I am losing patience really quick with it - there is no "quick start chapter" and I don't need to know every detail before I decide if I want to use the library or not. I want (what I think is a common use-case) a class with static methods that provides look up of properties. E.g. in class Foo i can use ``` Settings.config.getString("paramter"); ``` Where ``` import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.DefaultConfigurationBuilder; /** * Settings configuration class */ public class Settings { private static final DefaultConfigurationBuilder factory = new DefaultConfigurationBuilder("config.xml"); public static final Configuration config= factory.getConfiguration(); } ``` The problem is that the factory method can throw an exception! So this code does not compile, a class cannot throw an exception either so I suspect that I need to do a lot more coding. I suspect that there is a simple solution to this. But it surely cannot be calling ``` DefaultConfigurationBuilder factory = new DefaultConfigurationBuilder("config.xml"); Configuration config= factory.getConfiguration(); ``` In every class where I want to read configurations? I have tried: ``` public class Settings { public static final Configuration config; static { try { DefaultConfigurationBuilder factory; factory = new DefaultConfigurationBuilder("config.xml") ; config = factory.getConfiguration(); } catch (ConfigurationException e) { // Deal with the exception config=null; System.exit(1); } } } ``` But I get the compilation error: ``` error: variable config might already have been assigned [javac] config=null; ```