@Override public DataSource createDataSource(Properties properties, Context context, boolean XA) throws Exception { String url = (String) properties.get("url"); if (null != url && url.startsWith("http")) properties.putAll(parse(getResponseText(new URL(url)))); PoolConfiguration poolProperties = DataSourceFactory.parsePoolProperties(properties); String encodedPwd = poolProperties.getPassword(); String keyName = poolProperties.getName().replace("/", "_") + "_secret"; String secretKey = System.getenv(keyName); String password = null; if (encodedPwd.startsWith("?")) { if (null == secretKey) password = decryptByPrompt(keyName, encodedPwd.substring(1)); else password = new Encryptor(secretKey).decrypt(encodedPwd.substring(1)); } else { password = new Encryptor(secretKey).decrypt(encodedPwd); } poolProperties.setPassword(password); if (poolProperties.getDataSourceJNDI() != null && poolProperties.getDataSource() == null) { performJNDILookup(context, poolProperties); } if (XA) { XADataSource ds = new XADataSource(poolProperties); ds.createPool(); return ds; } else { org.apache.tomcat.jdbc.pool.DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource(poolProperties); ds.createPool(); return ds; } }