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 {
 

Reply via email to