Example #1
0
  /** Generate database schema and initial data for a defined dialect */
  public static void generateDatabase(String dialect) throws IOException {
    // Configure Hibernate
    log.info("Exporting Database Schema...");
    String dbSchema = EnvironmentDetector.getUserHome() + "/schema.sql";
    Configuration cfg = getConfiguration().configure();
    cfg.setProperty("hibernate.dialect", dialect);
    SchemaExport se = new SchemaExport(cfg);
    se.setOutputFile(dbSchema);
    se.setDelimiter(";");
    se.setFormat(false);
    se.create(false, false);
    log.info("Database Schema exported to {}", dbSchema);

    String initialData = new File("").getAbsolutePath() + "/src/main/resources/default.sql";
    log.info("Exporting Initial Data from '{}'...", initialData);
    String initData = EnvironmentDetector.getUserHome() + "/data.sql";
    FileInputStream fis = new FileInputStream(initialData);
    String ret = DatabaseDialectAdapter.dialectAdapter(fis, dialect);
    FileWriter fw = new FileWriter(initData);
    IOUtils.write(ret, fw);
    fw.flush();
    fw.close();
    log.info("Initial Data exported to {}", initData);
  }
Example #2
0
  /** Get instance */
  public static SessionFactory getSessionFactory(String hbm2ddl) {
    if (sessionFactory == null) {
      try {
        // Configure Hibernate
        Configuration cfg = getConfiguration().configure();
        cfg.setProperty("hibernate.dialect", Config.HIBERNATE_DIALECT);
        cfg.setProperty("hibernate.connection.datasource", Config.HIBERNATE_DATASOURCE);
        cfg.setProperty("hibernate.hbm2ddl.auto", hbm2ddl);
        cfg.setProperty("hibernate.show_sql", Config.HIBERNATE_SHOW_SQL);
        cfg.setProperty("hibernate.generate_statistics", Config.HIBERNATE_STATISTICS);
        cfg.setProperty("hibernate.search.analyzer", Config.HIBERNATE_SEARCH_ANALYZER);
        cfg.setProperty(
            "hibernate.search.default.directory_provider",
            "org.hibernate.search.store.FSDirectoryProvider");
        cfg.setProperty("hibernate.search.default.indexBase", Config.HIBERNATE_SEARCH_INDEX_HOME);
        cfg.setProperty("hibernate.search.default.optimizer.operation_limit.max", "500");
        cfg.setProperty("hibernate.search.default.optimizer.transaction_limit.max", "75");
        cfg.setProperty("hibernate.worker.execution", "async");

        // http://relation.to/Bloggers/PostgreSQLAndBLOBs
        // cfg.setProperty("hibernate.jdbc.use_streams_for_binary", "false");

        // Show configuration
        log.info("Hibernate 'hibernate.dialect' = {}", cfg.getProperty("hibernate.dialect"));
        log.info(
            "Hibernate 'hibernate.connection.datasource' = {}",
            cfg.getProperty("hibernate.connection.datasource"));
        log.info(
            "Hibernate 'hibernate.hbm2ddl.auto' = {}", cfg.getProperty("hibernate.hbm2ddl.auto"));
        log.info("Hibernate 'hibernate.show_sql' = {}", cfg.getProperty("hibernate.show_sql"));
        log.info(
            "Hibernate 'hibernate.generate_statistics' = {}",
            cfg.getProperty("hibernate.generate_statistics"));
        log.info(
            "Hibernate 'hibernate.search.default.directory_provider' = {}",
            cfg.getProperty("hibernate.search.default.directory_provider"));
        log.info(
            "Hibernate 'hibernate.search.default.indexBase' = {}",
            cfg.getProperty("hibernate.search.default.indexBase"));

        if (HBM2DDL_CREATE.equals(hbm2ddl)) {
          // In case of database schema creation, also clean filesystem data.
          // This means, conversion cache, file datastore and Lucene indexes.
          log.info("Cleaning filesystem data from: {}", Config.REPOSITORY_HOME);
          FileUtils.deleteQuietly(new File(Config.REPOSITORY_HOME));
        }

        // Create database schema, if needed
        sessionFactory = cfg.buildSessionFactory();

        if (HBM2DDL_CREATE.equals(hbm2ddl)) {
          log.info("Executing specific import for: {}", Config.HIBERNATE_DIALECT);
          InputStream is = ConfigUtils.getResourceAsStream("default.sql");
          String adapted = DatabaseDialectAdapter.dialectAdapter(is, Config.HIBERNATE_DIALECT);
          executeImport(new StringReader(adapted));
          IOUtils.closeQuietly(is);
        }

        if (HBM2DDL_CREATE.equals(hbm2ddl) || HBM2DDL_UPDATE.equals(hbm2ddl)) {
          // Create or update translations
          for (String res : ConfigUtils.getResources("i18n")) {
            String oldTrans = null;
            String langId = null;

            // Preserve translation changes
            if (HBM2DDL_UPDATE.equals(hbm2ddl)) {
              langId = FileUtils.getFileName(res);
              log.info("Preserving translations for: {}", langId);
              oldTrans = preserveTranslations(langId);
            }

            InputStream isLang = ConfigUtils.getResourceAsStream("i18n/" + res);
            log.info("Importing translation: {}", res);
            executeImport(new InputStreamReader(isLang));
            IOUtils.closeQuietly(isLang);

            // Apply previous translation changes
            if (HBM2DDL_UPDATE.equals(hbm2ddl)) {
              if (oldTrans != null) {
                log.info("Restoring translations for: {}", langId);
                executeImport(new StringReader(oldTrans));
              }
            }
          }

          // Replace "create" or "update" by "none" to prevent repository reset on restart
          if (Boolean.parseBoolean(Config.HIBERNATE_CREATE_AUTOFIX)) {
            log.info("Executing Hibernate create autofix");
            hibernateCreateAutofix(Config.HOME_DIR + "/" + Config.OPENKM_CONFIG);
          } else {
            log.info(
                "Hibernate create autofix not executed because of {}={}",
                Config.PROPERTY_HIBERNATE_CREATE_AUTOFIX,
                Config.HIBERNATE_CREATE_AUTOFIX);
          }
        }
      } catch (HibernateException e) {
        log.error(e.getMessage(), e);
        throw new ExceptionInInitializerError(e);
      } catch (URISyntaxException e) {
        log.error(e.getMessage(), e);
        throw new ExceptionInInitializerError(e);
      } catch (IOException e) {
        log.error(e.getMessage(), e);
        throw new ExceptionInInitializerError(e);
      }
    }

    return sessionFactory;
  }