synchronized DataSource ds() {
   if (ds == null) {
     String providerClass = config.getString("provider_class");
     if (providerClass == null) {
       providerClass = DEFAULT_PROVIDER_CLASS;
     }
     try {
       Class clazz = getClassLoader().loadClass(providerClass);
       provider = (DataSourceProvider) clazz.newInstance();
       ds = provider.getDataSource(config);
     } catch (Exception e) {
       throw new RuntimeException(e);
     }
   }
   return ds;
 }