Example usage for org.hibernate.tool.hbm2ddl SchemaExport setDelimiter

List of usage examples for org.hibernate.tool.hbm2ddl SchemaExport setDelimiter

Introduction

In this page you can find the example usage for org.hibernate.tool.hbm2ddl SchemaExport setDelimiter.

Prototype

public SchemaExport setDelimiter(String delimiter) 

Source Link

Document

Set the end of statement delimiter

Usage

From source file:de.jpdigital.maven.plugins.hibernate4ddl.GenerateDdlMojo.java

License:Open Source License

/**
 * Helper method for generating the DDL classes for a specific dialect. This
 * is place for the real work is done. The method first creates an instance
 * of the {@link Configuration} class from Hibernate an puts the appropriate
 * values into it. It then creates an instance of the {@link SchemaExport}
 * class from the Hibernate API, configured this class, for example by
 * setting {@code format} to {@code true} so that the generated SQL files
 * are formatted nicely. After that it calls the
 * {@link SchemaExport#execute(boolean, boolean, boolean, boolean)} method
 * which will create the SQL script file. The method is called in a way
 * which requires <em>no</em> database connection.
 *
 *
 * @param dialect       The dialect for which the DDL files is generated.
 * @param entityClasses The entity classes for which the DDL file is
 *                      generated./*from   w  ww.  j a  v a 2 s. c o  m*/
 *
 * @throws MojoFailureException if something goes wrong.
 */
private void generateDdl(final Dialect dialect, final Set<Class<?>> entityClasses) throws MojoFailureException {
    final Configuration configuration = new Configuration();

    processPersistenceXml(configuration);

    configuration.setProperty("hibernate.hbm2ddl.auto", "create");

    for (final Class<?> entityClass : entityClasses) {
        configuration.addAnnotatedClass(entityClass);
    }

    configuration.setProperty("hibernate.dialect", dialect.getDialectClass());

    final SchemaExport export;
    if (useEnvers) {
        export = new EnversSchemaGenerator(configuration).export();
    } else {
        export = new SchemaExport(configuration);

    }
    export.setDelimiter(";");

    final Path tmpDir;
    try {
        tmpDir = Files.createTempDirectory("maven-hibernate-ddl-plugin");
    } catch (IOException ex) {
        throw new MojoFailureException("Failed to create work dir.", ex);
    }
    export.setOutputFile(
            String.format("%s/%s.sql", tmpDir.toString(), dialect.name().toLowerCase(Locale.ENGLISH)));
    export.setFormat(true);
    export.execute(true, false, false, true);

    writeOutputFile(dialect, tmpDir);
}

From source file:de.jpdigital.maven.plugins.hibernate5ddl.GenerateDdlMojo.java

License:Open Source License

/**
 * Helper method for generating the DDL classes for a specific dialect. This
 * is place for the real work is done. The method first creates an instance
 * of the {@link Configuration} class from Hibernate an puts the appropriate
 * values into it. It then creates an instance of the {@link SchemaExport}
 * class from the Hibernate API, configured this class, for example by
 * setting {@code format} to {@code true} so that the generated SQL files
 * are formatted nicely. After that it calls the
 * {@link SchemaExport#execute(boolean, boolean, boolean, boolean)} method
 * which will create the SQL script file. The method is called in a way
 * which requires <em>no</em> database connection.
 *
 *
 * @param dialect       The dialect for which the DDL files is generated.
 * @param entityClasses The entity classes for which the DDL file is
 *                      generated.//from   ww w. j a v a 2 s.c  om
 *
 * @throws MojoFailureException if something goes wrong.
 */
