List of usage examples for org.hibernate.tool.hbm2ddl SchemaExport setOutputFile
public SchemaExport setOutputFile(String filename)
From source file:com.wavemaker.tools.data.ExportDB.java
License:Open Source License
@Override protected void customRun() { init();//from w w w. j a va 2 s .c o m final Configuration cfg = new Configuration(); // cfg.addDirectory(this.hbmFilesDir); this.hbmFilesDir.find().files().performOperation(new ResourceOperation<com.wavemaker.tools.io.File>() { @Override public void perform(com.wavemaker.tools.io.File file) { if (file.getName().endsWith(".hbm.xml")) { cfg.addInputStream(file.getContent().asInputStream()); } } }); Properties connectionProperties = getHibernateConnectionProperties(); cfg.addProperties(connectionProperties); SchemaExport export = null; SchemaUpdate update = null; File ddlFile = null; try { if (this.overrideTable) { Callable<SchemaExport> t = new Callable<SchemaExport>() { @Override public SchemaExport call() { return new SchemaExport(cfg); } }; if (this.classesDir == null) { try { export = t.call(); } catch (Exception e) { ReflectionUtils.rethrowRuntimeException(e); } } else { export = ResourceClassLoaderUtils.runInClassLoaderContext(true, t, this.classesDir); } ddlFile = File.createTempFile("ddl", ".sql"); ddlFile.deleteOnExit(); export.setOutputFile(ddlFile.getAbsolutePath()); export.setDelimiter(";"); export.setFormat(true); String extraddl = prepareForExport(this.exportToDatabase); export.create(this.verbose, this.exportToDatabase); this.errors = CastUtils.cast(export.getExceptions()); this.errors = filterError(this.errors, connectionProperties); this.ddl = IOUtils.read(ddlFile); if (!ObjectUtils.isNullOrEmpty(extraddl)) { this.ddl = extraddl + "\n" + this.ddl; } } else { Callable<SchemaUpdate> t = new Callable<SchemaUpdate>() { @Override public SchemaUpdate call() { return new SchemaUpdate(cfg); } }; if (this.classesDir == null) { try { update = t.call(); } catch (Exception e) { ReflectionUtils.rethrowRuntimeException(e); } } else { update = ResourceClassLoaderUtils.runInClassLoaderContext(t, this.classesDir); } prepareForExport(this.exportToDatabase); Connection conn = JDBCUtils.getConnection(this.connectionUrl.toString(), this.username, this.password, this.driverClassName); Dialect dialect = Dialect.getDialect(connectionProperties); DatabaseMetadata meta = new DatabaseMetadata(conn, dialect); String[] updateSQL = cfg.generateSchemaUpdateScript(dialect, meta); update.execute(this.verbose, this.exportToDatabase); this.errors = CastUtils.cast(update.getExceptions()); StringBuilder sb = new StringBuilder(); for (String line : updateSQL) { sb = sb.append(line); sb = sb.append("\n"); } this.ddl = sb.toString(); } } catch (IOException ex) { throw new DataServiceRuntimeException(ex); } catch (SQLException qex) { throw new DataServiceRuntimeException(qex); } catch (RuntimeException rex) { if (rex.getCause() != null && rex.getCause().getMessage().contains(NO_SUITABLE_DRIVER) && WMAppContext.getInstance().isCloudFoundry()) { String msg = rex.getMessage() + " - " + UNKNOWN_DATABASE; throw new DataServiceRuntimeException(msg); } else { throw new DataServiceRuntimeException(rex); } } finally { try { ddlFile.delete(); } catch (Exception ignore) { } } }
From source file:com.zeroone.guestebook.domain.SchemaGenerator.java
License:Apache License
/** * Method that actually creates the file. * * @return the generated {@link File}./*from w w w . j a v a2 s. co m*/ */ public File generate(File directory) { SchemaExport export = new SchemaExport(metadata); export.setDelimiter(";"); File file = new File(directory, String.format("ddl_%s.sql", dialect.name().toLowerCase())); export.setOutputFile(file.getAbsolutePath()); export.setFormat(true); export.execute(true, false, false, false); return file; }
From source file:csns.util.Hbm2ddl.java
License:Open Source License
public static void main(String args[]) { if (args.length == 0) { System.err.println("java Hbm2ddl <outputFile>"); return;/*from w w w. jav a 2 s . co m*/ } System.out.print("Export DDL to " + args[0] + " ... "); Configuration cfg = (new Ejb3Configuration()).configure("csns2", new HashMap<String, Object>()) .getHibernateConfiguration(); SchemaExport schemaExport = new SchemaExport(cfg); schemaExport.setOutputFile(args[0]).setDelimiter(";").setFormat(true).setHaltOnError(true); // . output script to console (and file if outputFile is set): true // . export to database: false // . only drop the tables: false // . only create the tables: true schemaExport.execute(true, false, false, true); System.out.println("Done."); }
From source file:de.evjnw.jlk.work.impl.DaoFactoryImpl.java
License:Apache License
/** * @param user/* ww w . j a v a 2s. c o m*/ * technischer Benutzer an der Datenbank * @param password * Passwort des technischen Benutzers an der Datenbank * @throws DaoConfigurationException * wenn bei der Verarbeitung der Hibernate Configuration ein Fehler auftritt */ public DaoFactoryImpl(String user, String password) throws DaoConfigurationException { // TODO: user und password merken? try { // frhzeitig die Konfiguration laden und so Fehler bemerken Configuration configuration = loadConfiguration(); if (exportSchemaForTests) { SchemaExport export = new SchemaExport(configuration); export.setOutputFile("create_jlk.sql"); boolean writeScript = true; boolean executeDdl = true; export.create(writeScript, executeDdl); } } catch (HibernateException he) { throw new DaoConfigurationException(he.getMessage(), he); } }
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 w w .j ava 2s . 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 www . j av a2 s . c o m * * @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) {/* w ww . j av a2s . c o m*/ 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:de.tuclausthal.submissioninterface.util.HibernateSQLExporter.java
License:Open Source License
public static void main(String[] fdf) { SchemaExport bla = new SchemaExport(new AnnotationConfiguration().configure()); bla.setOutputFile("1.sql"); bla.execute(false, false, false, false); }
From source file:edu.csula.squirrels.util.Hbm2ddl.java
License:Open Source License
public static void main(String args[]) { if (args.length == 0) { System.err.println("java Hbm2ddl <outputFile>"); return;/*from w w w. j a v a2 s .c om*/ } System.out.print("Export DDL to " + args[0] + " ... "); Configuration cfg = (new Ejb3Configuration()).configure("squirrels", new HashMap<String, Object>()) .getHibernateConfiguration(); SchemaExport schemaExport = new SchemaExport(cfg); schemaExport.setOutputFile(args[0]).setDelimiter(";").setFormat(true).setHaltOnError(true); // . output script to console (and file if outputFile is set): true // . export to database: false // . only drop the tables: false // . only create the tables: true schemaExport.execute(true, false, false, true); System.out.println("Done."); }
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 ww 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("**********************************"); }