@Override
    public void initialize(Map<String, Object> config) {
        String dataSourceFqcn = (String) config.get(CONFIG_DATASOURCE_FQCN);
        boolean dataSourceFqcnRequired = dataSourceFqcn == null;
        if ( dataSourceFqcnRequired ) {
            throw new DataAccessException("データソースのFQCNが指定されていません: キー=" + CONFIG_DATASOURCE_FQCN);
        }

        this.dataSource = ClassUtil.createInstance(dataSourceFqcn);
        Map<String, String> otherConfigs = CollectionUtil.filterByKey(config, new Predicate<String>() {
            @Override
            public boolean evaluate(String s) {
                return (!CONFIG_DATASOURCE_FQCN.equals(s)) &&
                        s.startsWith(CONFIG_DATASOURCE_OTHER_CONFIGS);
            }
        });

        for ( String key : otherConfigs.keySet() ) {
            String setterValue = otherConfigs.get(key);
            String setterName = key.substring(CONFIG_DATASOURCE_OTHER_CONFIGS.length());
            ClassUtil.setProperty(dataSource, setterName, setterValue);
        }

        initialized = true;
    }