private void generateDdl(final Dialect dialect, final Set<Class<?>> entityClasses) throws MojoFailureException {

    final StandardServiceRegistryBuilder registryBuilder = new StandardServiceRegistryBuilder();
    processPersistenceXml(registryBuilder);

    if (createDropStatements) {
        registryBuilder.applySetting("hibernate.hbm2ddl.auto", "create-drop");
    } else {
        registryBuilder.applySetting("hibernate.hbm2ddl.auto", "create");
    }

    registryBuilder.applySetting("hibernate.dialect", dialect.getDialectClass());

    final StandardServiceRegistry standardRegistry = registryBuilder.build();

    final MetadataSources metadataSources = new MetadataSources(standardRegistry);

    for (final Class<?> entityClass : entityClasses) {
        metadataSources.addAnnotatedClass(entityClass);
    }

    final SchemaExport export = new SchemaExport();
    //        final SchemaExport export = new SchemaExport(
    //            (MetadataImplementor) metadata, true);
    export.setDelimiter(";");

    final Path tmpDir;
    try {
        tmpDir = Files.createTempDirectory("maven-hibernate5-ddl-plugin");
    } catch (IOException ex) {
        throw new MojoFailureException("Failed to create work dir.", ex);
    }

    final Metadata metadata = metadataSources.buildMetadata();

    export.setOutputFile(
            String.format("%s/%s.sql", tmpDir.toString(), dialect.name().toLowerCase(Locale.ENGLISH)));
    export.setFormat(true);
    if (createDropStatements) {
        export.execute(EnumSet.of(TargetType.SCRIPT), SchemaExport.Action.BOTH, metadata);
    } else {
        export.execute(EnumSet.of(TargetType.SCRIPT), SchemaExport.Action.CREATE, metadata);
    }

    writeOutputFile(dialect, tmpDir);
}

From source file:de.juplo.plugins.hibernate4.Hbm2DdlMojo.java

License:Apache License

