This is an automated email from the git hooks/post-receive script. New commit to branch feature/7464 in repository observe. See http://git.codelutin.com/observe.git commit 38a2b7800cf785a42858699f3841a75d5a14ef24 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Aug 21 19:14:34 2015 +0200 Debut de boot avec topia 3.0, reste à écrire la logique d'ouverture ou création de base --- .../services/ObserveServiceContextTopia.java | 39 +++-- .../services/ObserveServiceFactoryTopia.java | 180 +++++++++++++++------ .../ird/observe/services/ObserveServiceTopia.java | 27 ++-- .../services/service/DataSourceServiceTopia.java | 48 ++++++ .../services/ObserveServiceFactoryTopiaTaiste.java | 21 +-- .../service/ApplicationContextResource.java | 31 ++-- .../services/service/DataSourceResource.java | 87 +++++----- .../service/ReferentialServiceTopiaTest.java | 28 ++-- pom.xml | 4 +- 9 files changed, 294 insertions(+), 171 deletions(-) diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceContextTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceContextTopia.java index d6bad44..960a636 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceContextTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceContextTopia.java @@ -1,9 +1,9 @@ package fr.ird.observe.services; +import fr.ird.observe.ObserveTopiaApplicationContext; +import fr.ird.observe.ObserveTopiaPersistenceContext; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaSupport; import fr.ird.observe.services.dto.constants.ReferentialLocale; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.framework.TopiaContextImplementor; import java.util.Date; @@ -18,22 +18,14 @@ public class ObserveServiceContextTopia implements ObserveServiceContext { protected ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration; - protected TopiaContext topiaPersistenceContext; + protected ObserveTopiaPersistenceContext topiaPersistenceContext; - protected TopiaContextImplementor topiaApplicationContext; + protected ObserveTopiaApplicationContext topiaApplicationContext; - public TopiaContextImplementor getTopiaApplicationContext() { + public ObserveTopiaApplicationContext getTopiaApplicationContext() { return topiaApplicationContext; } - public TopiaContext getTopiaPersistenceContext() { - return topiaPersistenceContext; - } - - public void setTopiaPersistenceContext(TopiaContext topiaPersistenceContext) { - this.topiaPersistenceContext = topiaPersistenceContext; - } - @Override public ReferentialLocale getReferentialLocale() { return applicationContext.getReferentialLocale(); @@ -44,6 +36,22 @@ public class ObserveServiceContextTopia implements ObserveServiceContext { return new Date(); } + public ObserveServiceApplicationContext getApplicationContext() { + return applicationContext; + } + + public ObserveTopiaPersistenceContext getTopiaPersistenceContext() { + return topiaPersistenceContext; + } + + public void setTopiaPersistenceContext(ObserveTopiaPersistenceContext topiaPersistenceContext) { + this.topiaPersistenceContext = topiaPersistenceContext; + } + + public void setTopiaApplicationContext(ObserveTopiaApplicationContext topiaApplicationContext) { + this.topiaApplicationContext = topiaApplicationContext; + } + public void setApplicationContext(ObserveServiceApplicationContext applicationContext) { this.applicationContext = applicationContext; } @@ -52,12 +60,9 @@ public class ObserveServiceContextTopia implements ObserveServiceContext { this.dataSourceConfiguration = dataSourceConfiguration; } - public void setTopiaApplicationContext(TopiaContextImplementor topiaApplicationContext) { - this.topiaApplicationContext = topiaApplicationContext; - } public void closeTopiaPersistenceContext() { - topiaPersistenceContext.closeContext(); + topiaPersistenceContext.close(); topiaPersistenceContext = null; } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceFactoryTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceFactoryTopia.java index 13bc86b..9da62c1 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceFactoryTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceFactoryTopia.java @@ -4,15 +4,15 @@ import com.google.common.base.Preconditions; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.reflect.Reflection; -import fr.ird.observe.ObserveTechnicalException; -import fr.ird.observe.db.DataSourceFactory; -import fr.ird.observe.db.constants.CommonDataSourceConfigParam; -import fr.ird.observe.db.impl.H2DataSourceConfig; -import fr.ird.observe.db.impl.H2DataSourceConfigParam; -import fr.ird.observe.db.impl.PGDataSourceConfig; -import fr.ird.observe.db.impl.PGDataSourceConfigParam; +import fr.ird.observe.ObserveTopiaApplicationContext; +import fr.ird.observe.ObserveTopiaIdFactory; +import fr.ird.observe.ObserveTopiaPersistenceContext; +import fr.ird.observe.entities.migration.H2DataSourceMigration; +import fr.ird.observe.entities.migration.ObserveMigrationEngine; +import fr.ird.observe.entities.migration.PGDataSourceMigration; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaPG; @@ -21,13 +21,19 @@ import fr.ird.observe.services.spi.NoDataAccess; import fr.ird.observe.services.spi.Write; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.framework.TopiaContextImplementor; +import org.nuiton.topia.persistence.BeanTopiaConfiguration; +import org.nuiton.topia.persistence.TopiaApplicationContext; +import org.nuiton.topia.persistence.TopiaConfiguration; +import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; +import org.nuiton.topia.persistence.jdbc.JdbcConfigurationBuilder; +import org.nuiton.topia.replication.TopiaReplicationServiceImpl; import java.io.Closeable; +import java.io.File; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.Collections; import java.util.Set; import java.util.concurrent.ExecutionException; @@ -40,25 +46,62 @@ import java.util.concurrent.ExecutionException; */ public class ObserveServiceFactoryTopia extends ObserveServiceFactorySupport implements Closeable { + /** l'url d'acces a la base locale */ + public static final String h2LocalUrl = + "jdbc:h2:file:%s;" + + // on peut aussi utiliser file, socket + "FILE_LOCK=file;" + + //1 or 2 is needed to restore avec crash + // 0: logging is disabled (faster), + // 1: logging of the data is enabled, but logging of the index + // changes is disabled (default), 2: logging of both data and index + // changes are enabled + "LOG=0;" + + // on peut aussi utiliser hsqldb, mysql ou postgresql + "MODE=postgresql;" + + //"MODE=hsqldb;" + + // Sets the default lock timeout (in milliseconds) in this + // database that is used for the new sessions. + "DEFAULT_LOCK_TIMEOUT=2000;" + + // -1: the database is never closed until the close delay is set to + // some other rev or SHUTDOWN is called., 0: no delay (default; the + // database is closed if the last connection to it is closed)., n: + // the database is left open for n second after the last connection + // is closed. + "DB_CLOSE_DELAY=0;" + + // 0: no locking (should only be used for testing), + // 1: table level locking (default), + // 2: table level locking with garbage collection (if the + // application does not close all connections). + // LOCK_MODE 3 (READ_COMMITTED). Table level locking, but only when + // writing (no read locks). + "LOCK_MODE=3;" + + // Levels: 0=off, 1=error, 2=info, 3=debug. + "TRACE_LEVEL_FILE=0;" + + // on system.out: 0=off, 1=error, 2=info, 3=debug. + "TRACE_LEVEL_SYSTEM_OUT=0;" + + // maximumn cache to improve performance... + "CACHE_SIZE=65536"; + /** Logger. */ private static final Log log = LogFactory.getLog(ObserveServiceFactoryTopia.class); protected static final LoadingCache<Class<?>, Class<?>> serviceTypeCache = newServiceImplementationTypesCache("Topia"); - protected final LoadingCache<ObserveDataSourceConfigurationTopiaSupport, TopiaContextImplementor> topiaApplicationContextCache = CacheBuilder + protected final LoadingCache<ObserveDataSourceConfigurationTopiaSupport, ObserveTopiaApplicationContext> topiaApplicationContextCache = CacheBuilder .newBuilder() - .build(new CacheLoader<ObserveDataSourceConfigurationTopiaSupport, TopiaContextImplementor>() { + .build(new CacheLoader<ObserveDataSourceConfigurationTopiaSupport, ObserveTopiaApplicationContext>() { @Override - public TopiaContextImplementor load(ObserveDataSourceConfigurationTopiaSupport key) throws Exception { + public ObserveTopiaApplicationContext load(ObserveDataSourceConfigurationTopiaSupport key) throws Exception { - TopiaContextImplementor dataSource = null; + ObserveTopiaApplicationContext dataSource = null; if (key instanceof ObserveDataSourceConfigurationTopiaH2) { - dataSource = createH2DataSource((ObserveDataSourceConfigurationTopiaH2) key); + dataSource = createTopiaApplicationContext((ObserveDataSourceConfigurationTopiaH2) key); } if (key instanceof ObserveDataSourceConfigurationTopiaPG) { - dataSource = createPGDataSource((ObserveDataSourceConfigurationTopiaPG) key); + dataSource = createTopiaApplicationContext((ObserveDataSourceConfigurationTopiaPG) key); } Preconditions.checkState(dataSource != null, "No dataSource found for configuration: " + key); @@ -66,6 +109,8 @@ public class ObserveServiceFactoryTopia extends ObserveServiceFactorySupport imp } }); + protected final JdbcConfigurationBuilder jdbcConfigurationBuilder = new JdbcConfigurationBuilder(); + @Override public <S extends ObserveService> boolean accept(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) { @@ -102,56 +147,87 @@ public class ObserveServiceFactoryTopia extends ObserveServiceFactorySupport imp serviceContext.setDataSourceConfiguration(dataSourceConfigurationTopia); - TopiaContextImplementor dataSource = getDataSource(dataSourceConfigurationTopia); + ObserveTopiaApplicationContext dataSource = getTopiaApplicationContext(dataSourceConfigurationTopia); serviceContext.setTopiaApplicationContext(dataSource); return serviceContext; } - protected TopiaContextImplementor createPGDataSource(ObserveDataSourceConfigurationTopiaPG key) { - - PGDataSourceConfig result = DataSourceFactory.newPGConfig( - key.getLabel(), - CommonDataSourceConfigParam.LOGIN, key.getUsername(), - CommonDataSourceConfigParam.PASSWORD, key.getPassword(), - CommonDataSourceConfigParam.CAN_MIGRATE, key.isCanMigrate(), - CommonDataSourceConfigParam.SHOW_MIGRATION_PROGRESSION, key.isShowMigrationProgression(), - CommonDataSourceConfigParam.SHOW_MIGRATION_SQL, key.isShowMigrationSql(), - PGDataSourceConfigParam.URL, key.getJdbcUrl(), - PGDataSourceConfigParam.USE_SSL, key.isUseSsl() - ); - - //TODO - TopiaContextImplementor topiaApplicationContext = null; + protected ObserveTopiaApplicationContext createTopiaApplicationContext(ObserveDataSourceConfigurationTopiaPG configuration) { + + TopiaConfiguration topiaConfiguration = getTopiaConfiguration(configuration); + + if (log.isInfoEnabled()) { + log.info("PG Topia configuration: " + topiaConfiguration); + } + + ObserveTopiaApplicationContext topiaApplicationContext = new ObserveTopiaApplicationContext(topiaConfiguration); return topiaApplicationContext; } - protected TopiaContextImplementor createH2DataSource(ObserveDataSourceConfigurationTopiaH2 key) { + protected TopiaConfiguration getTopiaConfiguration(ObserveDataSourceConfigurationTopiaPG configuration) { - H2DataSourceConfig result = DataSourceFactory.newH2Config( - key.getLabel(), - CommonDataSourceConfigParam.LOGIN, key.getUsername(), - CommonDataSourceConfigParam.PASSWORD, key.getPassword(), - CommonDataSourceConfigParam.CAN_MIGRATE, key.isCanMigrate(), - CommonDataSourceConfigParam.SHOW_MIGRATION_PROGRESSION, key.isShowMigrationProgression(), - CommonDataSourceConfigParam.SHOW_MIGRATION_SQL, key.isShowMigrationSql(), - H2DataSourceConfigParam.DIRECTORY, key.getDirectory() - ); + JdbcConfiguration jdbcConfiguration = getJdbcConfiguration(configuration, configuration.getJdbcUrl()); + + BeanTopiaConfiguration topiaConfiguration = new BeanTopiaConfiguration(jdbcConfiguration); + topiaConfiguration.setTopiaIdFactoryClass(ObserveTopiaIdFactory.class); + topiaConfiguration.setInitSchema(false); + topiaConfiguration.setValidateSchema(false); + + ImmutableMap<String, String> migrationServiceConfiguration = ImmutableMap.of(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME + '.' + ObserveMigrationEngine.MIGRATION_CALLBACK, PGDataSourceMigration.class.getName()); + topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME, ObserveMigrationEngine.class, migrationServiceConfiguration); + topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.REPLICATION_SERVICE_NAME, TopiaReplicationServiceImpl.class, Collections.<String, String>emptyMap()); + return topiaConfiguration; + } + + protected JdbcConfiguration getJdbcConfiguration(ObserveDataSourceConfigurationTopiaPG configuration, String jdbcUrl) { + return jdbcConfigurationBuilder.forH2Database(jdbcUrl, + configuration.getUsername(), + String.valueOf(configuration.getPassword())); + } - //TODO - TopiaContextImplementor topiaApplicationContext = null; + protected ObserveTopiaApplicationContext createTopiaApplicationContext(ObserveDataSourceConfigurationTopiaH2 configuration) { + + TopiaConfiguration topiaConfiguration = getTopiaConfiguration(configuration); + + if (log.isInfoEnabled()) { + log.info("H2 Topia configuration: " + topiaConfiguration); + } + ObserveTopiaApplicationContext topiaApplicationContext = new ObserveTopiaApplicationContext(topiaConfiguration); return topiaApplicationContext; } - protected TopiaContextImplementor getDataSource(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration) { + protected TopiaConfiguration getTopiaConfiguration(ObserveDataSourceConfigurationTopiaH2 configuration) { + + String dbPath = new File(configuration.getDirectory(), configuration.getDbName()).getPath(); + + String jdbcUrl = String.format(h2LocalUrl, dbPath); + + JdbcConfiguration jdbcConfiguration = jdbcConfigurationBuilder.forH2Database(jdbcUrl, + configuration.getUsername(), + String.valueOf(configuration.getPassword())); + + BeanTopiaConfiguration topiaConfiguration = new BeanTopiaConfiguration(jdbcConfiguration); + topiaConfiguration.setTopiaIdFactoryClass(ObserveTopiaIdFactory.class); + topiaConfiguration.setInitSchema(false); + topiaConfiguration.setValidateSchema(false); + + ImmutableMap<String, String> migrationServiceConfiguration = ImmutableMap.of(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME + '.' + ObserveMigrationEngine.MIGRATION_CALLBACK, H2DataSourceMigration.class.getName()); + topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME, ObserveMigrationEngine.class, migrationServiceConfiguration); + topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.REPLICATION_SERVICE_NAME, TopiaReplicationServiceImpl.class, Collections.<String, String>emptyMap()); + return topiaConfiguration; + } + + protected ObserveTopiaApplicationContext getTopiaApplicationContext(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration) { try { - TopiaContextImplementor dataSource = topiaApplicationContextCache.get(dataSourceConfiguration); + ObserveTopiaApplicationContext dataSource = topiaApplicationContextCache.get(dataSourceConfiguration); return dataSource; } catch (ExecutionException e) { - throw new ObserveTechnicalException("Could not get dataSource for configuration: " + dataSourceConfiguration, e); + //FIXME Avoir une vraie execption + throw new RuntimeException("Could not get dataSource for configuration: " + dataSourceConfiguration, e); } } @@ -167,11 +243,11 @@ public class ObserveServiceFactoryTopia extends ObserveServiceFactorySupport imp @Override public void close() { - for (TopiaContextImplementor dataSource : topiaApplicationContextCache.asMap().values()) { + for (TopiaApplicationContext dataSource : topiaApplicationContextCache.asMap().values()) { if (!dataSource.isClosed()) { try { - dataSource.closeContext(); + dataSource.close(); } catch (Exception e) { if (log.isErrorEnabled()) { log.error("Could not close data source: " + dataSource, e); @@ -241,9 +317,9 @@ public class ObserveServiceFactoryTopia extends ObserveServiceFactorySupport imp protected Object invokeMethodWithTransaction(Method method, Object... args) throws Throwable { - TopiaContextImplementor source = serviceContext.getTopiaApplicationContext(); + ObserveTopiaApplicationContext source = serviceContext.getTopiaApplicationContext(); - TopiaContext topiaPersistenceContext = source.beginTransaction(); + ObserveTopiaPersistenceContext topiaPersistenceContext = source.newPersistenceContext(); try { @@ -254,7 +330,7 @@ public class ObserveServiceFactoryTopia extends ObserveServiceFactorySupport imp if (method.isAnnotationPresent(Write.class)) { // do commit - topiaPersistenceContext.commitTransaction(); + topiaPersistenceContext.commit(); } @@ -265,7 +341,7 @@ public class ObserveServiceFactoryTopia extends ObserveServiceFactorySupport imp try { // always rollback transaction to avoid dirty transactions - topiaPersistenceContext.rollbackTransaction(); + topiaPersistenceContext.rollback(); } finally { diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java index b17e2b5..475f6b5 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java @@ -3,15 +3,14 @@ package fr.ird.observe.services; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import fr.ird.observe.ObserveDAOHelper; +import fr.ird.observe.ObserveTopiaPersistenceContext; import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.ObserveDtosInitializer; import fr.ird.observe.services.dto.ObserveModelInitializerRunner; import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.service.DataNotFoundException; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.topia.persistence.TopiaEntity; import java.util.List; @@ -74,15 +73,15 @@ public class ObserveServiceTopia implements ObserveService { } protected <E extends TopiaEntity> List<E> loadEntities(Class<E> entityType) { - TopiaContext transaction = serviceContext.getTopiaPersistenceContext(); - TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); + ObserveTopiaPersistenceContext transaction = serviceContext.getTopiaPersistenceContext(); + TopiaDao<E> dao = transaction.getDao(entityType); List<E> entities = dao.findAll(); return entities; } protected <D extends ReferentialDto, E extends TopiaEntity> E loadEntity(Class<D> dtoType, Class<E> entityType, String id) { - TopiaContext transaction = serviceContext.getTopiaPersistenceContext(); - TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); + ObserveTopiaPersistenceContext transaction = serviceContext.getTopiaPersistenceContext(); + TopiaDao<E> dao = transaction.getDao(entityType); E entity = dao.findByTopiaId(id); if (entity == null) { throw new DataNotFoundException(dtoType, id); @@ -91,24 +90,24 @@ public class ObserveServiceTopia implements ObserveService { } public <E extends TopiaEntity> E newEntity(Class<E> entityType) { - TopiaContext transaction = serviceContext.getTopiaPersistenceContext(); - TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); + ObserveTopiaPersistenceContext transaction = serviceContext.getTopiaPersistenceContext(); + TopiaDao<E> dao = transaction.getDao(entityType); E entity = dao.newInstance(); return entity; } protected <E extends TopiaEntity> E saveEntity(Class<E> entityType, E entity) { - TopiaContext transaction = serviceContext.getTopiaPersistenceContext(); - TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); + ObserveTopiaPersistenceContext transaction = serviceContext.getTopiaPersistenceContext(); + TopiaDao<E> dao = transaction.getDao(entityType); entity = dao.update(entity); return entity; } protected <D extends ReferentialDto, E extends TopiaEntity> void deleteEntity(Class<D> dtoType, Class<E> entityType, Iterable<String> ids) { - TopiaContext transaction = serviceContext.getTopiaPersistenceContext(); - TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); + ObserveTopiaPersistenceContext transaction = serviceContext.getTopiaPersistenceContext(); + TopiaDao<E> dao = transaction.getDao(entityType); for (String id : ids) { - E entity = dao.findByTopiaId(id); + E entity = dao.forTopiaIdEquals(id).findUniqueOrNull(); if (entity == null) { throw new DataNotFoundException(dtoType, id); } 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 new file mode 100644 index 0000000..f3b58e6 --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java @@ -0,0 +1,48 @@ +package fr.ird.observe.services.service; + +import fr.ird.observe.services.ObserveServiceContext; +import fr.ird.observe.services.ObserveServiceTopia; + +/** + * Created on 21/08/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class DataSourceServiceTopia extends ObserveServiceTopia implements DataSourceService { + + @Override + public boolean exist() { + return false; + } + + @Override + public void create() { + + } + + @Override + public void open() { + + } + + @Override + public void close() { + + } + + @Override + public boolean canConnect() { + + return false; + } + + @Override + public void destroy() { + + } + + @Override + public void setServiceContext(ObserveServiceContext serviceContext) { + + } +} diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceFactoryTopiaTaiste.java b/observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceFactoryTopiaTaiste.java index 6781edb..5f784c5 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceFactoryTopiaTaiste.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceFactoryTopiaTaiste.java @@ -1,9 +1,6 @@ package fr.ird.observe.services; -import fr.ird.observe.ObserveTechnicalException; -import fr.ird.observe.db.DataSource; -import fr.ird.observe.db.DataSourceException; -import fr.ird.observe.db.impl.H2DataSource; +import fr.ird.observe.ObserveTopiaApplicationContext; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaSupport; @@ -14,22 +11,18 @@ import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopia */ public class ObserveServiceFactoryTopiaTaiste extends ObserveServiceFactoryTopia { - public H2DataSource getExistingDataSource(ObserveDataSourceConfigurationTopiaH2 dataSourceConfiguration) { - H2DataSource dataSource = (H2DataSource) topiaApplicationContextCache.getIfPresent(dataSourceConfiguration); + public ObserveTopiaApplicationContext getExistingDataSource(ObserveDataSourceConfigurationTopiaH2 dataSourceConfiguration) { + ObserveTopiaApplicationContext dataSource = topiaApplicationContextCache.getIfPresent(dataSourceConfiguration); return dataSource; } @Override - protected DataSource getDataSource(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration) { + protected ObserveTopiaApplicationContext getTopiaApplicationContext(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration) { - DataSource dataSource = super.getDataSource(dataSourceConfiguration); + ObserveTopiaApplicationContext dataSource = super.getTopiaApplicationContext(dataSourceConfiguration); - if (!dataSource.isOpen()) { - try { - dataSource.doOpen(); - } catch (DataSourceException e) { - throw new ObserveTechnicalException("Could not open dataSource: " + dataSourceConfiguration, e); - } + if (!dataSource.isClosed()) { + dataSource.close(); } return dataSource; diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ApplicationContextResource.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ApplicationContextResource.java index 04ab6ca..e15620e 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ApplicationContextResource.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ApplicationContextResource.java @@ -1,12 +1,8 @@ package fr.ird.observe.services.service; -import fr.ird.observe.IObserveConfig; import fr.ird.observe.services.ObserveServiceApplicationContext; import fr.ird.observe.services.ObserveServiceFactoryTopiaTaiste; -import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.constants.ReferentialLocale; -import fr.ird.observe.test.TestHelper; -import fr.ird.observe.util.Scripts; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.rules.TestRule; @@ -37,7 +33,7 @@ public class ApplicationContextResource implements TestRule { } public String getScriptPath(String classifier) { - return Scripts.getBackupScript(databaseVersion, classifier); + return getBackupScript(databaseVersion, classifier); } public ObserveServiceApplicationContext getServiceApplicationContext() { @@ -70,11 +66,12 @@ public class ApplicationContextResource implements TestRule { if (log.isDebugEnabled()) { log.debug("Starts " + testClass.getName()); } - TestHelper.initTest(testClass); - TestHelper.createApplicationContext(); - TestHelper.setConfig(IObserveConfig.DB_VERSION, databaseVersion.toString()); - - ObserveServiceTopia.init(); + //TODO A revoir +// TestHelper.initTest(testClass); +// TestHelper.createApplicationContext(); +// TestHelper.setConfig(IObserveConfig.DB_VERSION, databaseVersion.toString()); +// +// ObserveServiceTopia.init(); serviceApplicationContext.setReferentialLocale(ReferentialLocale.FR); @@ -88,4 +85,18 @@ public class ApplicationContextResource implements TestRule { } } + + protected final String BACKUP_SCRIPT_PATTERN = "/db/%1$s/%2$s.sql.gz"; + + protected String getBackupScript(Version version, String loadScript) { + String result = String.format( + BACKUP_SCRIPT_PATTERN, + version.toString(), + loadScript + ); + if (log.isInfoEnabled()) { + log.info(result); + } + return result; + } } diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceResource.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceResource.java index fcc50fb..f7b899c 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceResource.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceResource.java @@ -1,23 +1,16 @@ package fr.ird.observe.services.service; -import fr.ird.observe.db.DBTestHelper; -import fr.ird.observe.db.DataSourceException; -import fr.ird.observe.db.impl.H2DataSource; -import fr.ird.observe.db.impl.H2DataSourceConfig; +import fr.ird.observe.ObserveTopiaApplicationContext; +import fr.ird.observe.ObserveTopiaPersistenceContext; import fr.ird.observe.services.ObserveServiceFactoryTopiaTaiste; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; -import fr.ird.observe.test.TestHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.persistence.TopiaDAO; -import org.nuiton.topia.persistence.TopiaEntity; -import java.io.File; import java.net.URL; import java.util.LinkedHashMap; import java.util.Map; @@ -36,7 +29,7 @@ public class DataSourceResource implements TestRule { protected final String dbPath; - protected Map<String, TopiaContext> transactions = new LinkedHashMap<>(); + protected Map<String, ObserveTopiaPersistenceContext> transactions = new LinkedHashMap<>(); protected ObserveDataSourceConfigurationTopiaH2 dataSourceConfiguration; @@ -49,13 +42,13 @@ public class DataSourceResource implements TestRule { return dataSourceConfiguration; } - public TopiaContext newTransaction(String name) throws DataSourceException { + public ObserveTopiaPersistenceContext newTransaction(String name) { ObserveServiceFactoryTopiaTaiste serviceFactory = applicationContextResource.getServiceFactory(); - H2DataSource dataSource = serviceFactory.getExistingDataSource(dataSourceConfiguration); - TopiaContext topiaContext = dataSource.beginTransaction(name); - transactions.put(name, topiaContext); - return topiaContext; + ObserveTopiaApplicationContext dataSource = serviceFactory.getExistingDataSource(dataSourceConfiguration); + ObserveTopiaPersistenceContext persistenceContext = dataSource.newPersistenceContext(); + transactions.put(name, persistenceContext); + return persistenceContext; } public Statement apply(final Statement base, final Description description) { @@ -73,11 +66,6 @@ public class DataSourceResource implements TestRule { }; } - public <E extends TopiaEntity> TopiaDAO<E> getDAO(TopiaContext tx, Class<E> entityType) { - H2DataSource dataSource = getDataSource(); - return dataSource.getDAO(tx, entityType); - } - protected void before(Description description) throws Throwable { Class<?> testClass = description.getTestClass(); @@ -86,34 +74,37 @@ public class DataSourceResource implements TestRule { log.debug("Starts " + testClass.getName() + "::" + methodName); } - URL dbUrl = getClass().getResource(dbPath); Assert.assertNotNull("could not find resource : " + dbPath, dbUrl); - File localDbFile = TestHelper.newLocalDB(methodName); - - H2DataSource dataSource = DBTestHelper.createAndOpenFromDump( - localDbFile, - dbUrl, - false, - false, - true, - true, - true); +// File localDbFile = TestHelper.newLocalDB(methodName); - H2DataSourceConfig dataSourceConfig = dataSource.getConfig(); - - dataSourceConfiguration = new ObserveDataSourceConfigurationTopiaH2(); - dataSourceConfiguration.setLabel(dataSourceConfig.getLabel()); - dataSourceConfiguration.setUsername(dataSourceConfig.getLogin()); - dataSourceConfiguration.setPassword(dataSourceConfig.getPassword()); - dataSourceConfiguration.setDirectory(dataSourceConfig.getStorageDirectory()); - dataSourceConfiguration.setCanMigrate(dataSourceConfig.isCanMigrate()); - dataSourceConfiguration.setShowMigrationProgression(dataSourceConfig.isShowMigrationProgression()); - dataSourceConfiguration.setShowMigrationSql(dataSourceConfig.isShowMigrationSql()); - - dataSource.doClose(false); + ObserveServiceFactoryTopiaTaiste serviceFactory = applicationContextResource.getServiceFactory(); + ObserveTopiaApplicationContext existingDataSource = serviceFactory.getExistingDataSource(dataSourceConfiguration); + +// +// H2DataSource dataSource = DBTestHelper.createAndOpenFromDump( +// localDbFile, +// dbUrl, +// false, +// false, +// true, +// true, +// true); +// +// H2DataSourceConfig dataSourceConfig = dataSource.getConfig(); +// +// dataSourceConfiguration = new ObserveDataSourceConfigurationTopiaH2(); +// dataSourceConfiguration.setLabel(dataSourceConfig.getLabel()); +// dataSourceConfiguration.setUsername(dataSourceConfig.getLogin()); +// dataSourceConfiguration.setPassword(dataSourceConfig.getPassword()); +// dataSourceConfiguration.setDirectory(dataSourceConfig.getStorageDirectory()); +// dataSourceConfiguration.setCanMigrate(dataSourceConfig.isCanMigrate()); +// dataSourceConfiguration.setShowMigrationProgression(dataSourceConfig.isShowMigrationProgression()); +// dataSourceConfiguration.setShowMigrationSql(dataSourceConfig.isShowMigrationSql()); +// +// dataSource.doClose(false); } @@ -125,15 +116,15 @@ public class DataSourceResource implements TestRule { log.debug("Ends " + testClass.getName() + "::" + methodName); } - H2DataSource dataSource = getDataSource(); + ObserveTopiaApplicationContext dataSource = getDataSource(); if (dataSource != null && dataSource.isOpen()) { - for (Map.Entry<String, TopiaContext> entry : transactions.entrySet()) { - TopiaContext topiaContext = entry.getValue(); + for (Map.Entry<String, ObserveTopiaPersistenceContext> entry : transactions.entrySet()) { + ObserveTopiaPersistenceContext topiaContext = entry.getValue(); if (!topiaContext.isClosed()) { String transactionKey = entry.getKey(); try { - dataSource.closeTransaction(topiaContext, transactionKey); + topiaContext.close(); } catch (Exception e) { if (log.isErrorEnabled()) { log.error("Could not close transaction: " + transactionKey, e); @@ -148,7 +139,7 @@ public class DataSourceResource implements TestRule { } - private H2DataSource getDataSource() { + private ObserveTopiaApplicationContext getDataSource() { return applicationContextResource.getServiceFactory().getExistingDataSource(dataSourceConfiguration); } } diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialServiceTopiaTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialServiceTopiaTest.java index e78a353..47fd2e0 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialServiceTopiaTest.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialServiceTopiaTest.java @@ -1,5 +1,6 @@ package fr.ird.observe.services.service; +import fr.ird.observe.ObserveTopiaPersistenceContext; import fr.ird.observe.entities.migration.H2DataSourceMigration; import fr.ird.observe.entities.referentiel.LengthWeightParameter; import fr.ird.observe.entities.referentiel.Program; @@ -19,8 +20,7 @@ import org.junit.Before; import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.topia.persistence.TopiaEntity; import java.util.Map; @@ -59,7 +59,7 @@ public class ReferentialServiceTopiaTest { @Test public void testGetReferentialLabelSet() throws Exception { - TopiaContext tx = dataSourceResource.newTransaction("testGetReferentialLabelSet"); + ObserveTopiaPersistenceContext tx = dataSourceResource.newTransaction("testGetReferentialLabelSet"); for (Map.Entry<Class<?>, Class<?>> entry : ReferentialServiceTopia.getDtoTypes()) { Class dtoType = entry.getKey(); @@ -68,7 +68,7 @@ public class ReferentialServiceTopiaTest { } Class entityType = entry.getValue(); - TopiaDAO dao = dataSourceResource.getDAO(tx, entityType); + TopiaDao dao = tx.getDao(entityType); long expectedCount = dao.count(); if (log.isInfoEnabled()) { @@ -86,7 +86,7 @@ public class ReferentialServiceTopiaTest { @Test public void testLoadToRead() throws Exception { - TopiaContext tx = dataSourceResource.newTransaction("testLoadToRead"); + ObserveTopiaPersistenceContext tx = dataSourceResource.newTransaction("testLoadToRead"); for (Map.Entry<Class<?>, Class<?>> entry : ReferentialServiceTopia.getDtoTypes()) { @@ -104,7 +104,7 @@ public class ReferentialServiceTopiaTest { @Test public void testLoadToEdit() throws Exception { - TopiaContext tx = dataSourceResource.newTransaction("testLoadToEdit"); + ObserveTopiaPersistenceContext tx = dataSourceResource.newTransaction("testLoadToEdit"); for (Map.Entry<Class<?>, Class<?>> entry : ReferentialServiceTopia.getDtoTypes()) { @@ -122,15 +122,15 @@ public class ReferentialServiceTopiaTest { @Test public void testDelete() throws Exception { - TopiaContext tx = dataSourceResource.newTransaction("testDelete"); + ObserveTopiaPersistenceContext tx = dataSourceResource.newTransaction("testDelete"); delete(tx, ProgramDto.class, Program.class); delete(tx, LengthWeightParameterDto.class, LengthWeightParameter.class); } - protected void loadToRead(TopiaContext tx, Class dtoType, Class entityType) { - TopiaDAO<?> dao = dataSourceResource.getDAO(tx, entityType); + protected void loadToRead(ObserveTopiaPersistenceContext tx, Class dtoType, Class entityType) { + TopiaDao<?> dao = tx.getDao(entityType); long expectedCount = dao.count(); if (log.isInfoEnabled()) { @@ -158,8 +158,8 @@ public class ReferentialServiceTopiaTest { } } - protected void loadToEdit(TopiaContext tx, Class dtoType, Class entityType) { - TopiaDAO<?> dao = dataSourceResource.getDAO(tx, entityType); + protected void loadToEdit(ObserveTopiaPersistenceContext tx, Class dtoType, Class entityType) { + TopiaDao<?> dao = tx.getDao(entityType); long expectedCount = dao.count(); if (log.isInfoEnabled()) { @@ -183,7 +183,7 @@ public class ReferentialServiceTopiaTest { for (ReferenceSetDto labelSetDto : formDto.getLabels()) { Class refEntityType = ReferentialServiceTopia.getEntityType(labelSetDto.getType()); - long refExpected = dataSourceResource.getDAO(tx, refEntityType).count(); + long refExpected = tx.getDao(refEntityType).count(); Assert.assertEquals(refExpected, labelSetDto.sizeReference()); } @@ -191,9 +191,9 @@ public class ReferentialServiceTopiaTest { } } - protected void delete(TopiaContext tx, Class dtoType, Class entityType) { + protected void delete(ObserveTopiaPersistenceContext tx, Class dtoType, Class entityType) { - TopiaDAO<?> dao = dataSourceResource.getDAO(tx, entityType); + TopiaDao<?> dao = tx.getDao(entityType); long expectedCount = dao.count(); TopiaEntity entity = dao.iterator().next(); diff --git a/pom.xml b/pom.xml index db3493e..c002299 100644 --- a/pom.xml +++ b/pom.xml @@ -85,8 +85,8 @@ <module>observe-services-api</module> <module>observe-test-data</module> <module>observe-entities</module> - <module>observe-business</module> - <module>observe-validation</module> + <!--<module>observe-business</module>--> + <!--<module>observe-validation</module>--> <module>observe-services-configuration-topia</module> <module>observe-services-topia</module> <!--<module>observe-services-configuration-rest</module>--> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.