Search in sources :

Example 36 with Database

use of org.jumpmind.db.model.Database in project symmetric-ds by JumpMind.

the class AbstractJdbcDdlReader method readTables.

/*
     * Reads the database model from the given connection.
     * 
     * @param catalog The catalog to access in the database; use
     * <code>null</code> for the default value
     * 
     * @param schema The schema to access in the database; use <code>null</code>
     * for the default value
     * 
     * @param tableTypes The table types to process; use <code>null</code> or an
     * empty list for the default ones
     * 
     * @return The database model
     */
public Database readTables(final String catalog, final String schema, final String[] tableTypes) {
    JdbcSqlTemplate sqlTemplate = (JdbcSqlTemplate) platform.getSqlTemplate();
    return postprocessModelFromDatabase(sqlTemplate.execute(new IConnectionCallback<Database>() {

        public Database execute(Connection connection) throws SQLException {
            Database db = new Database();
            db.setName(Table.getFullyQualifiedTablePrefix(catalog, schema));
            db.setCatalog(catalog);
            db.setSchema(schema);
            db.addTables(readTables(connection, catalog, schema, tableTypes));
            db.initialize();
            return db;
        }
    }));
}
Also used : JdbcSqlTemplate(org.jumpmind.db.sql.JdbcSqlTemplate) IConnectionCallback(org.jumpmind.db.sql.IConnectionCallback) Connection(java.sql.Connection) Database(org.jumpmind.db.model.Database)

Example 37 with Database

use of org.jumpmind.db.model.Database in project symmetric-ds by JumpMind.

the class AbstractTest method getWebServer.

protected SymmetricWebServer getWebServer(String name) {
    try {
        if (!webServers.containsKey(name)) {
            EnvironmentSpecificProperties properties = new EnvironmentSpecificProperties(new URL[] { getResource(DbTestUtils.DB_TEST_PROPERTIES) }, "test." + name, new String[] { name });
            properties.putAll(getProperties(name));
            File rootDir = new File("target/" + name);
            FileUtils.deleteDirectory(rootDir);
            rootDir.mkdirs();
            File engineDir = new File(rootDir, "engines");
            engineDir.mkdirs();
            File rootPropertiesFile = new File(engineDir, "root.properties");
            FileOutputStream fos = new FileOutputStream(rootPropertiesFile);
            properties.store(fos, "unit tests");
            fos.close();
            System.setProperty(SystemConstants.SYSPROP_WAIT_FOR_DATABASE, "false");
            System.setProperty(SystemConstants.SYSPROP_ENGINES_DIR, engineDir.getAbsolutePath());
            System.setProperty(SystemConstants.SYSPROP_WEB_DIR, "src/main/deploy/web");
            ISymmetricEngine engine = null;
            int tries = 2;
            do {
                /** 
                     * Firebird is flaky.  Trying to work around it.
                     */
                try {
                    engine = new ClientSymmetricEngine(properties);
                } catch (Exception ex) {
                    log.warn("Failed to create engine on the first try.  Trying again.  The root cause of the first failure was: ", ex);
                    tries--;
                    AppUtils.sleep(30000);
                }
            } while (tries > 0 && engine == null);
            IDatabasePlatform platform = engine.getDatabasePlatform();
            engine.getStagingManager().clean(0);
            engine.uninstall();
            Database database = platform.getDdlReader().readTables(platform.getDefaultCatalog(), platform.getDefaultSchema(), new String[] { "TABLE" });
            platform.dropDatabase(database, true);
            Table[] tables = getTables(name);
            if (tables != null) {
                platform.alterCaseToMatchDatabaseDefaultCase(tables);
                platform.createTables(false, true, tables);
            }
            engine.destroy();
            SymmetricWebServer server = new SymmetricWebServer();
            server.setJmxEnabled(false);
            server.setHttpPort(port);
            log.info("Starting " + name + " on port " + port);
            server.setJoin(false);
            server.start();
            server.waitForEnginesToComeOnline(240000);
            webServers.put(name, server);
            port += 200;
        }
        return webServers.get(name);
    } catch (IOException e) {
        throw new IoException(e);
    } catch (RuntimeException e) {
        throw e;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
Also used : IDatabasePlatform(org.jumpmind.db.platform.IDatabasePlatform) Table(org.jumpmind.db.model.Table) EnvironmentSpecificProperties(org.jumpmind.properties.EnvironmentSpecificProperties) ISymmetricEngine(org.jumpmind.symmetric.ISymmetricEngine) IOException(java.io.IOException) IoException(org.jumpmind.exception.IoException) InterruptedException(org.jumpmind.exception.InterruptedException) IOException(java.io.IOException) SymmetricWebServer(org.jumpmind.symmetric.SymmetricWebServer) FileOutputStream(java.io.FileOutputStream) ClientSymmetricEngine(org.jumpmind.symmetric.ClientSymmetricEngine) Database(org.jumpmind.db.model.Database) IoException(org.jumpmind.exception.IoException) File(java.io.File)

Aggregations

Database (org.jumpmind.db.model.Database)37 Table (org.jumpmind.db.model.Table)21 IDatabasePlatform (org.jumpmind.db.platform.IDatabasePlatform)9 Test (org.junit.Test)7 IOException (java.io.IOException)6 IoException (org.jumpmind.exception.IoException)6 AbstractServiceTest (org.jumpmind.symmetric.service.impl.AbstractServiceTest)5 IDdlBuilder (org.jumpmind.db.platform.IDdlBuilder)4 SqlException (org.jumpmind.db.sql.SqlException)4 SqlScript (org.jumpmind.db.sql.SqlScript)4 DbExport (org.jumpmind.symmetric.io.data.DbExport)4 DbImport (org.jumpmind.symmetric.io.data.DbImport)4 File (java.io.File)3 ArrayList (java.util.ArrayList)3 InputStreamReader (java.io.InputStreamReader)2 LinkedHashMap (java.util.LinkedHashMap)2 AddTableChange (org.jumpmind.db.alter.AddTableChange)2 RemoveTableChange (org.jumpmind.db.alter.RemoveTableChange)2 TableChange (org.jumpmind.db.alter.TableChange)2 Column (org.jumpmind.db.model.Column)2