more flexibility for backend testing
Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/090273c6 Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/090273c6 Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/090273c6 Branch: refs/heads/master Commit: 090273c671a33cee3039139b19d99a7c2cac4e64 Parents: 3eb12a6 Author: Sebastian Schaffert <[email protected]> Authored: Tue Apr 1 15:46:31 2014 +0200 Committer: Sebastian Schaffert <[email protected]> Committed: Tue Apr 1 15:46:31 2014 +0200 ---------------------------------------------------------------------- .../core/qualifiers/inject/Fallback.java | 36 ++++++++++++++++++++ .../services/logging/LoggingServiceImpl.java | 21 ++++++------ .../services/triplestore/SesameServiceImpl.java | 33 ++++++++++++------ .../core/test/base/TestStoreProvider.java | 2 ++ 4 files changed, 71 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/marmotta/blob/090273c6/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/qualifiers/inject/Fallback.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/qualifiers/inject/Fallback.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/qualifiers/inject/Fallback.java new file mode 100644 index 0000000..3cf6fc6 --- /dev/null +++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/qualifiers/inject/Fallback.java @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.marmotta.platform.core.qualifiers.inject; + +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * Add file description here! + * + * @author Sebastian Schaffert ([email protected]) + */ +@Target({ TYPE, METHOD, FIELD }) +@Retention(RUNTIME) +@Inherited +public @interface Fallback { +} http://git-wip-us.apache.org/repos/asf/marmotta/blob/090273c6/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/logging/LoggingServiceImpl.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/logging/LoggingServiceImpl.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/logging/LoggingServiceImpl.java index f604ec2..dc53656 100644 --- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/logging/LoggingServiceImpl.java +++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/logging/LoggingServiceImpl.java @@ -56,12 +56,7 @@ import javax.enterprise.inject.spi.InjectionPoint; import javax.inject.Inject; import java.io.File; import java.text.Collator; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; @@ -148,16 +143,20 @@ public class LoggingServiceImpl implements LoggingService { } public void startEventHandler(@Observes LoggingStartEvent event) { - log.warn("LOGGING: Switching to Apache Marmotta logging configuration; further output will be found in {}{}log{}*.log", configurationService.getHome(), File.separator, File.separator); + if(!configurationService.getBooleanConfiguration("testing.enabled")) { + log.warn("LOGGING: Switching to Apache Marmotta logging configuration; further output will be found in {}{}log{}*.log", configurationService.getHome(), File.separator, File.separator); - configureLoggers(); + configureLoggers(); + } } public void configurationEventHandler(@Observes ConfigurationChangedEvent event) { - if(event.containsChangedKeyWithPrefix("logging.")) { - log.warn("LOGGING: Reloading logging configuration"); + if(!configurationService.getBooleanConfiguration("testing.enabled")) { + if (event.containsChangedKeyWithPrefix("logging.")) { + log.warn("LOGGING: Reloading logging configuration"); - configureLoggers(); + configureLoggers(); + } } } http://git-wip-us.apache.org/repos/asf/marmotta/blob/090273c6/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/SesameServiceImpl.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/SesameServiceImpl.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/SesameServiceImpl.java index 9b243d6..52e42c0 100644 --- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/SesameServiceImpl.java +++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/SesameServiceImpl.java @@ -18,7 +18,6 @@ package org.apache.marmotta.platform.core.services.triplestore; import edu.emory.mathcs.backport.java.util.concurrent.locks.ReentrantReadWriteLock; - import org.apache.marmotta.commons.sesame.transactions.api.TransactionListener; import org.apache.marmotta.commons.sesame.transactions.api.TransactionalSail; import org.apache.marmotta.commons.sesame.transactions.model.TransactionData; @@ -28,6 +27,7 @@ import org.apache.marmotta.platform.core.api.triplestore.*; import org.apache.marmotta.platform.core.qualifiers.event.transaction.AfterCommit; import org.apache.marmotta.platform.core.qualifiers.event.transaction.AfterRollback; import org.apache.marmotta.platform.core.qualifiers.event.transaction.BeforeCommit; +import org.apache.marmotta.platform.core.qualifiers.inject.Fallback; import org.apache.marmotta.platform.core.util.CDIContext; import org.openrdf.model.ValueFactory; import org.openrdf.repository.RepositoryConnection; @@ -44,6 +44,7 @@ import javax.enterprise.context.ApplicationScoped; import javax.enterprise.event.Event; import javax.enterprise.inject.Instance; import javax.enterprise.inject.Produces; +import javax.enterprise.inject.UnsatisfiedResolutionException; import javax.inject.Inject; import java.util.Iterator; @@ -139,20 +140,32 @@ public class SesameServiceImpl implements SesameService { log.warn("RDF repository has already been initialized"); } + if(storeProviders.isUnsatisfied()) { + log.error("no storage backend found in classpath; please add one of the marmotta-backend-XXX modules"); + throw new UnsatisfiedResolutionException("no storage backend found in classpath; please add one of the marmotta-backend-XXX modules"); + } + if(storeProviders.isAmbiguous()) { - log.error("more than one storage backend in classpath; please only select one storage backend"); + log.warn("more than one storage backend in classpath, trying to select the most appropriate ..."); + StoreProvider candidate = null; + Iterator<StoreProvider> it = storeProviders.iterator(); while (it.hasNext()) { - log.error(" - {}", it.next().getName()); + StoreProvider next = it.next(); + + log.warn("- candidate: {} (annotations: {})", next.getName(), next.getClass().getAnnotations()); + + if(candidate == null || !next.getClass().isAnnotationPresent(Fallback.class)) { + candidate = next; + } } - return; - } - if(storeProviders.isUnsatisfied()) { - log.error("no storage backend found in classpath; please add one of the marmotta-backend-XXX modules"); - return; - } - store = storeProviders.get().createStore(); + log.warn("selected storage backend: {}", candidate.getName()); + + store = candidate.createStore(); + } else { + store = storeProviders.get().createStore(); + } NotifyingSail notifyingSail; http://git-wip-us.apache.org/repos/asf/marmotta/blob/090273c6/platform/marmotta-core/src/test/java/org/apache/marmotta/platform/core/test/base/TestStoreProvider.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/test/java/org/apache/marmotta/platform/core/test/base/TestStoreProvider.java b/platform/marmotta-core/src/test/java/org/apache/marmotta/platform/core/test/base/TestStoreProvider.java index c12684b..5c96803 100644 --- a/platform/marmotta-core/src/test/java/org/apache/marmotta/platform/core/test/base/TestStoreProvider.java +++ b/platform/marmotta-core/src/test/java/org/apache/marmotta/platform/core/test/base/TestStoreProvider.java @@ -18,6 +18,7 @@ package org.apache.marmotta.platform.core.test.base; import org.apache.marmotta.platform.core.api.triplestore.StoreProvider; +import org.apache.marmotta.platform.core.qualifiers.inject.Fallback; import org.openrdf.repository.sail.SailRepository; import org.openrdf.sail.NotifyingSail; import org.openrdf.sail.Sail; @@ -34,6 +35,7 @@ import javax.enterprise.inject.Alternative; * @author Sebastian Schaffert ([email protected]) */ @Alternative +@Fallback @ApplicationScoped public class TestStoreProvider implements StoreProvider {
