public String getProperty(String key) { return this.getProperty(key, null); }
protected DataSourceFactory factory(Configuration dbConfig) { String dbFactory = dbConfig.getProperty("db.factory", "play.db.hikaricp.HikariDataSourceFactory"); try { return (DataSourceFactory) Class.forName(dbFactory).newInstance(); } catch (Exception e) { throw new IllegalArgumentException("Expected implementation of " + DataSourceFactory.class.getName() + ", but received: " + dbFactory); } }
private boolean isHSQL(String dbName) { Configuration dbConfig = new Configuration(dbName); String db = dbConfig.getProperty("db"); return ("mem".equals(db) || "fs".equals(db) || "org.hsqldb.jdbcDriver".equals(dbConfig.getProperty("db.driver"))); }
private List<String> mappingFiles(Configuration dbConfig) { String mappingFile = dbConfig.getProperty("jpa.mapping-file", ""); return mappingFile != null && mappingFile.length() > 0 ? singletonList(mappingFile) : emptyList(); }
private static void check(Configuration config, String mode, String property) { if (!StringUtils.isEmpty(config.getProperty(property))) { Logger.warn("Ignoring " + property + " because running the in " + mode + " db."); } }
protected Properties properties(String dbName, Configuration dbConfig) { Properties properties = new Properties(); properties.putAll(dbConfig.getProperties()); properties.put("javax.persistence.transaction", "RESOURCE_LOCAL"); properties.put("javax.persistence.provider", "org.hibernate.ejb.HibernatePersistence"); properties.put("hibernate.dialect", getDefaultDialect(dbConfig, dbConfig.getProperty("db.driver"))); if (!dbConfig.getProperty("jpa.ddl", Play.mode.isDev() ? "update" : "none").equals("none")) { properties.setProperty("hibernate.hbm2ddl.auto", dbConfig.getProperty("jpa.ddl", "update")); } properties.put("hibernate.connection.datasource", DB.getDataSource(dbName)); return properties; }
public static String getDefaultDialect(Configuration dbConfig, String driver) { String dialect = dbConfig.getProperty("jpa.dialect"); if (dialect != null) { return dialect;
@Override public DataSource createDataSource(Configuration dbConfig) throws PropertyVetoException, SQLException { HikariDataSource ds = new HikariDataSource(); ds.setDriverClassName(dbConfig.getProperty("db.driver")); ds.setJdbcUrl(dbConfig.getProperty("db.url")); ds.setUsername(dbConfig.getProperty("db.user")); ds.setPassword(dbConfig.getProperty("db.pass")); ds.setAutoCommit(false); ds.setConnectionTimeout(parseLong(dbConfig.getProperty("db.pool.timeout", "5000"))); ds.setMaximumPoolSize(parseInt(dbConfig.getProperty("db.pool.maxSize", "30"))); ds.setMinimumIdle(parseInt(dbConfig.getProperty("db.pool.minSize", "1"))); ds.setIdleTimeout(parseLong(dbConfig.getProperty("db.pool.maxIdleTime", "0"))); // NB! Now in milliseconds ds.setLeakDetectionThreshold(parseLong(dbConfig.getProperty("db.pool.unreturnedConnectionTimeout", "0"))); ds.setValidationTimeout(parseLong(dbConfig.getProperty("db.pool.validationTimeout", "5000"))); ds.setLoginTimeout(parseInt(dbConfig.getProperty("db.pool.loginTimeout", "0"))); // in seconds ds.setMaxLifetime(parseLong(dbConfig.getProperty("db.pool.maxConnectionAge", "0"))); // in ms if (dbConfig.getProperty("db.testquery") != null) { ds.setConnectionTestQuery(dbConfig.getProperty("db.testquery")); } else { String driverClass = dbConfig.getProperty("db.driver"); if(dbConfig.getProperty("db.isolation") != null) {
@Override public DataSource createDataSource(Configuration dbConfig) throws PropertyVetoException, SQLException { ComboPooledDataSource ds = new ComboPooledDataSource(); ds.setDriverClass(dbConfig.getProperty("db.driver")); ds.setJdbcUrl(dbConfig.getProperty("db.url")); ds.setUser(dbConfig.getProperty("db.user")); ds.setPassword(dbConfig.getProperty("db.pass")); ds.setAcquireIncrement(Integer.parseInt(dbConfig.getProperty("db.pool.acquireIncrement", "3"))); ds.setAcquireRetryAttempts(Integer.parseInt(dbConfig.getProperty("db.pool.acquireRetryAttempts", "10"))); ds.setAcquireRetryDelay(Integer.parseInt(dbConfig.getProperty("db.pool.acquireRetryDelay", "1000"))); ds.setCheckoutTimeout(Integer.parseInt(dbConfig.getProperty("db.pool.timeout", "5000"))); ds.setBreakAfterAcquireFailure(Boolean.parseBoolean(dbConfig.getProperty("db.pool.breakAfterAcquireFailure", "false"))); ds.setMaxPoolSize(Integer.parseInt(dbConfig.getProperty("db.pool.maxSize", "30"))); ds.setMinPoolSize(Integer.parseInt(dbConfig.getProperty("db.pool.minSize", "1"))); ds.setInitialPoolSize(Integer.parseInt(dbConfig.getProperty("db.pool.initialSize", "1"))); ds.setMaxIdleTimeExcessConnections(Integer.parseInt(dbConfig.getProperty("db.pool.maxIdleTimeExcessConnections", "0"))); ds.setIdleConnectionTestPeriod(Integer.parseInt(dbConfig.getProperty("db.pool.idleConnectionTestPeriod", "10"))); ds.setMaxIdleTime(Integer.parseInt(dbConfig.getProperty("db.pool.maxIdleTime", "0"))); ds.setTestConnectionOnCheckin(Boolean.parseBoolean(dbConfig.getProperty("db.pool.testConnectionOnCheckin", "true"))); ds.setTestConnectionOnCheckout(Boolean.parseBoolean(dbConfig.getProperty("db.pool.testConnectionOnCheckout", "false"))); ds.setLoginTimeout(Integer.parseInt(dbConfig.getProperty("db.pool.loginTimeout", "0"))); ds.setMaxAdministrativeTaskTime(Integer.parseInt(dbConfig.getProperty("db.pool.maxAdministrativeTaskTime", "0"))); ds.setMaxConnectionAge(Integer.parseInt(dbConfig.getProperty("db.pool.maxConnectionAge", "0"))); ds.setMaxStatements(Integer.parseInt(dbConfig.getProperty("db.pool.maxStatements", "0"))); ds.setMaxStatementsPerConnection(Integer.parseInt(dbConfig.getProperty("db.pool.maxStatementsPerConnection", "0"))); ds.setNumHelperThreads(Integer.parseInt(dbConfig.getProperty("db.pool.numHelperThreads", "3"))); ds.setUnreturnedConnectionTimeout(Integer.parseInt(dbConfig.getProperty("db.pool.unreturnedConnectionTimeout", "0"))); ds.setDebugUnreturnedConnectionStackTraces(Boolean.parseBoolean(dbConfig.getProperty("db.pool.debugUnreturnedConnectionStackTraces", "false"))); ds.setContextClassLoaderSource("library"); ds.setPrivilegeSpawnedThreads(true);
/** * Reads the configuration file and initialises required JPA EntityManagerFactories. */ @Override public void onApplicationStart() { org.apache.log4j.Logger.getLogger("org.hibernate.SQL").setLevel(Level.OFF); Set<String> dBNames = Configuration.getDbNames(); for (String dbName : dBNames) { Configuration dbConfig = new Configuration(dbName); if (dbConfig.getProperty("jpa.debugSQL", "false").equals("true")) { org.apache.log4j.Logger.getLogger("org.hibernate.SQL").setLevel(Level.ALL); } Thread thread = Thread.currentThread(); ClassLoader contextClassLoader = thread.getContextClassLoader(); thread.setContextClassLoader(Play.classloader); try { if (Logger.isTraceEnabled()) { Logger.trace("Initializing JPA for %s...", dbName); } JPA.emfs.put(dbName, newEntityManagerFactory(dbName, dbConfig)); } finally { thread.setContextClassLoader(contextClassLoader); } } JPQL.instance = new JPQL(); }
String datasourceName = dbConfig.getProperty("db", ""); String driver = dbConfig.getProperty("db.driver"); try { Driver d = (Driver) Class.forName(driver, true, Play.classloader).newInstance(); if (dbConfig.getProperty("db.user") == null) { fake = DriverManager.getConnection(dbConfig.getProperty("db.url")); } else { fake = DriverManager.getConnection(dbConfig.getProperty("db.url"), dbConfig.getProperty("db.user"), dbConfig.getProperty("db.pass")); String destroyMethod = dbConfig.getProperty("db.destroyMethod", ""); DB.datasource = ds; DB.destroyMethod = destroyMethod;
private static boolean isMySqlDialectInUse(String dbName) { boolean isMySQl = false; Configuration dbConfig = new Configuration(dbName); String jpaDialect = JPAPlugin.getDefaultDialect(dbConfig.getProperty("db.driver")); if (jpaDialect != null) { try { Class<?> dialectClass = Play.classloader.loadClass(jpaDialect); // MySQLDialect is the base class for MySQL dialects isMySQl = org.hibernate.dialect.MySQLDialect.class.isAssignableFrom(dialectClass); } catch (ClassNotFoundException e) { // swallow Logger.warn("jpa.dialect class %s not found", jpaDialect); } } return isMySQl; }
private static synchronized boolean isOracleDialectInUse(String dbName) { boolean isOracle = false; Configuration dbConfig = new Configuration(dbName); String jpaDialect = JPAPlugin.getDefaultDialect(dbConfig.getProperty("db.driver")); if (jpaDialect != null) { try { Class<?> dialectClass = Play.classloader.loadClass(jpaDialect); // Oracle 8i dialect is the base class for oracle dialects (at least for now) isOracle = org.hibernate.dialect.Oracle8iDialect.class.isAssignableFrom(dialectClass); } catch (ClassNotFoundException e) { // swallow Logger.warn("jpa.dialect class %s not found", jpaDialect); } } return isOracle; }
@Override public void beforeInvocation() { if (isDisabled() || Play.mode.isProd()) { return; } try { checkEvolutionsState(); } catch (InvalidDatabaseRevision e) { Set<String> dbNames = Configuration.getDbNames(); for (String dbName : dbNames) { Configuration dbConfig = new Configuration(dbName); for (Entry<String, VirtualFile> moduleRoot : modulesWithEvolutions.entrySet()) { if ("mem".equals(dbConfig.getProperty("db")) && listDatabaseEvolutions(e.getDbName(), moduleRoot.getKey()).peek().revision == 0) { Logger.info("Automatically applying evolutions in in-memory database"); Logger.info("Applying evolutions for '" + moduleRoot.getKey() + "'"); applyScript(true, moduleRoot.getKey(), moduleRoot.getValue()); } else { throw e; } } } } }
if ("mem".equals(dbConfig.getProperty("db")) && dbConfig.getProperty("db.url") == null) { dbConfig.put("db.driver", "org.h2.Driver"); dbConfig.put("db.url", "jdbc:h2:mem:play;MODE=MYSQL"); if ("fs".equals(dbConfig.getProperty("db")) && dbConfig.getProperty("db.url") == null) { dbConfig.put("db.driver", "org.h2.Driver"); dbConfig.put("db.url", "jdbc:h2:" + (new File(Play.applicationPath, "db/h2/play").getAbsolutePath()) + ";MODE=MYSQL"); String datasourceName = dbConfig.getProperty("db", ""); DataSource ds = DB.getDataSource(dbName); if ((datasourceName.startsWith("java:") || datasourceName.startsWith("jndi:")) && dbConfig.getProperty("db.url") == null) { if (ds == null) { return true; Matcher m = new jregex.Pattern("^mysql:(//)?(({user}[a-zA-Z0-9_]+)(:({pwd}[^@]+))?@)?(({host}[^/]+)/)?({name}[a-zA-Z0-9_]+)(\\?)?({parameters}[^\\s]+)?$").matcher(dbConfig.getProperty("db", "")); if (m.matches()) { String user = m.group("user"); m = new jregex.Pattern("^postgres:(//)?(({user}[a-zA-Z0-9_]+)(:({pwd}[^@]+))?@)?(({host}[^/]+)/)?({name}[^\\s]+)$").matcher(dbConfig.getProperty("db", "")); if (m.matches()) { String user = m.group("user"); if(dbConfig.getProperty("db.url") != null && dbConfig.getProperty("db.url").startsWith("jdbc:h2:mem:")) { dbConfig.put("db.driver", "org.h2.Driver"); dbConfig.put("db.user", "sa"); if ((dbConfig.getProperty("db.driver") == null) || (dbConfig.getProperty("db.url") == null)) { return false;