This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit 49444e38a2741dee5ab6e59af942cf9566f8fb0d Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Dec 31 19:36:45 2015 +0100 Ajout de la réplication au niveau du topia application context + suppression autoMigrate configuration --- .../observe/ObserveTopiaApplicationContext.java | 111 ++++++++++++++++++--- .../observe/ObserveTopiaConfigurationFactory.java | 20 +--- .../fr/ird/observe/entities/SqlDatabaseType.java | 26 +++++ .../ObserveTopiaApplicationContextTest.java | 1 - .../ObserveTopiaApplicationContextFactory.java | 3 - .../services/service/DataSourceServiceTopia.java | 6 +- 6 files changed, 128 insertions(+), 39 deletions(-) diff --git a/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java b/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java index 38862ab..5e4e31e 100644 --- a/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java +++ b/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java @@ -22,11 +22,16 @@ package fr.ird.observe; * #L% */ +import fr.ird.observe.entities.Entities; +import fr.ird.observe.entities.SqlDatabaseType; import fr.ird.observe.entities.migration.ObserveMigrationEngine; +import fr.ird.observe.entities.replication.ObserveReplicationTables; +import org.apache.commons.io.output.WriterOutputStream; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; import org.hibernate.cfg.Configuration; +import org.hibernate.cfg.Environment; import org.hibernate.tool.hbm2ddl.SchemaExport; import org.nuiton.topia.persistence.TopiaException; import org.nuiton.topia.persistence.jdbc.JdbcH2Helper; @@ -40,15 +45,19 @@ import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.io.Writer; import java.nio.file.Files; import java.nio.file.Path; import java.util.Objects; +import java.util.Properties; import java.util.UUID; import java.util.zip.GZIPInputStream; public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicationContext { - /** Logger. */ + /** + * Logger. + */ private static final Log log = LogFactory.getLog(ObserveTopiaApplicationContext.class); public static final String MIGRATION_SERVICE_NAME = "migration"; @@ -59,12 +68,10 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat public static final String DB_VERSION = "db.version"; - public static final String AUTO_MIGRATE = "auto.migrate"; - - private static final String CREATE_SCHEMA_SCRIPT = "CREATE SCHEMA OBSERVE_COMMON; CREATE SCHEMA OBSERVE_LONGLINE; CREATE SCHEMA OBSERVE_SEINE;"; - - //FIXME Voir comment remplir ça (probablement pour les tests ?) - protected boolean autoMigrate; + private static final String CREATE_SCHEMA_SCRIPT + = "CREATE SCHEMA OBSERVE_COMMON IF NOT EXISTS;\n" + + "CREATE SCHEMA OBSERVE_LONGLINE IF NOT EXISTS;\n" + + "CREATE SCHEMA OBSERVE_SEINE IF NOT EXISTS;\n"; /** * Mise à {@code true} quand au moins une connection a été effectuée. @@ -83,14 +90,6 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat return (ObserveTopiaConfiguration) super.getConfiguration(); } - public boolean isAutoMigrate() { - return autoMigrate; - } - - public void setAutoMigrate(boolean autoMigrate) { - this.autoMigrate = autoMigrate; - } - public boolean isOpen() { return isOpened() && open; } @@ -207,4 +206,86 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat } } + + public void replicateAllTrips(Writer writer) { + + TopiaSqlReplicationService sqlReplicationService = getSqlReplicationService(); + sqlReplicationService + .newReplicatetoSqlActionBuilder(writer) + .setTables(ObserveReplicationTables.getTripSeineTables(false)) + .build().run(); + + sqlReplicationService + .newReplicatetoSqlActionBuilder(writer) + .setTables(ObserveReplicationTables.getTripLonglineTables(false)) + .build().run(); + + } + + public void replicateTrips(Writer writer, Iterable<String> tripIds) { + + TopiaSqlReplicationService sqlReplicationService = getSqlReplicationService(); + + for (String tripId : tripIds) { + + if (Entities.isSeineId(tripId)) { + + sqlReplicationService + .newReplicatetoSqlActionBuilder(writer) + .setTables(ObserveReplicationTables.getTripSeineTables(true)) + .setArg(tripId) + .build().run(); + } else { + + sqlReplicationService + .newReplicatetoSqlActionBuilder(writer) + .setTables(ObserveReplicationTables.getTripLonglineTables(true)) + .setArg(tripId) + .build().run(); + + } + } + + } + + public void replicateReferentials(Writer writer) { + + TopiaSqlReplicationService sqlReplicationService = getSqlReplicationService(); + sqlReplicationService + .newReplicatetoSqlActionBuilder(writer) + .setTables(ObserveReplicationTables.getReferentialTables()) + .build().run(); + + } + + public void replicateSchema(SqlDatabaseType databaseType, File temporaryDirectory, Writer writer) throws IOException { + + writer.append(CREATE_SCHEMA_SCRIPT); + + try { + + File sqlScriptFile = new File(temporaryDirectory, "replicateSchema_" + System.nanoTime() + ".sql"); + + Configuration hibernateConfiguration = getHibernateProvider().getHibernateConfiguration(); + + Properties properties = new Properties(); + + properties.put(Environment.DIALECT, databaseType.getDialectType().getName()); + + new SchemaExport(hibernateConfiguration, properties) + .setOutputFile(sqlScriptFile.getAbsolutePath()) + .setDelimiter(";") + .create(false, false); + + WriterOutputStream out = new WriterOutputStream(writer); + Files.copy(sqlScriptFile.toPath(), out); + out.flush(); + Files.delete(sqlScriptFile.toPath()); + + } catch (HibernateException eee) { + throw new TopiaException(String.format("Could not create schema for reason: %s", eee.getMessage()), eee); + } + + } + } diff --git a/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaConfigurationFactory.java b/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaConfigurationFactory.java index 498acb2..3bc774d 100644 --- a/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaConfigurationFactory.java +++ b/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaConfigurationFactory.java @@ -87,7 +87,6 @@ public class ObserveTopiaConfigurationFactory { String username, String password, boolean initSchema, - boolean autoMigrate, boolean showMigrationSql, boolean showMigrationProgression) { @@ -95,8 +94,7 @@ public class ObserveTopiaConfigurationFactory { ObserveTopiaConfiguration topiaConfiguration = createTopiaConfiguration(jdbcConfiguration, initSchema, - autoMigrate, - showMigrationSql, + showMigrationSql, showMigrationProgression, false); @@ -112,7 +110,6 @@ public class ObserveTopiaConfigurationFactory { String username, String password, boolean initSchema, - boolean autoMigrate, boolean showMigrationSql, boolean showMigrationProgression) { @@ -123,8 +120,7 @@ public class ObserveTopiaConfigurationFactory { ObserveTopiaConfiguration topiaConfiguration = createTopiaConfiguration(jdbcConfiguration, initSchema, - autoMigrate, - showMigrationSql, + showMigrationSql, showMigrationProgression, true); @@ -137,7 +133,6 @@ public class ObserveTopiaConfigurationFactory { protected static ObserveTopiaConfiguration createTopiaConfiguration(JdbcConfiguration jdbcConfiguration, boolean initSchema, - boolean autoMigrate, boolean showMigrationSql, boolean showMigrationProgression, boolean h2Configuration) { @@ -154,19 +149,12 @@ public class ObserveTopiaConfigurationFactory { ImmutableMap<String, String> migrationServiceConfiguration = ImmutableMap.of( ObserveMigrationEngine.MIGRATION_CALLBACK, H2DataSourceMigration.class.getName(), ObserveMigrationEngine.MIGRATION_SHOW_PROGRESSION, String.valueOf(showMigrationProgression), - ObserveMigrationEngine.MIGRATION_SHOW_SQL, String.valueOf(showMigrationSql), - ObserveTopiaApplicationContext.AUTO_MIGRATE, String.valueOf(autoMigrate) + ObserveMigrationEngine.MIGRATION_SHOW_SQL, String.valueOf(showMigrationSql) ); topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME, ObserveMigrationEngine.class, migrationServiceConfiguration); topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.REPLICATION_SERVICE_NAME, TopiaReplicationServiceImpl.class); topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.SQL_REPLICATION_SERVICE_NAME, TopiaSqlReplicationServiceImpl .class); -// if (h2Configuration) { -// //FIXME J'ai mis ça mais sans conviction car y'a d'autres pb à régler et c3p0 n'est peut-être pas la cause -// // On ne veut pas utiliser c3pO dans ce cas -// topiaConfiguration.setHibernateExtraConfiguration( -// ImmutableMap.of("hibernate.connection.provider_class", "org.nuiton.topia.persistence.internal.TopiaConnectionProvider") -// ); -// } + return topiaConfiguration; } diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/SqlDatabaseType.java b/observe-entities/src/main/java/fr/ird/observe/entities/SqlDatabaseType.java new file mode 100644 index 0000000..bf03604 --- /dev/null +++ b/observe-entities/src/main/java/fr/ird/observe/entities/SqlDatabaseType.java @@ -0,0 +1,26 @@ +package fr.ird.observe.entities; + +import org.hibernate.dialect.Dialect; +import org.hibernate.dialect.H2Dialect; +import org.hibernate.dialect.PostgreSQL9Dialect; + +/** + * Created on 31/12/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public enum SqlDatabaseType { + + h2(H2Dialect.class), + postgres(PostgreSQL9Dialect.class); + + private final Class<? extends Dialect> dialectType; + + SqlDatabaseType(Class<? extends Dialect> dialectType) { + this.dialectType = dialectType; + } + + public Class<? extends Dialect> getDialectType() { + return dialectType; + } +} diff --git a/observe-entities/src/test/java/fr/ird/observe/ObserveTopiaApplicationContextTest.java b/observe-entities/src/test/java/fr/ird/observe/ObserveTopiaApplicationContextTest.java index abcef39..cef34aa 100644 --- a/observe-entities/src/test/java/fr/ird/observe/ObserveTopiaApplicationContextTest.java +++ b/observe-entities/src/test/java/fr/ird/observe/ObserveTopiaApplicationContextTest.java @@ -75,7 +75,6 @@ public class ObserveTopiaApplicationContextTest { String.valueOf(TestHelper.TEST_H2_PASSWORD), true, true, - true, true ); diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveTopiaApplicationContextFactory.java b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveTopiaApplicationContextFactory.java index 124a7d3..43631a4 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveTopiaApplicationContextFactory.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveTopiaApplicationContextFactory.java @@ -130,7 +130,6 @@ public class ObserveTopiaApplicationContextFactory { configuration.getUsername(), String.valueOf(configuration.getPassword()), initSchema, - configuration.isAutoMigrate(), configuration.isShowMigrationSql(), configuration.isShowMigrationProgression() ); @@ -159,7 +158,6 @@ public class ObserveTopiaApplicationContextFactory { configuration.getUsername(), String.valueOf(configuration.getPassword()), initSchema, - configuration.isAutoMigrate(), configuration.isShowMigrationSql(), configuration.isShowMigrationProgression() ); @@ -179,7 +177,6 @@ public class ObserveTopiaApplicationContextFactory { public MyObserveTopiaApplicationContext(ObserveTopiaConfiguration topiaConfiguration, ObserveDataSourceConfigurationTopiaSupport observeDataSourceConfiguration) { super(topiaConfiguration); this.observeDataSourceConfiguration = observeDataSourceConfiguration; - setAutoMigrate(observeDataSourceConfiguration.isAutoMigrate()); TOPIA_APPLICATION_CONTEXT_CACHE.put(observeDataSourceConfiguration, this); } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java index 9150146..2577552 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java @@ -102,8 +102,7 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS h2DataSourceConfiguration.getUsername(), new String(h2DataSourceConfiguration.getPassword()), false, - false, - false, + false, false); @@ -128,8 +127,7 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS pgDataSourceConfiguration.getUsername(), new String(pgDataSourceConfiguration.getPassword()), false, - false, - false, + false, false); try { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.