This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 47d4edbb1ef92622b3e1207a2afa322ba6d6b4d1 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Aug 30 15:22:52 2016 +0200 Stop using ServiceLoader but Reflections --- .../application/swing/ui/admin/AdminUIModel.java | 2 +- .../swing/ui/admin/export/ExportUIHandler.java | 11 ------- ...migration.ObserveMigrationConfigurationProvider | 1 - entities/pom.xml | 5 +++ .../ObserveMigrationConfigurationProvider.java | 19 ++++++++---- .../services/ObserveServiceFactorySupport.java | 18 ++++++----- services-model/pom.xml | 5 +++ .../reference/ReferenceBinderEngineSupplier.java | 36 +++++++++++++--------- .../services/runner/ObserveServiceMainFactory.java | 13 ++++---- .../ObserveTopiaApplicationContextFactory.java | 10 ++++-- ...ces.dto.reference.ReferenceBinderEngineSupplier | 1 - 11 files changed, 70 insertions(+), 51 deletions(-) diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUIModel.java index 9abe4cf..1cfa9f3 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUIModel.java @@ -1466,7 +1466,7 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { private boolean validateNotSameDataSources() { boolean validate = true; DbMode dbMode = localSourceModel.getDbMode(); - if (dbMode == centralSourceModel.getDbMode()) { + if (dbMode != null && dbMode == centralSourceModel.getDbMode()) { switch (dbMode) { case USE_REMOTE: validate = !Objects.equals(localSourceModel.getPgConfig().getJdbcUrl(), centralSourceModel.getPgConfig().getJdbcUrl()); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/export/ExportUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/export/ExportUIHandler.java index 1a898af..58b50c9 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/export/ExportUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/export/ExportUIHandler.java @@ -22,7 +22,6 @@ package fr.ird.observe.application.swing.ui.admin.export; import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableMap; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.decoration.DecoratorService; import fr.ird.observe.application.swing.decoration.decorators.DataReferenceDecorator; @@ -39,7 +38,6 @@ import fr.ird.observe.application.swing.ui.storage.tabs.DataSelectionModel; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.longline.TripLonglineDto; import fr.ird.observe.services.dto.referential.ProgramDto; -import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.seine.TripSeineDto; import fr.ird.observe.services.service.trip.ExportTripRequest; import fr.ird.observe.services.service.trip.ExportTripResult; @@ -245,15 +243,6 @@ public class ExportUIHandler extends AdminTabUIHandler { Preconditions.checkState(CollectionUtils.isNotEmpty(tripEntries)); - ImmutableMap.Builder<String, ReferentialReference<ProgramDto>> programsByIdBuilder = ImmutableMap.builder(); - ImmutableMap.Builder<String, DataReference> tripsByIdBuilder = ImmutableMap.builder(); - for (TripEntry tripEntry : tripEntries) { - programsByIdBuilder.put(tripEntry.getProgram().getId(), tripEntry.getProgram()); - tripsByIdBuilder.put(tripEntry.getTrip().getId(), tripEntry.getTrip()); - } - ImmutableMap<String, ReferentialReference<ProgramDto>> programsById = programsByIdBuilder.build(); - ImmutableMap<String, DataReference> tripsById = tripsByIdBuilder.build(); - DecoratorService decoratorService = getDecoratorService(); ReferentialReferenceDecorator<ProgramDto> programDecorator = decoratorService.getReferentialReferenceDecorator(ProgramDto.class); diff --git a/entities-migration/src/main/resources/META-INF/services/fr.ird.observe.entities.migration.ObserveMigrationConfigurationProvider b/entities-migration/src/main/resources/META-INF/services/fr.ird.observe.entities.migration.ObserveMigrationConfigurationProvider deleted file mode 100644 index c1819ef..0000000 --- a/entities-migration/src/main/resources/META-INF/services/fr.ird.observe.entities.migration.ObserveMigrationConfigurationProvider +++ /dev/null @@ -1 +0,0 @@ -fr.ird.observe.entities.migration.ObserveMigrationConfigurationProviderImpl \ No newline at end of file diff --git a/entities/pom.xml b/entities/pom.xml index 9f279aa..c9d981d 100644 --- a/entities/pom.xml +++ b/entities/pom.xml @@ -77,6 +77,11 @@ <artifactId>swingx-common</artifactId> </dependency> + <dependency> + <groupId>org.reflections</groupId> + <artifactId>reflections</artifactId> + </dependency> + <!-- ToPIA --> <dependency> diff --git a/entities/src/main/java/fr/ird/observe/entities/migration/ObserveMigrationConfigurationProvider.java b/entities/src/main/java/fr/ird/observe/entities/migration/ObserveMigrationConfigurationProvider.java index 42d81ea..b09f94a 100644 --- a/entities/src/main/java/fr/ird/observe/entities/migration/ObserveMigrationConfigurationProvider.java +++ b/entities/src/main/java/fr/ird/observe/entities/migration/ObserveMigrationConfigurationProvider.java @@ -22,13 +22,12 @@ package fr.ird.observe.entities.migration; * #L% */ -import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import org.nuiton.topia.migration.TopiaMigrationCallbackByClass; import org.nuiton.version.Version; +import org.reflections.Reflections; -import java.util.Iterator; -import java.util.ServiceLoader; +import java.util.Set; /** * Created on 01/08/16. @@ -52,9 +51,17 @@ public abstract class ObserveMigrationConfigurationProvider { public static ObserveMigrationConfigurationProvider get() { if (INSTANCE == null) { - Iterator<ObserveMigrationConfigurationProvider> iterator = ServiceLoader.load(ObserveMigrationConfigurationProvider.class).iterator(); - Preconditions.checkArgument(iterator.hasNext(), "could not find migration versions provider"); - INSTANCE = iterator.next(); + + Set<Class<? extends ObserveMigrationConfigurationProvider>> impls = new Reflections("fr.ird.observe.entities.migration").getSubTypesOf(ObserveMigrationConfigurationProvider.class); + if (impls.isEmpty()) { + throw new ExceptionInInitializerError("No migration configuration provider found."); + } + Class<? extends ObserveMigrationConfigurationProvider> impl = impls.iterator().next(); + try { + INSTANCE = impl.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + throw new ExceptionInInitializerError(e); + } } return INSTANCE; } diff --git a/services-api/src/main/java/fr/ird/observe/services/ObserveServiceFactorySupport.java b/services-api/src/main/java/fr/ird/observe/services/ObserveServiceFactorySupport.java index 79b420a..2e1534f 100644 --- a/services-api/src/main/java/fr/ird/observe/services/ObserveServiceFactorySupport.java +++ b/services-api/src/main/java/fr/ird/observe/services/ObserveServiceFactorySupport.java @@ -27,6 +27,7 @@ import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import org.reflections.Reflections; +import java.util.Optional; import java.util.Set; import java.util.concurrent.ExecutionException; @@ -57,22 +58,23 @@ public abstract class ObserveServiceFactorySupport implements ObserveServiceFact } } - protected static LoadingCache<Class<?>, Class<?>> newServiceImplementationTypesCache(final String suffix) { + protected static LoadingCache<Class<?>, Class<?>> newServiceImplementationTypesCache(String suffix) { return CacheBuilder.newBuilder().build(new CacheLoader<Class<?>, Class<?>>() { - Reflections reflections = new Reflections("fr.ird.observe.services"); + Set<Class<? extends ObserveService>> serviceImpls = new Reflections("fr.ird.observe.services").getSubTypesOf(ObserveService.class); @Override public Class<?> load(Class<?> key) throws Exception { - Set<Class<?>> impls = reflections.getSubTypesOf((Class) key); - for (Class<?> impl : impls) { - if (impl.getSimpleName().endsWith(suffix)) { - return impl; - } - } + Optional<Class<? extends ObserveService>> optionalImpl = + serviceImpls.stream() + .filter(type -> type.getSimpleName().endsWith(key.getSimpleName() + suffix)) + .findFirst(); + if (optionalImpl.isPresent()) { + return optionalImpl.get(); + } throw new IllegalStateException("Could not get class: " + key); } diff --git a/services-model/pom.xml b/services-model/pom.xml index 691e8a8..eec0b4c 100644 --- a/services-model/pom.xml +++ b/services-model/pom.xml @@ -60,6 +60,11 @@ <artifactId>nuiton-i18n</artifactId> </dependency> + <dependency> + <groupId>org.reflections</groupId> + <artifactId>reflections</artifactId> + </dependency> + <!-- JAXX --> <dependency> <groupId>org.nuiton.jaxx</groupId> diff --git a/services-model/src/main/java/fr/ird/observe/services/dto/reference/ReferenceBinderEngineSupplier.java b/services-model/src/main/java/fr/ird/observe/services/dto/reference/ReferenceBinderEngineSupplier.java index ba51081..00e3ec9 100644 --- a/services-model/src/main/java/fr/ird/observe/services/dto/reference/ReferenceBinderEngineSupplier.java +++ b/services-model/src/main/java/fr/ird/observe/services/dto/reference/ReferenceBinderEngineSupplier.java @@ -23,14 +23,15 @@ package fr.ird.observe.services.dto.reference; */ import com.google.common.base.Supplier; +import org.reflections.Reflections; -import java.util.Iterator; -import java.util.ServiceLoader; +import java.util.Optional; +import java.util.Set; /** * Pour récupérer une instance d'un {@link ReferenceBinderEngine}. * - * On utilise un {@link ServiceLoader} pour récupérer une instance car l'implantation n'est pas définie au niveau de + * On utilise un {@link Reflections} pour récupérer une instance car l'implantation n'est pas définie au niveau de * l'API mais dans le service ToPIA, au même niveau que le BinderEngine (et ceci pour ne pas avoir plusieurs endroits * de définition des binders. * @@ -40,23 +41,30 @@ import java.util.ServiceLoader; */ public class ReferenceBinderEngineSupplier implements Supplier<ReferenceBinderEngine> { - public static final ReferenceBinderEngine INSTANCE = loadReferenceBinderEngine(); + private static final ReferenceBinderEngine INSTANCE = loadReferenceBinderEngine(); + + @Override + public ReferenceBinderEngine get() { + return INSTANCE; + } private static ReferenceBinderEngine loadReferenceBinderEngine() { - ServiceLoader<ReferenceBinderEngineSupplier> serviceLoader = ServiceLoader.load(ReferenceBinderEngineSupplier.class); + Set<Class<? extends ReferenceBinderEngineSupplier>> impls = new Reflections("fr.ird.observe.services").getSubTypesOf(ReferenceBinderEngineSupplier.class); - Iterator<ReferenceBinderEngineSupplier> iterator = serviceLoader.iterator(); - if (!iterator.hasNext()) { - throw new IllegalStateException("No referenceBinderEngine defined in class-path"); + if (impls.isEmpty()) { + throw new ExceptionInInitializerError("No reference binder engine supplier found."); } - return iterator.next().get(); - - } + Optional<Class<? extends ReferenceBinderEngineSupplier>> optional = impls.stream().filter(impl -> !ReferenceBinderEngineSupplier.class.equals(impl)).findAny(); + if (optional.isPresent()) { + try { + return optional.get().newInstance().get(); + } catch (InstantiationException | IllegalAccessException e) { + throw new ExceptionInInitializerError(e); + } + } + throw new ExceptionInInitializerError("Can't get a reference binder engine supplier"); - @Override - public ReferenceBinderEngine get() { - return INSTANCE; } } diff --git a/services-runner/src/main/java/fr/ird/observe/services/runner/ObserveServiceMainFactory.java b/services-runner/src/main/java/fr/ird/observe/services/runner/ObserveServiceMainFactory.java index 6a8e1b1..610703d 100644 --- a/services-runner/src/main/java/fr/ird/observe/services/runner/ObserveServiceMainFactory.java +++ b/services-runner/src/main/java/fr/ird/observe/services/runner/ObserveServiceMainFactory.java @@ -131,17 +131,16 @@ public class ObserveServiceMainFactory implements ObserveServiceFactory { .filter(factoryType -> !Modifier.isAbstract(factoryType.getModifiers())) .filter(factoryType -> !ObserveServiceMainFactory.class.equals(factoryType)) .forEach(factoryType -> { - ObserveServiceFactory factory; try { - factory = factoryType.newInstance(); + ObserveServiceFactory factory = factoryType.newInstance(); + if (log.isInfoEnabled()) { + log.info("Found service factory: " + factory); + } + factory.setMainServiceFactory(this); + builder.add(factory); } catch (InstantiationException | IllegalAccessException e) { throw new ExceptionInInitializerError(e); } - if (log.isInfoEnabled()) { - log.info("Found service factory: " + factory); - } - factory.setMainServiceFactory(this); - builder.add(factory); }); delegateFactories = Collections.unmodifiableSet(builder); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/ObserveTopiaApplicationContextFactory.java b/services-topia/src/main/java/fr/ird/observe/services/topia/ObserveTopiaApplicationContextFactory.java index 9e9f647..9004c3c 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/ObserveTopiaApplicationContextFactory.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/ObserveTopiaApplicationContextFactory.java @@ -135,7 +135,10 @@ public class ObserveTopiaApplicationContextFactory { ); if (log.isInfoEnabled()) { - log.info("PG Topia configuration: " + topiaConfiguration); + log.info("PG Topia configuration: " + topiaConfiguration.getJdbcConnectionUrl()); + } + if (log.isDebugEnabled()) { + log.debug("PG Topia configuration: " + topiaConfiguration); } return topiaConfiguration; } @@ -162,7 +165,10 @@ public class ObserveTopiaApplicationContextFactory { ); if (log.isInfoEnabled()) { - log.info("H2 Topia configuration: " + topiaConfiguration); + log.info("H2 Topia configuration: " + topiaConfiguration.getJdbcConnectionUrl()); + } + if (log.isDebugEnabled()) { + log.debug("H2 Topia configuration: " + topiaConfiguration); } return new MyObserveTopiaApplicationContext(topiaConfiguration, configuration); diff --git a/services-topia/src/main/resources/META-INF/services/fr.ird.observe.services.dto.reference.ReferenceBinderEngineSupplier b/services-topia/src/main/resources/META-INF/services/fr.ird.observe.services.dto.reference.ReferenceBinderEngineSupplier deleted file mode 100644 index 308332f..0000000 --- a/services-topia/src/main/resources/META-INF/services/fr.ird.observe.services.dto.reference.ReferenceBinderEngineSupplier +++ /dev/null @@ -1 +0,0 @@ -fr.ird.observe.services.topia.binder.ReferenceBinderEngineSupplierTopia \ No newline at end of file -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.