List of usage examples for org.hibernate.tool.hbm2ddl SchemaExport setFormat
public SchemaExport setFormat(boolean format)
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 a v a 2 s.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:org.bedework.calcore.hibernate.SchemaBuilderImpl.java
License:Apache License
@Override public void execute(final Properties props, final String outputFile, final boolean export, final String delimiter) throws CalFacadeException { try {//from w w w . j a va 2 s. c om SchemaExport se = new SchemaExport(getConfiguration(props)); if (delimiter != null) { se.setDelimiter(delimiter); } se.setFormat(true); se.setHaltOnError(false); se.setOutputFile(outputFile); se.execute(false, // script - causes write to System.out if true export, false, // drop true); // create } catch (Throwable t) { throw new CalFacadeException(t); } }
From source file:org.bedework.synch.service.Synch.java
License:Apache License
@Override public String schema() { String result = "Export complete: check logs"; try {/*from w w w .j a v a2 s. c om*/ SchemaExport se = new SchemaExport(getConfiguration()); if (getDelimiter() != null) { se.setDelimiter(getDelimiter()); } se.setFormat(getFormat()); se.setHaltOnError(getHaltOnError()); se.setOutputFile(getSchemaOutFile()); se.setImportFile(getSqlIn()); se.execute(false, // script - causes write to System.out if true getExport(), getDrop(), getCreate()); } catch (Throwable t) { error(t); result = "Exception: " + t.getLocalizedMessage(); } finally { create = false; drop = false; export = false; } return result; }
From source file:org.codehaus.mojo.hibernate3.exporter.Hbm2DDLExporterMojo.java
License:Apache License
/** * Overrides the default implementation of executing this goal. * * @throws MojoExecutionException if there is an error executing the goal *///from w ww . ja v a 2 s. c o m protected void doExecute() throws MojoExecutionException { boolean scriptToConsole = getComponentProperty("console", true); boolean exportToDatabase = getComponentProperty("export", true); boolean haltOnError = getComponentProperty("haltonerror", false); boolean drop = getComponentProperty("drop", false); boolean create = getComponentProperty("create", true); String implementation = getComponentProperty("implementation", getComponent().getImplementation()); Configuration configuration = getComponentConfiguration(implementation).getConfiguration(this); if (getComponentProperty("update", false)) { SchemaUpdate update = new SchemaUpdate(configuration); update.execute(scriptToConsole, exportToDatabase); } else { SchemaExport export = new SchemaExport(configuration); export.setDelimiter(getComponentProperty("delimiter", ";")); export.setHaltOnError(haltOnError); export.setFormat(getComponentProperty("format", false)); String outputFilename = getComponentProperty("outputfilename"); if (outputFilename != null) { File outputFile = HibernateUtils.prepareFile( new File(getProject().getBasedir(), getComponent().getOutputDirectory()), outputFilename, "outputfilename"); export.setOutputFile(outputFile.toString()); } if (drop && create) { export.create(scriptToConsole, exportToDatabase); } else { export.execute(scriptToConsole, exportToDatabase, drop, create); } if (export.getExceptions().size() > 0) { Iterator iterator = export.getExceptions().iterator(); int cnt = 1; getLog().warn(export.getExceptions().size() + " errors occurred while performing <hbm2ddl>."); while (iterator.hasNext()) { getLog().error("Error #" + cnt + ": " + iterator.next().toString()); } if (haltOnError) { throw new MojoExecutionException("Errors while performing <hbm2ddl>"); } } } }
From source file:org.jboss.bpm.monitor.model.hibernate.SchemaGenerator.java
License:Apache License
/** * Method that actually creates the file. *///from ww w .j a v a 2s. c o m private void generate(Dialect dialect) { String s = output.getAbsolutePath() + "/ddl_" + dialect.name().toLowerCase() + ".sql"; cfg.setProperty("hibernate.dialect", dialect.getDialectClass()); SchemaExport export = new SchemaExport(cfg); export.setDelimiter(";"); export.setOutputFile(s); export.setFormat(true); export.setHaltOnError(true); export.execute(true, false, false, false); System.out.println("=================="); System.out.println("DDL: " + s); System.out.println("=================="); }
From source file:org.kuali.mobility.shared.controllers.HomeController.java
License:Open Source License
/** * Controller method to download a ddl./*from www . j a v a 2 s .com*/ */ @Deprecated @SuppressWarnings({ "unchecked", "rawtypes" }) @RequestMapping(value = "ddl", method = RequestMethod.GET) public void exportDatabaseSchema(HttpServletRequest request, HttpServletResponse response, Model uiModel) { PersistenceUnitInfo persistenceUnitInfo = getEntityManagerFactory().getPersistenceUnitInfo(); Map jpaPropertyMap = getEntityManagerFactory().getJpaPropertyMap(); jpaPropertyMap.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); Configuration configuration = new Ejb3Configuration().configure(persistenceUnitInfo, jpaPropertyMap) .getHibernateConfiguration(); SchemaExport schema = new SchemaExport(configuration); schema.setFormat(true); schema.setDelimiter(";"); schema.setOutputFile("/tmp/schema.sql"); schema.create(false, false); }
From source file:org.openbp.server.persistence.hibernate.HibernateDDLGenerator.java
License:Apache License
/** * Generates the DDL files.//from w w w. jav a 2 s . co m */ public void generate() { ProcessServer processServer = new ProcessServerFactory().createProcessServer(); PersistenceContextProvider provider = processServer.getEngine().getPersistenceContextProvider(); if (provider == null) { String msg = LogUtil.error(getClass(), "No persistence context provider configured."); System.err.println(msg); System.exit(1); return; } if (!(provider instanceof HibernatePersistenceContextProvider)) { String msg = LogUtil.error(getClass(), "Configured persistence context provider no no Hibernate provider (class $0).", provider.getClass().getName()); System.err.println(msg); System.exit(1); return; } Configuration configuration = ((HibernatePersistenceContextProvider) provider) .createHibernateConfiguration(); if (dialect != null) { String adapterClassName = null; if (dialect.indexOf('.') >= 0) { adapterClassName = dialect; } else { adapterClassName = "org.hibernate.dialect." + dialect + "Dialect"; } configuration.setProperty("hibernate.dialect", adapterClassName); } SchemaExport se = new SchemaExport(configuration); se.setFormat(true); se.setDelimiter(";"); String outputFile; if ((outputFile = prepareOutputFile(getDdlCreateFileName())) != null) { se.setOutputFile(outputFile); se.execute(false, false, false, true); } if ((outputFile = prepareOutputFile(getDdlDropFileName())) != null) { se.setOutputFile(outputFile); se.execute(false, false, true, false); } }
From source file:org.springframework.cloud.dataflow.server.repository.SchemaGenerationTests.java
License:Apache License
private void generateDdlFiles(String dialect, File tempDir, PersistenceUnitInfo persistenceUnitInfo) { logger.info("Generating DDL script for " + dialect); final MetadataSources metadata = new MetadataSources(new StandardServiceRegistryBuilder() .applySetting("hibernate.dialect", "org.hibernate.dialect." + dialect + "Dialect") .applySetting("hibernate.physical_naming_strategy", SpringPhysicalNamingStrategy.class.getName()) .applySetting("hibernate.implicit_naming_strategy", SpringImplicitNamingStrategy.class.getName()) .build());/*from www. j av a 2 s . co m*/ for (String clazz : persistenceUnitInfo.getManagedClassNames()) { logger.info(clazz); metadata.addAnnotatedClassName(clazz); } final SchemaExport export; try { export = new SchemaExport(); export.setDelimiter(";"); export.setFormat(true); export.setOutputFile(new File(tempDir, "schema-" + dialect.toLowerCase() + ".sql").getAbsolutePath()); } catch (HibernateException e) { throw new IllegalStateException(e); } EnumSet<TargetType> targetTypes = EnumSet.of(TargetType.SCRIPT); export.execute(targetTypes, SchemaExport.Action.BOTH, metadata.buildMetadata()); }
From source file:org.stanwood.media.database.DBHelper.java
License:Open Source License
/** * Uses to get the database schema for a given dialect * @param dialect The dialect//from www. j a v a 2 s. co m * @return The schema * @throws DatabaseException Thrown if their is a problem with hibernate */ public String getSchema(String dialect) throws DatabaseException { try { Configuration config = getConfiguration("", "", "", dialect, SchemaCheck.NONE); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ SchemaExport exporter = new SchemaExport(config); exporter.setFormat(true); File file = FileHelper.createTempFile("schema", ".sql"); //$NON-NLS-1$//$NON-NLS-2$ try { exporter.setOutputFile(file.getAbsolutePath()); exporter.create(true, false); return FileHelper.readFileContents(file); } finally { FileHelper.delete(file); } } catch (HibernateException e) { throw new DatabaseException(Messages.getString("DBHelper.UnablePrintSchema"), e); //$NON-NLS-1$ } catch (XMLParserException e) { throw new DatabaseException(Messages.getString("DBHelper.UnablePrintSchema"), e); //$NON-NLS-1$ } catch (IOException e) { throw new DatabaseException(Messages.getString("DBHelper.UnablePrintSchema"), e); //$NON-NLS-1$ } }
From source file:play.modules.db.Exporter.java
License:Apache License
public static void main(String[] args) throws Exception { File root = new File(System.getProperty("application.path")); Play.init(root, System.getProperty("play.id", "")); List<Class> entities = Play.classloader.getAnnotatedClasses(Entity.class); AnnotationConfiguration cfg = new AnnotationConfiguration(); cfg.setProperty("hibernate.hbm2ddl.auto", "create"); for (Class _class : entities) { cfg.addAnnotatedClass(_class); }/* w w w . ja v a 2s .c o m*/ Thread.currentThread().setContextClassLoader(Play.classloader); final String dialect = Play.configuration.getProperty("jpa.dialect"); if (dialect != null) cfg.setProperty("hibernate.dialect", dialect); final String driver = Play.configuration.getProperty("db.driver"); if (driver != null) cfg.setProperty("hibernate.connection.driver_class", driver); final String user = Play.configuration.getProperty("db.user"); if (user != null) cfg.setProperty("hibernate.connection.username", user); final String password = Play.configuration.getProperty("db.pass"); if (password != null) cfg.setProperty("hibernate.connection.password", password); final String url = Play.configuration.getProperty("db.url"); if (url != null) cfg.setProperty("hibernate.connection.url", url); boolean script = true; boolean drop = false; boolean create = false; boolean halt = false; boolean export = false; String outFile = null; String importFile = "/import.sql"; String propFile = null; boolean format = true; String delim = ";"; for (int i = 0; i < args.length; i++) { if (args[i].startsWith("--")) { if (args[i].equals("--quiet")) { script = false; } else if (args[i].equals("--drop")) { drop = true; } else if (args[i].equals("--create")) { create = true; } else if (args[i].equals("--haltonerror")) { halt = true; } else if (args[i].equals("--export")) { export = true; } else if (args[i].startsWith("--output=")) { outFile = args[i].substring(9); } else if (args[i].startsWith("--import=")) { importFile = args[i].substring(9); } else if (args[i].startsWith("--properties=")) { propFile = args[i].substring(13); } else if (args[i].equals("--noformat")) { format = false; } else if (args[i].startsWith("--delimiter=")) { delim = args[i].substring(12); } else if (args[i].startsWith("--config=")) { cfg.configure(args[i].substring(9)); } else if (args[i].startsWith("--naming=")) { cfg.setNamingStrategy( (NamingStrategy) ReflectHelper.classForName(args[i].substring(9)).newInstance()); } } } if (propFile != null) { Properties props = new Properties(); props.putAll(cfg.getProperties()); props.load(new FileInputStream(propFile)); cfg.setProperties(props); } SchemaExport se = new SchemaExport(cfg).setHaltOnError(halt).setOutputFile(outFile) .setImportFile(importFile).setDelimiter(delim); if (format) { se.setFormat(true); } se.execute(script, export, drop, create); }