@Override
public void execute() throws MojoFailureException, MojoExecutionException {
    if (skip) {/*from   w  w  w. j  av a2  s  . com*/
        getLog().info("Exectuion of hibernate4-maven-plugin:export was skipped!");
        project.getProperties().setProperty(EXPORT_SKIPPED_PROPERTY, "true");
        return;
    }

    File dir = new File(outputDirectory);
    if (!dir.exists())
        throw new MojoExecutionException(
                "Cannot scan for annotated classes in " + outputDirectory + ": directory does not exist!");

    Map<String, String> md5s;
    boolean modified = false;
    File saved = new File(buildDirectory + File.separator + MD5S);

    if (saved.exists()) {
        try {
            FileInputStream fis = new FileInputStream(saved);
            ObjectInputStream ois = new ObjectInputStream(fis);
            md5s = (HashMap<String, String>) ois.readObject();
            ois.close();
        } catch (Exception e) {
            md5s = new HashMap<String, String>();
            getLog().warn("Cannot read timestamps from saved: " + e);
        }
    } else {
        md5s = new HashMap<String, String>();
        try {
            saved.createNewFile();
        } catch (IOException e) {
            getLog().warn("Cannot create saved for timestamps: " + e);
        }
    }

    ClassLoader classLoader = null;
    try {
        getLog().debug("Creating ClassLoader for project-dependencies...");
        List<String> classpathFiles = project.getCompileClasspathElements();
        if (scanTestClasses)
            classpathFiles.addAll(project.getTestClasspathElements());
        URL[] urls = new URL[classpathFiles.size()];
        for (int i = 0; i < classpathFiles.size(); ++i) {
            getLog().debug("Dependency: " + classpathFiles.get(i));
            urls[i] = new File(classpathFiles.get(i)).toURI().toURL();
        }
        classLoader = new URLClassLoader(urls, getClass().getClassLoader());
    } catch (Exception e) {
        getLog().error("Error while creating ClassLoader!", e);
        throw new MojoExecutionException(e.getMessage());
    }

    Set<Class<?>> classes = new TreeSet<Class<?>>(new Comparator<Class<?>>() {
        @Override
        public int compare(Class<?> a, Class<?> b) {
            return a.getName().compareTo(b.getName());
        }
    });

    try {
        AnnotationDB db = new AnnotationDB();
        getLog().info("Scanning directory " + outputDirectory + " for annotated classes...");
        URL dirUrl = dir.toURI().toURL();
        db.scanArchives(dirUrl);
        if (scanTestClasses) {
            dir = new File(testOutputDirectory);
            if (!dir.exists())
                throw new MojoExecutionException("Cannot scan for annotated test-classes in "
                        + testOutputDirectory + ": directory does not exist!");
            getLog().info("Scanning directory " + testOutputDirectory + " for annotated classes...");
            dirUrl = dir.toURI().toURL();
            db.scanArchives(dirUrl);
        }

        Set<String> classNames = new HashSet<String>();
        if (db.getAnnotationIndex().containsKey(Entity.class.getName()))
            classNames.addAll(db.getAnnotationIndex().get(Entity.class.getName()));
        if (db.getAnnotationIndex().containsKey(MappedSuperclass.class.getName()))
            classNames.addAll(db.getAnnotationIndex().get(MappedSuperclass.class.getName()));
        if (db.getAnnotationIndex().containsKey(Embeddable.class.getName()))
            classNames.addAll(db.getAnnotationIndex().get(Embeddable.class.getName()));

        MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
        for (String name : classNames) {
            Class<?> annotatedClass = classLoader.loadClass(name);
            classes.add(annotatedClass);
            InputStream is = annotatedClass.getResourceAsStream(annotatedClass.getSimpleName() + ".class");
            byte[] buffer = new byte[1024 * 4]; // copy data in 4MB-chunks
            int i;
            while ((i = is.read(buffer)) > -1)
                digest.update(buffer, 0, i);
            is.close();
            byte[] bytes = digest.digest();
            BigInteger bi = new BigInteger(1, bytes);
            String newMd5 = String.format("%0" + (bytes.length << 1) + "x", bi);
            String oldMd5 = !md5s.containsKey(name) ? "" : md5s.get(name);
            if (!newMd5.equals(oldMd5)) {
                getLog().debug("Found new or modified annotated class: " + name);
                modified = true;
                md5s.put(name, newMd5);
            } else {
                getLog().debug(oldMd5 + " -> class unchanged: " + name);
            }
        }
    } catch (ClassNotFoundException e) {
        getLog().error("Error while adding annotated classes!", e);
        throw new MojoExecutionException(e.getMessage());
    } catch (Exception e) {
        getLog().error("Error while scanning!", e);
        throw new MojoFailureException(e.getMessage());
    }

    if (classes.isEmpty())
        throw new MojoFailureException("No annotated classes found in directory " + outputDirectory);

    getLog().debug("Detected classes with mapping-annotations:");
    for (Class<?> annotatedClass : classes)
        getLog().debug("  " + annotatedClass.getName());

    Properties properties = new Properties();

    /** Try to read configuration from properties-file */
    try {
        File file = new File(hibernateProperties);
        if (file.exists()) {
            getLog().info("Reading properties from file " + hibernateProperties + "...");
            properties.load(new FileInputStream(file));
        } else
            getLog().info("No hibernate-properties-file found! (Checked path: " + hibernateProperties + ")");
    } catch (IOException e) {
        getLog().error("Error while reading properties!", e);
        throw new MojoExecutionException(e.getMessage());
    }

    /** Overwrite values from propertie-file or set, if given */
    if (driverClassName != null) {
        if (properties.containsKey(DRIVER_CLASS))
            getLog().debug("Overwriting property " + DRIVER_CLASS + "=" + properties.getProperty(DRIVER_CLASS)
                    + " with the value " + driverClassName);
        else
            getLog().debug("Using the value " + driverClassName);
        properties.setProperty(DRIVER_CLASS, driverClassName);
    }
    if (url != null) {
        if (properties.containsKey(URL))
            getLog().debug("Overwriting property " + URL + "=" + properties.getProperty(URL)
                    + " with the value " + url);
        else
            getLog().debug("Using the value " + url);
        properties.setProperty(URL, url);
    }
    if (username != null) {
        if (properties.containsKey(USERNAME))
            getLog().debug("Overwriting property " + USERNAME + "=" + properties.getProperty(USERNAME)
                    + " with the value " + username);
        else
            getLog().debug("Using the value " + username);
        properties.setProperty(USERNAME, username);
    }
    if (password != null) {
        if (properties.containsKey(PASSWORD))
            getLog().debug("Overwriting property " + PASSWORD + "=" + properties.getProperty(PASSWORD)
                    + " with the value " + password);
        else
            getLog().debug("Using the value " + password);
        properties.setProperty(PASSWORD, password);
    }
    if (hibernateDialect != null) {
        if (properties.containsKey(DIALECT))
            getLog().debug("Overwriting property " + DIALECT + "=" + properties.getProperty(DIALECT)
                    + " with the value " + hibernateDialect);
        else
            getLog().debug("Using the value " + hibernateDialect);
        properties.setProperty(DIALECT, hibernateDialect);
    }
    if (hibernateNamingStrategy != null) {
        if (properties.contains(NAMING_STRATEGY))
            getLog().debug("Overwriting property " + NAMING_STRATEGY + "="
                    + properties.getProperty(NAMING_STRATEGY) + " with the value " + hibernateNamingStrategy);
        else
            getLog().debug("Using the value " + hibernateNamingStrategy);
        properties.setProperty(NAMING_STRATEGY, hibernateNamingStrategy);
    }

    /** The generated SQL varies with the dialect! */
    if (md5s.containsKey(DIALECT)) {
        String dialect = properties.getProperty(DIALECT);
        if (md5s.get(DIALECT).equals(dialect))
            getLog().debug("SQL-dialect unchanged.");
        else {
            getLog().debug("SQL-dialect changed: " + dialect);
            modified = true;
            md5s.put(DIALECT, dialect);
        }
    } else {
        modified = true;
        md5s.put(DIALECT, properties.getProperty(DIALECT));
    }

    if (properties.isEmpty()) {
        getLog().error("No properties set!");
        throw new MojoFailureException("Hibernate-Configuration is missing!");
    }

    Configuration config = new Configuration();
    config.setProperties(properties);

    if (properties.containsKey(NAMING_STRATEGY)) {
        String namingStrategy = properties.getProperty(NAMING_STRATEGY);
        getLog().debug("Explicitly set NamingStrategy: " + namingStrategy);
        try {
            @SuppressWarnings("unchecked")
            Class<NamingStrategy> namingStrategyClass = (Class<NamingStrategy>) Class.forName(namingStrategy);
            config.setNamingStrategy(namingStrategyClass.newInstance());
        } catch (Exception e) {
            getLog().error("Error setting NamingStrategy", e);
            throw new MojoExecutionException(e.getMessage());
        }
    }

    getLog().debug("Adding annotated classes to hibernate-mapping-configuration...");
    for (Class<?> annotatedClass : classes) {
        getLog().debug("Class " + annotatedClass);
        config.addAnnotatedClass(annotatedClass);
    }

    Target target = null;
    try {
        target = Target.valueOf(this.target.toUpperCase());
    } catch (IllegalArgumentException e) {
        getLog().error("Invalid value for configuration-option \"target\": " + this.target);
        getLog().error("Valid values are: NONE, SCRIPT, EXPORT, BOTH");
        throw new MojoExecutionException("Invalid value for configuration-option \"target\"");
    }
    Type type = null;
    try {
        type = Type.valueOf(this.type.toUpperCase());
    } catch (IllegalArgumentException e) {
        getLog().error("Invalid value for configuration-option \"type\": " + this.type);
        getLog().error("Valid values are: NONE, CREATE, DROP, BOTH");
        throw new MojoExecutionException("Invalid value for configuration-option \"type\"");
    }

    if (target.equals(Target.SCRIPT) || target.equals(Target.NONE)) {
        project.getProperties().setProperty(EXPORT_SKIPPED_PROPERTY, "true");
    }
    if (!modified && !target.equals(Target.SCRIPT) && !target.equals(Target.NONE) && !force) {
        getLog().info("No modified annotated classes found and dialect unchanged.");
        getLog().info("Skipping schema generation!");
        project.getProperties().setProperty(EXPORT_SKIPPED_PROPERTY, "true");
        return;
    }

    getLog().info("Gathered hibernate-configuration (turn on debugging for details):");
    for (Entry<Object, Object> entry : properties.entrySet())
        getLog().info("  " + entry.getKey() + " = " + entry.getValue());

    Connection connection = null;
    try {
        /**
         * The connection must be established outside of hibernate, because
         * hibernate does not use the context-classloader of the current
         * thread and, hence, would not be able to resolve the driver-class!
         */
        switch (target) {
        case EXPORT:
        case BOTH:
            switch (type) {
            case CREATE:
            case DROP:
            case BOTH:
                Class driverClass = classLoader.loadClass(properties.getProperty(DRIVER_CLASS));
                getLog().debug("Registering JDBC-driver " + driverClass.getName());
                DriverManager.registerDriver(new DriverProxy((Driver) driverClass.newInstance()));
                getLog().debug("Opening JDBC-connection to " + properties.getProperty(URL) + " as "
                        + properties.getProperty(USERNAME) + " with password "
                        + properties.getProperty(PASSWORD));
                connection = DriverManager.getConnection(properties.getProperty(URL),
                        properties.getProperty(USERNAME), properties.getProperty(PASSWORD));
            }
        }
    } catch (ClassNotFoundException e) {
        getLog().error("Dependency for driver-class " + properties.getProperty(DRIVER_CLASS) + " is missing!");
        throw new MojoExecutionException(e.getMessage());
    } catch (Exception e) {
        getLog().error("Cannot establish connection to database!");
        Enumeration<Driver> drivers = DriverManager.getDrivers();
        if (!drivers.hasMoreElements())
            getLog().error("No drivers registered!");
        while (drivers.hasMoreElements())
            getLog().debug("Driver: " + drivers.nextElement());
        throw new MojoExecutionException(e.getMessage());
    }

    ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
    MavenLogAppender.startPluginLog(this);
    try {
        /**
         * Change class-loader of current thread, so that hibernate can
         * see all dependencies!
         */
        Thread.currentThread().setContextClassLoader(classLoader);

        SchemaExport export = new SchemaExport(config, connection);
        export.setOutputFile(outputFile);
        export.setDelimiter(delimiter);
        export.setFormat(format);
        export.execute(target, type);

        for (Object exception : export.getExceptions())
            getLog().debug(exception.toString());
    } finally {
        /** Stop Log-Capturing */
        MavenLogAppender.endPluginLog(this);

        /** Restore the old class-loader (TODO: is this really necessary?) */
        Thread.currentThread().setContextClassLoader(contextClassLoader);

        /** Close the connection */
        try {
            if (connection != null)
                connection.close();
        } catch (SQLException e) {
            getLog().error("Error while closing connection: " + e.getMessage());
        }
    }

    /** Write md5-sums for annotated classes to file */
    try {
        FileOutputStream fos = new FileOutputStream(saved);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(md5s);
        oos.close();
        fos.close();
    } catch (Exception e) {
        getLog().error("Cannot write md5-sums to file: " + e);
    }
}

From source file:edu.ku.brc.specify.tools.SpecifySchemaGenerator.java

License:Open Source License

/**
 * Creates the Schema.//from  w ww  . j a v a 2 s  .  c om
 * @param driverInfo the driver info to use
 * @param connectionStr the connection string for creating or opening a database
 * @param hostname the hostname (localhost)
 * @param databaseName the database name
 * @param user the username
 * @param passwd the password (clear text)
 * @param doUpdate tells it to update the schema instead of creating it
 */
protected static void doGenSchema(final DatabaseDriverInfo driverInfo, final String connectionStr, // might be a create or an open connection string
        final String user, final String passwd, final boolean doUpdate) {
    // setup the Hibernate configuration
    Configuration hibCfg = new AnnotationConfiguration();
    hibCfg.setProperties(getHibernateProperties(driverInfo, connectionStr, user, passwd, doUpdate));
    hibCfg.configure();

    if (doUpdate) {
        SchemaUpdate schemaUpdater = new SchemaUpdate(hibCfg);

        log.info("Updating schema");
        //System.exit(0);
        boolean doScript = false;
        log.info("Updating the DB schema");
        schemaUpdater.execute(doScript, true);

        log.info("DB schema Updating completed");

        // log the exceptions that occurred
        List<?> exceptions = schemaUpdater.getExceptions();
        for (Object o : exceptions) {
            Exception e = (Exception) o;
            log.error(e.getMessage());
        }
    } else {
        SchemaExport schemaExporter = new SchemaExport(hibCfg);
        schemaExporter.setDelimiter(";");

        log.info("Generating schema");
        //System.exit(0);
        boolean printToScreen = false;
        boolean exportToDb = true;
        boolean justDrop = false;
        boolean justCreate = true;
        log.info("Creating the DB schema");
        schemaExporter.execute(printToScreen, exportToDb, justDrop, justCreate);

        log.info("DB schema creation completed");

        // log the exceptions that occurred
        List<?> exceptions = schemaExporter.getExceptions();
        for (Object o : exceptions) {
            Exception e = (Exception) o;
            log.error(e.getMessage());
        }
    }
}

From source file:fr.mycellar.tools.DdlExport.java

License:Open Source License

public static void main(String... args) {
    org.hibernate.cfg.Configuration cfg = new org.hibernate.cfg.Configuration();
    cfg.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect");
    cfg.addAnnotatedClass(Image.class);
    cfg.addAnnotatedClass(Address.class);
    cfg.addAnnotatedClass(Map.class);
    cfg.addAnnotatedClass(Position.class);
    cfg.addAnnotatedClass(IdentifiedEntity.class);
    cfg.addAnnotatedClass(NamedEntity.class);
    cfg.addAnnotatedClass(Bottle.class);
    cfg.addAnnotatedClass(Cellar.class);
    cfg.addAnnotatedClass(Input.class);
    cfg.addAnnotatedClass(Output.class);
    cfg.addAnnotatedClass(Stock.class);
    cfg.addAnnotatedClass(User.class);
    cfg.addAnnotatedClass(Appellation.class);
    cfg.addAnnotatedClass(Country.class);
    cfg.addAnnotatedClass(Format.class);
    cfg.addAnnotatedClass(Producer.class);
    cfg.addAnnotatedClass(Region.class);
    cfg.addAnnotatedClass(Varietal.class);
    cfg.addAnnotatedClass(Wine.class);
    cfg.addAnnotatedClass(Stack.class);
    cfg.addAnnotatedClass(CellarShare.class);
    cfg.addAnnotatedClass(Booking.class);
    cfg.addAnnotatedClass(BookingEvent.class);
    cfg.addAnnotatedClass(BookingBottle.class);
    cfg.addAnnotatedClass(Contact.class);
    cfg.addAnnotatedClass(Configuration.class);
    SchemaExport schemaExport = new SchemaExport(cfg);
    schemaExport.setDelimiter(";");
    schemaExport.execute(true, false, false, true);
}

From source file:io.milton.cloud.server.db.utils.SchemaExporter.java

License:Open Source License

/**
 * Method that actually creates the file.
 *
 * @param dbDialect to use//from   w w  w  .  j a v  a2  s.c  om
 */
public void generate() throws Exception {
    if (!outputDir.exists()) {
        outputDir.mkdirs();
    }
    AnnotationConfiguration cfg;
    cfg = new AnnotationConfiguration();
    cfg.setProperty("hibernate.hbm2ddl.auto", "create");
    cfg.setNamingStrategy(new org.hibernate.cfg.ImprovedNamingStrategy());

    for (String packageName : packageNames) {
        for (Class<Object> clazz : getClasses(packageName)) {
            cfg.addAnnotatedClass(clazz);
        }
    }
    List<File> outFiles = new ArrayList<>();
    for (Dialect d : Dialect.values()) {
        cfg.setProperty("hibernate.dialect", d.getDialectClass());
        SchemaExport export = new SchemaExport(cfg);
        export.setDelimiter(";");
        File fOut = new File(outputDir, d.name().toLowerCase() + ".sql");
        export.setOutputFile(fOut.getAbsolutePath());
        export.execute(true, false, false, false);
        outFiles.add(fOut);
    }
    System.out.println("**********************************");
    for (File f : outFiles) {
        System.out.println("   exported: " + f.getAbsolutePath());
    }
    System.out.println("**********************************");
}

From source file:net.ggtools.maven.ddlgenerator.DDLGenerator.java

License:Open Source License

public void createSchema() {
    log.info("Exporting DDL file to " + ddlFile);
    createDirectoriesIfNeeded();/*from w ww  .j a v  a  2 s  .  c o  m*/
    puManager.preparePersistenceUnitInfos();
    final PersistenceUnitInfo puInfo = puManager.obtainPersistenceUnitInfo(persistenceUnitName);
    final Ejb3Configuration ejb3Config = new Ejb3Configuration();
    ejb3Config.configure(puInfo, configProperties);
    final Field field = ReflectionUtils.findField(Ejb3Configuration.class, "cfg");
    ReflectionUtils.makeAccessible(field);
    final ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(configProperties)
            .buildServiceRegistry();
    final Configuration configuration = (Configuration) ReflectionUtils.getField(field, ejb3Config);
    final SchemaExport export = new SchemaExport(registry, configuration);
    export.setDelimiter(";"); // TODO introduce parameter
    export.setOutputFile(ddlFile.getAbsolutePath());
    export.execute(true, false, false, true);
}

From source file:net.leadware.hibernate4.maven.plugin.ShemaExportMojo.java

License:Apache License

public void execute() throws MojoExecutionException, MojoFailureException {

    // Un log/*from w  w w .j a  v  a2  s .co  m*/
    getLog().info("Exportation de l'Unite de persistence: " + unitName + ".");

    // Initialisation du repertoire de sortie
    initOutputDirectory();

    // Fichier de drop
    File dropFile = new File(dropOutputFile.trim());

    // Fichier de drop
    File createFile = new File(createOutputFile.trim());

    // Fichier de drop
    File updateFile = null;

    // Obtention du Thread courant
    final Thread currentThread = Thread.currentThread();

    // Obtention du stream de sortie
    final PrintStream oldOut = System.out;

    // Obtention du classloader du thread en cours
    final ClassLoader oldClassLoader = currentThread.getContextClassLoader();

    try {

        // Positionnement de la sortie par defaut
        System.setOut(new PrintStream(new ByteArrayOutputStream()));

        // Positionnement du classloader avec ajout des chemins de classe du projet maven sous-jacent
        currentThread.setContextClassLoader(buildClassLoader(oldClassLoader));

        // Configuration EJB3
        Ejb3Configuration jpaConfiguration = null;

        // Si le fichier de persistence est renseigne
        if (persistenceFile != null && !persistenceFile.trim().isEmpty()) {

            // On positionne le fichier de persistence
            jpaConfiguration = new Ejb3Configuration().addFile(persistenceFile).configure(unitName, null);

        } else {

            // Configuration EJB3
            jpaConfiguration = new Ejb3Configuration().configure(unitName, null);
        }

        // Configuration Hibernate
        Configuration configuration = jpaConfiguration.getHibernateConfiguration();

        // Si le dialect a ete precise dans la configuration du plugin
        if (dialect != null && !dialect.trim().isEmpty())
            configuration.setProperty("hibernate.dialect", dialect.trim());

        // Exporteur de schema
        SchemaExport exporter = new SchemaExport(configuration);

        // Positionnement du delimiteur
        exporter.setDelimiter(delimiter);

        // Positionnement du fichier de sortie en drop
        exporter.setOutputFile(dropFile.getAbsolutePath());

        // Exportation des scripts drop
        exporter.execute(true, false, true, false);

        // Positionnement du fichier de sortie en create
        exporter.setOutputFile(createFile.getAbsolutePath());

        // Exportation des scripts drop
        exporter.execute(true, false, false, true);

        // Si le chemin des scripts de mise a jour est positionne
        if (updateOutputFile != null && !updateOutputFile.trim().isEmpty()) {

            // Modificateur de schema
            SchemaUpdate updater = new SchemaUpdate(configuration);

            // Fichier de drop
            updateFile = new File(updateOutputFile.trim());

            // Positionnement du fichier de sortie en create
            updater.setOutputFile(updateFile.getAbsolutePath());

            // Exportation des scripts drop
            updater.execute(true, true);
        }

        // Si il ya des cripts additionnels
        if (extendedScripts != null) {

            // Parcours de la liste des scripts de creation
            for (String script : extendedScripts.getCreateScripts()) {

                // Tentative de construction d'un File sur le la chaine script
                File scriptFile = new File(script);

                // Si l'objet existe et est un fichier
                if (scriptFile.exists() && scriptFile.isFile()) {

                    // Ajout de son contenu dans le fichier de script en cours
                    FileUtils.fileAppend(createFile.getAbsolutePath(), "\n\n" + FileUtils.fileRead(scriptFile));

                } else {

                    // Ajout du script dans le fichier
                    FileUtils.fileAppend(createFile.getAbsolutePath(), "\n\t" + script);
                }
            }

            // Parcours de la liste des scripts de suppression
            for (String script : extendedScripts.getDropScripts()) {

                // Tentative de construction d'un File sur le la chaine script
                File scriptFile = new File(script);

                // Si l'objet existe et est un fichier
                if (scriptFile.exists() && scriptFile.isFile()) {

                    // Ajout de son contenu dans le fichier de script en cours
                    FileUtils.fileAppend(dropFile.getAbsolutePath(), "\n\n" + FileUtils.fileRead(scriptFile));

                } else {

                    // Ajout du script dans le fichier
                    FileUtils.fileAppend(dropFile.getAbsolutePath(), "\n\t" + script);
                }
            }

            // Si le chemin des scripts de mise a jour est positionne
            if (updateOutputFile != null && !updateOutputFile.trim().isEmpty()) {

                // Parcours de la liste des scripts de mise a jour
                for (String script : extendedScripts.getUpdateScripts()) {

                    // Tentative de construction d'un File sur le la chaine script
                    File scriptFile = new File(script);

                    // Si l'objet existe et est un fichier
                    if (scriptFile.exists() && scriptFile.isFile()) {

                        // Ajout de son contenu dans le fichier de script en cours
                        FileUtils.fileAppend(updateFile.getAbsolutePath(),
                                "\n\n" + FileUtils.fileRead(scriptFile));

                    } else {

                        // Ajout du script dans le fichier
                        FileUtils.fileAppend(updateFile.getAbsolutePath(), "\n\t" + script);
                    }
                }

            }
        }

    } catch (Exception e) {

        // On relance
        throw new MojoExecutionException(e.getMessage(), e);

    } finally {

        // On repositionne la sortie standard
        System.setOut(oldOut);

        // On repositionne le classloader
        currentThread.setContextClassLoader(oldClassLoader);
    }
}

From source file:nl.strohalm.cyclos.setup.ExportScript.java

License:Open Source License

/**
 * Export the script for creating the database
 *///from w ww .j ava 2  s  . c  o  m
public void run() {
    if (!exportTo.isAbsolute()) {
        exportTo = new File(SystemUtils.getUserDir(), exportTo.getPath());
    }
    // Resolve the file name
    if (exportTo.isDirectory()) {
        exportTo = new File(exportTo, "cyclos.ddl");
    }
    // Create the directory if needed
    final File dir = exportTo.getParentFile();
    if (!dir.exists()) {
        if (!dir.mkdirs()) {
            throw new IllegalStateException("Could not create directory: " + dir);
        }
    }
    final String fileName = exportTo.getAbsolutePath();

    Setup.out.println(bundle.getString("export-script.start"));

    final SchemaExport schemaExport = new SchemaExport(configuration);
    schemaExport.setDelimiter(";");
    schemaExport.setOutputFile(fileName);
    schemaExport.create(true, false);

    Setup.out.println(bundle.getString("export-script.end") + " " + fileName);
}

From source file:org.ambraproject.hibernate.SchemaGenerator.java

License:Apache License

/**
 * Generate the sql for creating the schema
 *
 * @param dialect - Database dialect to use
 *//*from  w w  w.  ja  v a 2 s  .c  o  m*/
public void generateSQL(Dialect dialect) {
    configuration.setProperty("hibernate.dialect", dialect.getDialectClass());

    SchemaExport export = new SchemaExport(configuration);
    export.setDelimiter(";");
    String outputFile = this.outputDir + File.separator + "ddl_" + dialect.name().toLowerCase() + ".sql";
    export.setOutputFile(outputFile);
    export.execute(false, false, false, !updateSchema);
}