jakarta commons configuration よい子のみんなはこんなコードを書いてはいけないよだってさ。 2007/05/01

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);


なんとかしのぎましたが、このコードだと、同期化しないので潜在的にバグになっています。

: