jakarta commons configuration よい子のみんなはこんなコードを書いてはいけないよだってさ。
2007/05/01
java
javaで、staticな操作はどこでどう影響があたえるかわからないので、注意する必要があります。
失敗談です。
jakarta commons configurationは便利なので、現在、前面的に信頼して使用しています。XMLConfigurationの動きが変だな変だなという状況になりました。なぜか、XPathを使用するモードになっているような振る舞いをしました。
はて、XPathExpressionEngineを設定していないのに何故だろうと思ったところ、下記のようなコードを記述している箇所がありました。
XPathExpressionEngine engine = new XPathExpressionEngine();
HierarchicalConfiguration.setDefaultExpressionEngine(engine);
ConfigurationFactory configurationFactory;
configurationFactory = new ConfigurationFactory();
Configuration configuration = configurationFactory.getConfiguration();
このコードだとデフォルトエンジンを変更しています。
仕方がないので、下記のように修正しました。
// move defaultEngine
ExpressionEngine defaultEngine = HierarchicalConfiguration
.getDefaultExpressionEngine();
XPathExpressionEngine engine = new XPathExpressionEngine();
HierarchicalConfiguration.setDefaultExpressionEngine(engine);
ConfigurationFactory configurationFactory;
configurationFactory = new ConfigurationFactory();
Configuration configuration = configurationFactory.getConfiguration();
// restore defaultEngine
HierarchicalConfiguration.setDefaultExpressionEngine(defaultEngine);
なんとかしのぎましたが、このコードだと、同期化しないので潜在的にバグになっています。
: