diff --git a/docsys/src/main/java/io/nosqlbench/docsys/core/WebObjectLoader.java b/docsys/src/main/java/io/nosqlbench/docsys/core/WebObjectLoader.java deleted file mode 100644 index b39689ee1..000000000 --- a/docsys/src/main/java/io/nosqlbench/docsys/core/WebObjectLoader.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.nosqlbench.docsys.core; - -import io.nosqlbench.docsys.api.WebServiceObject; - -import java.util.ArrayList; -import java.util.List; -import java.util.ServiceLoader; - -public class WebObjectLoader { - public static List loadWebServiceObjects() { - List endpoints = new ArrayList<>(); - ServiceLoader loader = ServiceLoader.load(WebServiceObject.class); - loader.forEach(endpoints::add); - return endpoints; - } -} diff --git a/docsys/src/main/java/io/nosqlbench/docsys/endpoints/DocServerStatusEndpoint.java b/docsys/src/main/java/io/nosqlbench/docsys/endpoints/DocServerStatusEndpoint.java index c5f4f4544..04f3eff7f 100644 --- a/docsys/src/main/java/io/nosqlbench/docsys/endpoints/DocServerStatusEndpoint.java +++ b/docsys/src/main/java/io/nosqlbench/docsys/endpoints/DocServerStatusEndpoint.java @@ -14,7 +14,7 @@ import javax.ws.rs.core.Configuration; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; -@Service(WebServiceObject.class) +@Service(value = WebServiceObject.class, selector = "docserver-status") @Singleton @Path("_") public class DocServerStatusEndpoint implements WebServiceObject { diff --git a/docsys/src/main/java/io/nosqlbench/docsys/endpoints/DocsysMarkdownEndpoint.java b/docsys/src/main/java/io/nosqlbench/docsys/endpoints/DocsysMarkdownEndpoint.java index 064472612..eff4dd873 100644 --- a/docsys/src/main/java/io/nosqlbench/docsys/endpoints/DocsysMarkdownEndpoint.java +++ b/docsys/src/main/java/io/nosqlbench/docsys/endpoints/DocsysMarkdownEndpoint.java @@ -20,7 +20,7 @@ import java.nio.file.Files; import java.util.*; import java.util.concurrent.atomic.AtomicLong; -@Service(WebServiceObject.class) +@Service(value = WebServiceObject.class, selector = "docsys-markdown") @Singleton @Path("/services/docs/") public class DocsysMarkdownEndpoint implements WebServiceObject { diff --git a/docsys/src/test/java/io/nosqlbench/docsys/core/TestServlet1.java b/docsys/src/test/java/io/nosqlbench/docsys/core/TestServlet1.java index 61105cea5..7c9040882 100644 --- a/docsys/src/test/java/io/nosqlbench/docsys/core/TestServlet1.java +++ b/docsys/src/test/java/io/nosqlbench/docsys/core/TestServlet1.java @@ -13,7 +13,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -//@Service(WebServiceObject.class) +//@Service(value=WebServiceObject.class,selector="test") @Singleton @Path("test1") public class TestServlet1 implements WebServiceObject { diff --git a/driver-cockroachdb/src/main/java/io/nosqlbench/activitytype/cockroachdb/CockroachActivityType.java b/driver-cockroachdb/src/main/java/io/nosqlbench/activitytype/cockroachdb/CockroachActivityType.java index 53ceba9d4..340472050 100644 --- a/driver-cockroachdb/src/main/java/io/nosqlbench/activitytype/cockroachdb/CockroachActivityType.java +++ b/driver-cockroachdb/src/main/java/io/nosqlbench/activitytype/cockroachdb/CockroachActivityType.java @@ -6,12 +6,8 @@ import io.nosqlbench.engine.api.activityapi.core.ActivityType; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.nb.annotations.Service; -@Service(ActivityType.class) +@Service(value = ActivityType.class, selector = "cockroachdb") public class CockroachActivityType implements ActivityType { - @Override - public String getName() { - return "cockroachdb"; - } @Override public ActionDispenser getActionDispenser(CockroachActivity activity) { diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivityType.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivityType.java index 2b5421bd5..7e9b186a1 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivityType.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivityType.java @@ -17,13 +17,9 @@ import java.time.Instant; import java.time.LocalTime; import java.util.*; -@Service(ActivityType.class) +@Service(value = ActivityType.class, selector = "cql") public class CqlActivityType implements ActivityType { - public String getName() { - return "cql"; - } - @Override public CqlActivity getActivity(ActivityDef activityDef) { diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/filtering/CQLResultFilterType.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/filtering/CQLResultFilterType.java index 6ab1aee37..88cf4e06a 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/filtering/CQLResultFilterType.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/filtering/CQLResultFilterType.java @@ -11,14 +11,9 @@ import io.nosqlbench.nb.annotations.Service; import java.util.function.Predicate; -@Service(ResultValueFilterType.class) +@Service(value = ResultValueFilterType.class, selector = "cql") public class CQLResultFilterType implements ResultValueFilterType { - @Override - public String getName() { - return "cql"; - } - @Override public ResultFilterDispenser getDispenser(String config) { return new Dispenser(config); diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/endpoints/cql/CqlWorkloadGeneratorEndpoint.java b/driver-cql-shaded/src/main/java/io/nosqlbench/endpoints/cql/CqlWorkloadGeneratorEndpoint.java index a49c6085b..a666daf55 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/endpoints/cql/CqlWorkloadGeneratorEndpoint.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/endpoints/cql/CqlWorkloadGeneratorEndpoint.java @@ -4,13 +4,15 @@ import io.nosqlbench.generators.cql.lang.CqlWorkloadGen; import io.nosqlbench.docsys.api.WebServiceObject; import io.nosqlbench.nb.annotations.Service; +import javax.inject.Singleton; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -@Service(WebServiceObject.class) +@Service(value = WebServiceObject.class, selector = "cql-workload-generator") @Path("/services/cql/") +@Singleton public class CqlWorkloadGeneratorEndpoint implements WebServiceObject { @POST diff --git a/driver-cqlverify/src/main/java/io/nosqlbench/activitytype/cqlverify/CqlVerifyActivityType.java b/driver-cqlverify/src/main/java/io/nosqlbench/activitytype/cqlverify/CqlVerifyActivityType.java index 0ae0feeb6..54a707c11 100644 --- a/driver-cqlverify/src/main/java/io/nosqlbench/activitytype/cqlverify/CqlVerifyActivityType.java +++ b/driver-cqlverify/src/main/java/io/nosqlbench/activitytype/cqlverify/CqlVerifyActivityType.java @@ -5,14 +5,9 @@ import io.nosqlbench.engine.api.activityapi.core.ActivityType; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.nb.annotations.Service; -@Service(ActivityType.class) +@Service(value = ActivityType.class, selector = "cqlverify") public class CqlVerifyActivityType implements ActivityType { - @Override - public String getName() { - return "cqlverify"; - } - @Override public ActionDispenser getActionDispenser(CqlVerifyActivity activity) { return new CqlVerifyActionDispenser(activity); diff --git a/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/DiagActivityType.java b/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/DiagActivityType.java index 27083fe2f..c03d5395f 100644 --- a/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/DiagActivityType.java +++ b/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/DiagActivityType.java @@ -30,16 +30,11 @@ import org.apache.logging.log4j.LogManager; * * Diag serves as a basic template for implementing your own activity type. */ -@Service(ActivityType.class) +@Service(value = ActivityType.class, selector = "diag") public class DiagActivityType implements ActivityType { private static final Logger logger = LogManager.getLogger(DiagActivityType.class); - @Override - public String getName() { - return "diag"; - } - @Override public ActionDispenser getActionDispenser(DiagActivity activity) { return new DiagActionDispenser(activity); diff --git a/driver-diag/src/test/java/io/nosqlbench/activitytype/diag/DiagActivityTypeTest.java b/driver-diag/src/test/java/io/nosqlbench/activitytype/diag/DiagActivityTypeTest.java index 7b4384a15..dc9c20107 100644 --- a/driver-diag/src/test/java/io/nosqlbench/activitytype/diag/DiagActivityTypeTest.java +++ b/driver-diag/src/test/java/io/nosqlbench/activitytype/diag/DiagActivityTypeTest.java @@ -25,7 +25,6 @@ public class DiagActivityTypeTest { @Test public void testDiagActivity() { DiagActivityType da = new DiagActivityType(); - da.getName(); ActivityDef ad = ActivityDef.parseActivityDef("driver=diag;"); DiagActivity a = da.getActivity(ad); a.initActivity(); diff --git a/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/GraphActivityType.java b/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/GraphActivityType.java index 848e2754d..2364d61ee 100644 --- a/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/GraphActivityType.java +++ b/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/GraphActivityType.java @@ -5,14 +5,9 @@ import io.nosqlbench.engine.api.activityapi.core.ActivityType; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.nb.annotations.Service; -@Service(ActivityType.class) +@Service(value = ActivityType.class, selector = "dsegraph") public class GraphActivityType implements ActivityType { - @Override - public String getName() { - return "dsegraph"; - } - @Override public GraphActivity getActivity(ActivityDef activityDef) { return new GraphActivity(activityDef); diff --git a/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpActivityType.java b/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpActivityType.java index 6d24956dc..f7722403a 100644 --- a/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpActivityType.java +++ b/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpActivityType.java @@ -7,16 +7,11 @@ import io.nosqlbench.nb.annotations.Service; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; -@Service(ActivityType.class) +@Service(value = ActivityType.class, selector = "http") public class HttpActivityType implements ActivityType { private static final Logger logger = LogManager.getLogger(HttpActivityType.class); - @Override - public String getName() { - return "http"; - } - @Override public ActionDispenser getActionDispenser(HttpActivity activity) { if (activity.getParams().getOptionalString("async").isPresent()) { diff --git a/driver-http/src/test/java/io/nosqlbench/activitytype/http/HttpActivityTypeTest.java b/driver-http/src/test/java/io/nosqlbench/activitytype/http/HttpActivityTypeTest.java index c4a191fa0..c4bb3b167 100644 --- a/driver-http/src/test/java/io/nosqlbench/activitytype/http/HttpActivityTypeTest.java +++ b/driver-http/src/test/java/io/nosqlbench/activitytype/http/HttpActivityTypeTest.java @@ -5,14 +5,10 @@ import io.nosqlbench.engine.api.activityapi.core.ActionDispenser; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import org.junit.Test; -import static org.assertj.core.api.Assertions.assertThat; - public class HttpActivityTypeTest { @Test public void testHttpActivity() { HttpActivityType httpAt = new HttpActivityType(); - String atname = httpAt.getName(); - assertThat(atname.equals("http")); ActivityDef ad = ActivityDef.parseActivityDef("driver=http; yaml=http-google.yaml; port=80; cycles=1;"); HttpActivity httpActivity = httpAt.getActivity(ad); diff --git a/driver-jmx/src/main/java/io/nosqlbench/driver/jmx/JMXActivityType.java b/driver-jmx/src/main/java/io/nosqlbench/driver/jmx/JMXActivityType.java index 5f29622f3..ced843ba5 100644 --- a/driver-jmx/src/main/java/io/nosqlbench/driver/jmx/JMXActivityType.java +++ b/driver-jmx/src/main/java/io/nosqlbench/driver/jmx/JMXActivityType.java @@ -5,12 +5,8 @@ import io.nosqlbench.engine.api.activityapi.core.ActivityType; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.nb.annotations.Service; -@Service(ActivityType.class) +@Service(value = ActivityType.class, selector = "jmx") public class JMXActivityType implements ActivityType { - @Override - public String getName() { - return "jmx"; - } @Override public JMXActivity getActivity(ActivityDef activityDef) { diff --git a/driver-kafka/src/main/java/com/datastax/ebdrivers/kafkaproducer/KafkaProducerActivityType.java b/driver-kafka/src/main/java/com/datastax/ebdrivers/kafkaproducer/KafkaProducerActivityType.java index b7a6a12bc..d3238b704 100644 --- a/driver-kafka/src/main/java/com/datastax/ebdrivers/kafkaproducer/KafkaProducerActivityType.java +++ b/driver-kafka/src/main/java/com/datastax/ebdrivers/kafkaproducer/KafkaProducerActivityType.java @@ -6,12 +6,8 @@ import io.nosqlbench.engine.api.activityapi.core.ActivityType; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.nb.annotations.Service; -@Service(ActivityType.class) +@Service(value = ActivityType.class, selector = "kafkaproducer") public class KafkaProducerActivityType implements ActivityType { - @Override - public String getName() { - return "kafkaproducer"; - } @Override public KafkaProducerActivity getActivity(ActivityDef activityDef) { @@ -19,7 +15,7 @@ public class KafkaProducerActivityType implements ActivityType { - @Override - public String getName() { - return "mongodb"; - } - @Override public MongoActivity getActivity(ActivityDef activityDef) { return new MongoActivity(activityDef); diff --git a/driver-pulsar/src/main/java/io/nosqlbench/driver/pulsar/PulsarActivityType.java b/driver-pulsar/src/main/java/io/nosqlbench/driver/pulsar/PulsarActivityType.java index 963f5654e..08d164264 100644 --- a/driver-pulsar/src/main/java/io/nosqlbench/driver/pulsar/PulsarActivityType.java +++ b/driver-pulsar/src/main/java/io/nosqlbench/driver/pulsar/PulsarActivityType.java @@ -9,11 +9,6 @@ import io.nosqlbench.nb.annotations.Service; @Service(value = ActivityType.class, selector = "pulsar") public class PulsarActivityType implements ActivityType { - @Override - public String getName() { - return "pulsar"; - } - @Override public ActionDispenser getActionDispenser(PulsarActivity activity) { if (activity.getParams().getOptionalString("async").isPresent()) { diff --git a/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivityType.java b/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivityType.java index 0399bacf2..e1fc86019 100644 --- a/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivityType.java +++ b/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivityType.java @@ -8,14 +8,9 @@ import io.nosqlbench.nb.annotations.Service; import java.util.Optional; -@Service(ActivityType.class) +@Service(value = ActivityType.class, selector = "stdout") public class StdoutActivityType implements ActivityType { - @Override - public String getName() { - return "stdout"; - } - @Override public StdoutActivity getActivity(ActivityDef activityDef) { Optional yaml = activityDef.getParams().getOptionalString("yaml", "workload"); diff --git a/driver-stdout/src/test/java/io/nosqlbench/activitytype/stdout/StdoutActivityTypeTest.java b/driver-stdout/src/test/java/io/nosqlbench/activitytype/stdout/StdoutActivityTypeTest.java index 53847ca08..99ad701e2 100644 --- a/driver-stdout/src/test/java/io/nosqlbench/activitytype/stdout/StdoutActivityTypeTest.java +++ b/driver-stdout/src/test/java/io/nosqlbench/activitytype/stdout/StdoutActivityTypeTest.java @@ -22,8 +22,6 @@ import io.nosqlbench.engine.api.activityapi.core.ActionDispenser; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import org.junit.Test; -import static org.assertj.core.api.Assertions.assertThat; - /** * Created by sebastianestevez on 5/5/17. */ @@ -32,8 +30,6 @@ public class StdoutActivityTypeTest { @Test public void testDiagActivity() { StdoutActivityType stdoutAt = new StdoutActivityType(); - String atname = stdoutAt.getName(); - assertThat(atname.equals("stdout")); ActivityDef ad = ActivityDef.parseActivityDef("driver=stdout; yaml=stdout-test;"); StdoutActivity stdoutActivity = stdoutAt.getActivity(ad); ActionDispenser actionDispenser = stdoutAt.getActionDispenser(stdoutActivity); diff --git a/driver-tcp/src/main/java/io/nosqlbench/activitytype/tcpclient/TCPClientActivityType.java b/driver-tcp/src/main/java/io/nosqlbench/activitytype/tcpclient/TCPClientActivityType.java index 67ffbb44d..00eb78723 100644 --- a/driver-tcp/src/main/java/io/nosqlbench/activitytype/tcpclient/TCPClientActivityType.java +++ b/driver-tcp/src/main/java/io/nosqlbench/activitytype/tcpclient/TCPClientActivityType.java @@ -25,14 +25,9 @@ import io.nosqlbench.engine.api.activityapi.core.ActivityType; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.nb.annotations.Service; -@Service(ActivityType.class) +@Service(value = ActivityType.class, selector = "tcpclient") public class TCPClientActivityType implements ActivityType { - @Override - public String getName() { - return "tcpclient"; - } - @Override public TCPClientActivity getActivity(ActivityDef activityDef) { return new TCPClientActivity(activityDef); @@ -44,7 +39,7 @@ public class TCPClientActivityType implements ActivityType { } private static class Dispenser implements ActionDispenser { - private StdoutActivity activity; + private final StdoutActivity activity; private Dispenser(StdoutActivity activity) { this.activity = activity; diff --git a/driver-tcp/src/main/java/io/nosqlbench/activitytype/tcpserver/TCPServerActivityType.java b/driver-tcp/src/main/java/io/nosqlbench/activitytype/tcpserver/TCPServerActivityType.java index 920a1c97c..d204cd843 100644 --- a/driver-tcp/src/main/java/io/nosqlbench/activitytype/tcpserver/TCPServerActivityType.java +++ b/driver-tcp/src/main/java/io/nosqlbench/activitytype/tcpserver/TCPServerActivityType.java @@ -25,14 +25,9 @@ import io.nosqlbench.engine.api.activityapi.core.ActivityType; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.nb.annotations.Service; -@Service(ActivityType.class) +@Service(value = ActivityType.class, selector = "tcpserver") public class TCPServerActivityType implements ActivityType { - @Override - public String getName() { - return "tcpserver"; - } - @Override public TCPServerActivity getActivity(ActivityDef activityDef) { return new TCPServerActivity(activityDef); @@ -44,7 +39,7 @@ public class TCPServerActivityType implements ActivityType { } private static class Dispenser implements ActionDispenser { - private StdoutActivity activity; + private final StdoutActivity activity; private Dispenser(StdoutActivity activity) { this.activity = activity; diff --git a/driver-web/src/main/java/io/nosqlbench/driver/webdriver/WebDriverActivityType.java b/driver-web/src/main/java/io/nosqlbench/driver/webdriver/WebDriverActivityType.java index d875d2d6c..cfbff9344 100644 --- a/driver-web/src/main/java/io/nosqlbench/driver/webdriver/WebDriverActivityType.java +++ b/driver-web/src/main/java/io/nosqlbench/driver/webdriver/WebDriverActivityType.java @@ -7,14 +7,9 @@ import io.nosqlbench.engine.api.activityapi.core.ActivityType; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.nb.annotations.Service; -@Service(ActivityType.class) +@Service(value = ActivityType.class, selector = "webdriver") public class WebDriverActivityType implements ActivityType { - @Override - public String getName() { - return "webdriver"; - } - @Override public WebDriverActivity getActivity(ActivityDef activityDef) { return new WebDriverActivity(activityDef); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityType.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityType.java index b5206936d..08dfb5760 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityType.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityType.java @@ -24,8 +24,7 @@ import io.nosqlbench.engine.api.activityimpl.CoreServices; import io.nosqlbench.engine.api.activityimpl.SimpleActivity; import io.nosqlbench.engine.api.activityimpl.action.CoreActionDispenser; import io.nosqlbench.engine.api.activityimpl.motor.CoreMotorDispenser; -import io.nosqlbench.engine.api.util.SimpleServiceLoader; -import io.nosqlbench.nb.api.spi.Named; +import io.nosqlbench.nb.api.spi.SimpleServiceLoader; import java.util.Map; import java.util.Optional; @@ -38,16 +37,9 @@ import java.util.Optional; * an action dispenser. Default implementations of input and motor dispensers are provided, * and by extension, default inputs and motors.

*/ -public interface ActivityType extends Named { +public interface ActivityType { - SimpleServiceLoader FINDER = new SimpleServiceLoader<>(ActivityType.class); - /** - * Return the short name of this activity type. The fully qualified name of an activity type is - * this value, prefixed by the package of the implementing class. - * - * @return An activity type name, like "diag" - */ - String getName(); + SimpleServiceLoader FINDER = new SimpleServiceLoader(ActivityType.class); /** * Create an instance of an activity from the activity type. diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/CoreResultValueFilter.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/CoreResultValueFilter.java index e55266cbf..ef33e6118 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/CoreResultValueFilter.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/CoreResultValueFilter.java @@ -37,14 +37,9 @@ import java.util.function.Predicate; * clause. In the example above, the default policy would be "exclude", * given that the fist clause is "include". */ -@Service(ResultValueFilterType.class) +@Service(value = ResultValueFilterType.class, selector = "core") public class CoreResultValueFilter implements ResultValueFilterType { - @Override - public String getName() { - return "core"; - } - @Override public ResultFilterDispenser getDispenser(String config) { return new Dispenser(config); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/ExperimentalResultFilterType.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/ExperimentalResultFilterType.java index 7dc634892..b743cedff 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/ExperimentalResultFilterType.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/ExperimentalResultFilterType.java @@ -19,15 +19,14 @@ package io.nosqlbench.engine.api.activityapi.cyclelog.filters; import io.nosqlbench.engine.api.activityapi.core.Activity; import io.nosqlbench.engine.api.util.SimpleConfig; -import io.nosqlbench.engine.api.util.SimpleServiceLoader; -import io.nosqlbench.nb.api.spi.Named; +import io.nosqlbench.nb.api.spi.SimpleServiceLoader; import java.util.function.IntPredicate; -public interface ExperimentalResultFilterType extends Named { +public interface ExperimentalResultFilterType { SimpleServiceLoader FINDER = - new SimpleServiceLoader<>(ExperimentalResultFilterType.class); + new SimpleServiceLoader<>(ExperimentalResultFilterType.class); default IntPredicateDispenser getFilterDispenser(Activity activity) { SimpleConfig conf = new SimpleConfig(activity, "resultfilter"); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/IncludeCodesTypeExperimental.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/IncludeCodesTypeExperimental.java index 8734233af..d298c2b47 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/IncludeCodesTypeExperimental.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/IncludeCodesTypeExperimental.java @@ -29,14 +29,9 @@ import java.util.function.IntPredicate; * array is used. When the type widens, this will need to use a native * int trie or something else that is time and space efficient. */ -@Service(ExperimentalResultFilterType.class) +@Service(value = ExperimentalResultFilterType.class, selector = "include") public class IncludeCodesTypeExperimental implements ExperimentalResultFilterType { - @Override - public String getName() { - return "include"; - } - @Override public IntPredicate getIntPredicate(SimpleConfig conf) { return new IncludeCodes(conf); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/ResultValueFilterType.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/ResultValueFilterType.java index 4f0f2e488..08d902d2e 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/ResultValueFilterType.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/ResultValueFilterType.java @@ -17,10 +17,9 @@ package io.nosqlbench.engine.api.activityapi.cyclelog.filters; -import io.nosqlbench.engine.api.util.SimpleServiceLoader; -import io.nosqlbench.nb.api.spi.Named; +import io.nosqlbench.nb.api.spi.SimpleServiceLoader; -public interface ResultValueFilterType extends Named { +public interface ResultValueFilterType { SimpleServiceLoader FINDER = new SimpleServiceLoader<>(ResultValueFilterType.class); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/inputs/cyclelog/CycleLogInputType.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/inputs/cyclelog/CycleLogInputType.java index dbb5e4d50..6933c012e 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/inputs/cyclelog/CycleLogInputType.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/inputs/cyclelog/CycleLogInputType.java @@ -23,12 +23,8 @@ import io.nosqlbench.engine.api.activityapi.input.InputDispenser; import io.nosqlbench.engine.api.activityapi.input.InputType; import io.nosqlbench.nb.annotations.Service; -@Service(InputType.class) +@Service(value = InputType.class, selector = "cyclelog") public class CycleLogInputType implements InputType { - @Override - public String getName() { - return "cyclelog"; - } @Override public InputDispenser getInputDispenser(Activity activity) { diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/cyclelog/CycleLogOutputType.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/cyclelog/CycleLogOutputType.java index c71fcdbe6..edc1f4134 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/cyclelog/CycleLogOutputType.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/cyclelog/CycleLogOutputType.java @@ -27,14 +27,9 @@ import io.nosqlbench.nb.annotations.Service; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; -@Service(OutputType.class) +@Service(value = OutputType.class, selector = "cyclelog") public class CycleLogOutputType implements OutputType { - @Override - public String getName() { - return "cyclelog"; - } - @Override public OutputDispenser getOutputDispenser(Activity activity) { return new Dispenser(activity); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/logger/LoggingMarkerDispenser.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/logger/LoggingMarkerDispenser.java index 9846bf278..8124117b0 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/logger/LoggingMarkerDispenser.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/logger/LoggingMarkerDispenser.java @@ -24,7 +24,7 @@ import io.nosqlbench.nb.annotations.Service; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; -@Service(OutputDispenser.class) +@Service(value = OutputDispenser.class, selector = "logging-marker") public class LoggingMarkerDispenser implements OutputDispenser { private final static Logger logger = LogManager.getLogger(LoggingMarkerDispenser.class); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/input/InputType.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/input/InputType.java index 59ccd4423..fbc2b91e0 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/input/InputType.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/input/InputType.java @@ -18,13 +18,12 @@ package io.nosqlbench.engine.api.activityapi.input; import io.nosqlbench.engine.api.activityapi.core.Activity; -import io.nosqlbench.engine.api.util.SimpleServiceLoader; -import io.nosqlbench.nb.api.spi.Named; +import io.nosqlbench.nb.api.spi.SimpleServiceLoader; -public interface InputType extends Named { +public interface InputType { SimpleServiceLoader FINDER = - new SimpleServiceLoader<>(InputType.class); + new SimpleServiceLoader<>(InputType.class); InputDispenser getInputDispenser(Activity activity); } diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/output/OutputType.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/output/OutputType.java index 04ead50f7..0678bd69d 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/output/OutputType.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/output/OutputType.java @@ -18,13 +18,12 @@ package io.nosqlbench.engine.api.activityapi.output; import io.nosqlbench.engine.api.activityapi.core.Activity; -import io.nosqlbench.engine.api.util.SimpleServiceLoader; -import io.nosqlbench.nb.api.spi.Named; +import io.nosqlbench.nb.api.spi.SimpleServiceLoader; -public interface OutputType extends Named { +public interface OutputType { SimpleServiceLoader FINDER = - new SimpleServiceLoader<>(OutputType.class); + new SimpleServiceLoader<>(OutputType.class); OutputDispenser getOutputDispenser(Activity activity); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/input/TargetRateInputType.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/input/TargetRateInputType.java index 0eef8ed4a..90aba3fde 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/input/TargetRateInputType.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/input/TargetRateInputType.java @@ -23,14 +23,9 @@ import io.nosqlbench.engine.api.activityapi.input.InputDispenser; import io.nosqlbench.engine.api.activityapi.input.InputType; import io.nosqlbench.nb.annotations.Service; -@Service(InputType.class) +@Service(value = InputType.class, selector = "atomicseq") public class TargetRateInputType implements InputType { - @Override - public String getName() { - return "atomicseq"; - } - @Override public InputDispenser getInputDispenser(Activity activity) { return new Dispenser(activity); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/util/SimpleServiceLoader.java b/engine-api/src/main/java/io/nosqlbench/engine/api/util/SimpleServiceLoader.java deleted file mode 100644 index d4e414d07..000000000 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/util/SimpleServiceLoader.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * - * Copyright 2016 jshook - * Licensed 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 io.nosqlbench.engine.api.util; - -import io.nosqlbench.nb.api.spi.Named; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; - -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.stream.Collectors; - -public class SimpleServiceLoader { - - private static final Logger logger = LogManager.getLogger(SimpleServiceLoader.class); - private final Class serviceType; - private static SimpleServiceLoader instance; - - private final Map types = new ConcurrentHashMap<>(); - - public SimpleServiceLoader(Class serviceType) { - this.serviceType = serviceType; - } - - public Optional get(String implName) { - return Optional.ofNullable(getTypes().get(implName)); - } - - public T getOrThrow(String implName) { - Optional at = Optional.ofNullable(getTypes().get(implName)); - return at.orElseThrow( - () -> new RuntimeException(serviceType.getSimpleName() + " '" + implName + "' not found. Available types:" + - this.getTypes().keySet().stream().collect(Collectors.joining(","))) - ); - } - - private synchronized Map getTypes() { - if (types.size()==0) { - ClassLoader cl = getClass().getClassLoader(); - logger.debug("loading service types for " + serviceType.getSimpleName()); - ServiceLoader sl = ServiceLoader.load(serviceType); - try { - for (T inputType : sl) { - if (types.get(inputType.getName()) != null) { - throw new RuntimeException("ActivityType '" + inputType.getName() - + "' is already defined."); - } - types.put(inputType.getName(),inputType); - } - } catch (Throwable t) { - throw new RuntimeException(t); - } - } - logger.debug("Loaded Types:" + types.keySet()); - return types; - } - - public List getAll() { - List types = new ArrayList<>(getTypes().values()); - types.sort(Comparator.comparing(Named::getName)); - return Collections.unmodifiableList(types); - } - -} diff --git a/engine-api/src/test/java/io/nosqlbench/TestMetricsRegistry.java b/engine-api/src/test/java/io/nosqlbench/TestMetricsRegistry.java index 5ec2f44d5..a68ed9f36 100644 --- a/engine-api/src/test/java/io/nosqlbench/TestMetricsRegistry.java +++ b/engine-api/src/test/java/io/nosqlbench/TestMetricsRegistry.java @@ -24,10 +24,10 @@ import io.nosqlbench.nb.annotations.Service; /** * Provide a local MetricRegistryService for tests */ -@Service(MetricRegistryService.class) +@Service(value = MetricRegistryService.class, selector = "test-registry") public class TestMetricsRegistry implements MetricRegistryService { - private MetricRegistry metricRegistry = new MetricRegistry(); + private final MetricRegistry metricRegistry = new MetricRegistry(); @Override public MetricRegistry getMetricRegistry() { diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java index cea78e67b..4903a2237 100644 --- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java +++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java @@ -1,6 +1,6 @@ package io.nosqlbench.engine.cli; -import io.nosqlbench.docsys.core.DocServerApp; +import io.nosqlbench.docsys.core.NBWebServerApp; import io.nosqlbench.engine.api.activityapi.core.ActivityType; import io.nosqlbench.engine.api.activityapi.cyclelog.outputs.cyclelog.CycleLogDumperUtility; import io.nosqlbench.engine.api.activityapi.cyclelog.outputs.cyclelog.CycleLogImporterUtility; @@ -163,7 +163,7 @@ public class NBCLI { System.exit(0); } if (args.length > 0 && args[0].toLowerCase().matches("docserver|appserver")) { - DocServerApp.main(Arrays.copyOfRange(args, 1, args.length)); + NBWebServerApp.main(Arrays.copyOfRange(args, 1, args.length)); System.exit(0); } if (args.length > 0 && args[0].toLowerCase().equals(MarkdownExporter.APP_NAME)) { @@ -194,7 +194,7 @@ public class NBCLI { } if (options.wantsActivityTypes()) { - ActivityType.FINDER.getAll().stream().map(ActivityType::getName).forEach(System.out::println); + ActivityType.FINDER.getAllSelectors().forEach(System.out::println); System.exit(0); } @@ -251,12 +251,12 @@ public class NBCLI { } if (options.wantsInputTypes()) { - InputType.FINDER.getAll().stream().map(InputType::getName).forEach(System.out::println); + InputType.FINDER.getAllSelectors().forEach(System.out::println); System.exit(0); } if (options.wantsMarkerTypes()) { - OutputType.FINDER.getAll().stream().map(OutputType::getName).forEach(System.out::println); + OutputType.FINDER.getAllSelectors().forEach(System.out::println); System.exit(0); } diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/annotator/GrafanaMetricsAnnotator.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/annotator/GrafanaMetricsAnnotator.java index aea5af896..05134d91a 100644 --- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/annotator/GrafanaMetricsAnnotator.java +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/annotator/GrafanaMetricsAnnotator.java @@ -103,11 +103,6 @@ public class GrafanaMetricsAnnotator implements Annotator, ConfigAware { } - @Override - public String getName() { - return "grafana"; - } - @Override public void applyConfig(Map providedConfig) { ConfigModel configModel = getConfigModel(); diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java b/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java index 053c0006d..9b664be87 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java @@ -47,6 +47,7 @@ public class Annotators { Object typeObj = cmap.remove("type"); String typename = typeObj.toString(); ServiceLoader.Provider annotatorProvider = providers.get(typename); + if (annotatorProvider == null) { throw new RuntimeException("Annotation provider with selector '" + typename + "' was not found."); } @@ -98,7 +99,7 @@ public class Annotators { public static synchronized void recordAnnotation(Annotation annotation) { for (Annotator annotator : getAnnotators()) { try { - logger.trace("calling annotator " + annotator.getName()); + logger.trace("calling annotator " + annotator.getClass().getAnnotation(Service.class).selector()); annotator.recordAnnotation(annotation); } catch (Exception e) { logger.error(e); diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java index 4be729481..30a9229ff 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java @@ -280,14 +280,15 @@ public class ScenarioController { if (executor == null && createIfMissing) { String activityTypeName = activityDef.getParams().getOptionalString("driver", "type").orElse(null); - List knownTypes = ActivityType.FINDER.getAll().stream().map(ActivityType::getName).collect(Collectors.toList()); + + List knownTypes = ActivityType.FINDER.getAllSelectors(); // Infer the type from either alias or yaml if possible (exactly one matches) if (activityTypeName == null) { List matching = knownTypes.stream().filter( - n -> - activityDef.getParams().getOptionalString("alias").orElse("").contains(n) - || activityDef.getParams().getOptionalString("yaml", "workload").orElse("").contains(n) + n -> + activityDef.getParams().getOptionalString("alias").orElse("").contains(n) + || activityDef.getParams().getOptionalString("yaml", "workload").orElse("").contains(n) ).collect(Collectors.toList()); if (matching.size() == 1) { activityTypeName = matching.get(0); diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metadata/MarkdownDocInfo.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metadata/MarkdownDocInfo.java index e7083f695..db9e9c644 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/metadata/MarkdownDocInfo.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metadata/MarkdownDocInfo.java @@ -1,6 +1,7 @@ package io.nosqlbench.engine.core.metadata; import io.nosqlbench.engine.api.activityapi.core.ActivityType; +import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.api.content.Content; import io.nosqlbench.nb.api.content.NBIO; import org.apache.logging.log4j.LogManager; @@ -44,7 +45,8 @@ public class MarkdownDocInfo { public String forActivityInstance(String s) { ActivityType activityType = ActivityType.FINDER.getOrThrow(s); - return forResourceMarkdown(activityType.getName() + ".md", "docs/"); + return forResourceMarkdown(activityType.getClass().getAnnotation(Service.class) + .selector() + ".md", "docs/"); } } diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/LoggingAnnotator.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/LoggingAnnotator.java index fa96cc860..1a5a23e1a 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/LoggingAnnotator.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/LoggingAnnotator.java @@ -31,16 +31,6 @@ public class LoggingAnnotator implements Annotator, ConfigAware { annotatorLog.log(level, inlineForm); } - /** - * @return The annotated selector of this implementation, - * ensuring that selector and name stay the same - */ - @Override - public String getName() { - String selector = LoggingAnnotator.class.getAnnotation(Service.class).selector(); - return selector; - } - @Override public void applyConfig(Map providedConfig) { ConfigModel configModel = getConfigModel(); diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricsContext.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricsContext.java index 6c4abb8ae..5a074922e 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricsContext.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricsContext.java @@ -21,17 +21,17 @@ import com.codahale.metrics.MetricRegistry; import io.nosqlbench.engine.api.activityapi.core.MetricRegistryService; import io.nosqlbench.nb.annotations.Service; -@Service(MetricRegistryService.class) +@Service(value = MetricRegistryService.class, selector = "metrics-context") public class MetricsContext implements MetricRegistryService { private static MetricsContext instance; - private MetricReporters metricReporters = MetricReporters.getInstance(); - private MetricRegistry metrics = new NBMetricsRegistry(); + private final MetricReporters metricReporters = MetricReporters.getInstance(); + private final MetricRegistry metrics = new NBMetricsRegistry(); public static MetricsContext getInstance() { synchronized (MetricsContext.class) { - if (instance==null) { + if (instance == null) { instance = new MetricsContext(); } } diff --git a/engine-docs/src/main/java/io/nosqlbench/engine/docs/NosqlBenchRawMarkdownSource.java b/engine-docs/src/main/java/io/nosqlbench/engine/docs/NosqlBenchRawMarkdownSource.java index 0493a92e0..c7be1f6e1 100644 --- a/engine-docs/src/main/java/io/nosqlbench/engine/docs/NosqlBenchRawMarkdownSource.java +++ b/engine-docs/src/main/java/io/nosqlbench/engine/docs/NosqlBenchRawMarkdownSource.java @@ -1,13 +1,10 @@ package io.nosqlbench.engine.docs; import io.nosqlbench.nb.annotations.Service; -import io.nosqlbench.nb.api.content.Content; import io.nosqlbench.nb.api.markdown.providers.DocsRootDirectory; import io.nosqlbench.nb.api.markdown.providers.RawMarkdownSource; -import java.util.List; - -@Service(RawMarkdownSource.class) +@Service(value = RawMarkdownSource.class, selector = "docs-for-eb") public class NosqlBenchRawMarkdownSource extends DocsRootDirectory { @Override diff --git a/engine-docs/src/main/java/io/nosqlbench/engine/docs/NosqlbenchMarkdownManifest.java b/engine-docs/src/main/java/io/nosqlbench/engine/docs/NosqlbenchMarkdownManifest.java index 9bd03fcea..716144c30 100644 --- a/engine-docs/src/main/java/io/nosqlbench/engine/docs/NosqlbenchMarkdownManifest.java +++ b/engine-docs/src/main/java/io/nosqlbench/engine/docs/NosqlbenchMarkdownManifest.java @@ -5,15 +5,15 @@ import io.nosqlbench.docsys.api.DocsBinder; import io.nosqlbench.docsys.api.DocsysDynamicManifest; import io.nosqlbench.nb.annotations.Service; -@Service(DocsysDynamicManifest.class) +@Service(value = DocsysDynamicManifest.class, selector = "docs-for-eb") public class NosqlbenchMarkdownManifest implements DocsysDynamicManifest { @Override public DocsBinder getDocs() { return new Docs().namespace("docs-for-eb") - .addFirstFoundPath( - "engine-docs/src/main/resources/docs-for-nb/", - "docs-for-nb/" - ).setEnabledByDefault(true) - .asDocsBinder(); + .addFirstFoundPath( + "engine-docs/src/main/resources/docs-for-nb/", + "docs-for-nb/" + ).setEnabledByDefault(true) + .asDocsBinder(); } } diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histologger/HdrHistoLogPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histologger/HdrHistoLogPluginData.java index 12358340f..992e1b042 100644 --- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histologger/HdrHistoLogPluginData.java +++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histologger/HdrHistoLogPluginData.java @@ -24,8 +24,9 @@ import org.apache.logging.log4j.Logger; import javax.script.ScriptContext; -@Service(ScriptingPluginInfo.class) +@Service(value = ScriptingPluginInfo.class, selector = "histologger") public class HdrHistoLogPluginData implements ScriptingPluginInfo { + @Override public String getDescription() { return "allows script control of HDR histogram interval logging"; @@ -36,9 +37,4 @@ public class HdrHistoLogPluginData implements ScriptingPluginInfo listing = ws.getWorkspaceListingView(""); if (contains != null) { listing = listing.stream().filter(i -> i.contains(contains)).collect(Collectors.toList()); @@ -132,7 +132,7 @@ public class WorkspacesEndpoint implements WebServiceObject { @QueryParam("ls") String ls) { try { - if (ls != null && !ls.toLowerCase().equals("false")) { + if (ls != null && !ls.equalsIgnoreCase("false")) { WorkSpace ws = getSvc().getWorkspace(workspace); List listing = ws.getWorkspaceListingView(filename); return Response.ok(listing).build(); diff --git a/nb-annotations/src/main/java/io/nosqlbench/nb/annotations/Service.java b/nb-annotations/src/main/java/io/nosqlbench/nb/annotations/Service.java index 8b8aa60b9..dfc4308c0 100644 --- a/nb-annotations/src/main/java/io/nosqlbench/nb/annotations/Service.java +++ b/nb-annotations/src/main/java/io/nosqlbench/nb/annotations/Service.java @@ -31,5 +31,6 @@ import java.lang.annotation.Target; public @interface Service { Class value(); - String selector() default ""; + String selector(); + } diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotator.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotator.java index 2b0d7fe0d..04a16aca0 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotator.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotator.java @@ -1,12 +1,10 @@ package io.nosqlbench.nb.api.annotations; -import io.nosqlbench.nb.api.spi.Named; - /** * An implementation of this type is responsible for taking annotation details and * logging them in a useful place. */ -public interface Annotator extends Named { +public interface Annotator { /** * Submit an annotation to some type of annotation store, logging or eventing mechanism. diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/markdown/DocsForTestingOnly.java b/nb-api/src/main/java/io/nosqlbench/nb/api/markdown/DocsForTestingOnly.java index 9b78d13d2..e8f0afe0c 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/markdown/DocsForTestingOnly.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/markdown/DocsForTestingOnly.java @@ -4,7 +4,7 @@ import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.api.markdown.providers.DocsRootDirectory; import io.nosqlbench.nb.api.markdown.providers.RawMarkdownSource; -@Service(RawMarkdownSource.class) +@Service(value = RawMarkdownSource.class, selector = "docs-for-testing") public class DocsForTestingOnly extends DocsRootDirectory { @Override diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/spi/Named.java b/nb-api/src/main/java/io/nosqlbench/nb/api/spi/Named.java deleted file mode 100644 index 06592302c..000000000 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/spi/Named.java +++ /dev/null @@ -1,10 +0,0 @@ -package io.nosqlbench.nb.api.spi; - -public interface Named { - /** - *

Return the name for this function library implementation.

- * - * @return Simple lower-case canonical library name - */ - String getName(); -} diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/spi/SimpleServiceLoader.java b/nb-api/src/main/java/io/nosqlbench/nb/api/spi/SimpleServiceLoader.java new file mode 100644 index 000000000..58effcdf6 --- /dev/null +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/spi/SimpleServiceLoader.java @@ -0,0 +1,88 @@ +/* + * + * Copyright 2016 jshook + * Licensed 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 io.nosqlbench.nb.api.spi; + +import io.nosqlbench.nb.annotations.Service; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.*; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +public class SimpleServiceLoader { + + private static final Logger logger = LogManager.getLogger(SimpleServiceLoader.class); + private final Class serviceType; + + public SimpleServiceLoader(Class serviceType) { + this.serviceType = serviceType; + } + + public Optional get(String implName) { + LinkedHashMap> namedProviders = getNamedProviders(); + ServiceLoader.Provider providers = namedProviders.get(implName); + return Optional.ofNullable(providers == null ? null : providers.get()); + } + + public T getOrThrow(String implName) { + Optional t = get(implName); + return t.orElseThrow( + () -> new RuntimeException(serviceType.getSimpleName() + " '" + implName + "' not found. Available types:" + + this.getNamedProviders().keySet().stream().collect(Collectors.joining(","))) + ); + } + + /** + * Load the service providers which are annotated with {@link Service} and selector names. + * + * @param includes If provided, a list of patterns which are used to include named services based on the selector name from the + * {@link Service} annotation. + * @return A map of providers of T + */ + public synchronized LinkedHashMap> getNamedProviders(Pattern... includes) { + ServiceLoader loader = ServiceLoader.load(serviceType); + List patterns = (includes != null && includes.length > 0) ? Arrays.asList(includes) : List.of(Pattern.compile(".*")); + + LinkedHashMap> providers; + providers = new LinkedHashMap<>(); + + loader.stream().forEach(provider -> { + Class type = provider.type(); + if (!type.isAnnotationPresent(Service.class)) { + throw new RuntimeException( + "Annotator services must be annotated with distinct selectors\n" + + "such as @Service(Annotator.class,selector=\"myimpl42\")" + ); + } + Service service = type.getAnnotation(Service.class); + for (Pattern pattern : patterns) { + if (pattern.matcher(service.selector()).matches()) { + providers.put(service.selector(), provider); + break; + } + } + }); + + return providers; + } + + public List getAllSelectors(Pattern... patterns) { + return new ArrayList<>(getNamedProviders(patterns).keySet()); + } +} diff --git a/virtdata-api/src/main/java/io/nosqlbench/virtdata/api/processors/FunctionDocInfoWriter.java b/virtdata-api/src/main/java/io/nosqlbench/virtdata/api/processors/FunctionDocInfoWriter.java index cdf675552..5b5e2deed 100644 --- a/virtdata-api/src/main/java/io/nosqlbench/virtdata/api/processors/FunctionDocInfoWriter.java +++ b/virtdata-api/src/main/java/io/nosqlbench/virtdata/api/processors/FunctionDocInfoWriter.java @@ -17,8 +17,8 @@ import java.util.stream.Collectors; public class FunctionDocInfoWriter implements FuncEnumerator.Listener { private final String suffix; - private Filer filer; - private Messager messenger; + private final Filer filer; + private final Messager messenger; public FunctionDocInfoWriter(Filer filer, Messager messenger, String suffix) { this.filer = filer; @@ -100,7 +100,7 @@ public class FunctionDocInfoWriter implements FuncEnumerator.Listener { ctors.add("add(new $T<$T>() {{$>\n", ArrayList.class, String.class); for (String s : example) { Matcher m = Pattern.compile(Matcher.quoteReplacement("$")).matcher(s); - s=m.replaceAll(m.quoteReplacement("$$")); + s = m.replaceAll(Matcher.quoteReplacement("$$")); ctors.add("add(\"" + s + "\");\n"); } ctors.add("$<}});\n"); @@ -127,7 +127,8 @@ public class FunctionDocInfoWriter implements FuncEnumerator.Listener { AnnotationSpec serviceAnnotation = AnnotationSpec.builder(Service.class) - .addMember("value","$T.class",DocFuncData.class) + .addMember("value", "$T.class", DocFuncData.class) + .addMember("selector", "$S", doc.getPackageName() + "." + doc.getClassName()) .build(); TypeSpec manifestType = TypeSpec.classBuilder(newClassName) diff --git a/virtdata-api/src/main/java/io/nosqlbench/virtdata/core/bindings/VirtDataFunctionLibrary.java b/virtdata-api/src/main/java/io/nosqlbench/virtdata/core/bindings/VirtDataFunctionLibrary.java index 982ad4e9e..034fe5216 100644 --- a/virtdata-api/src/main/java/io/nosqlbench/virtdata/core/bindings/VirtDataFunctionLibrary.java +++ b/virtdata-api/src/main/java/io/nosqlbench/virtdata/core/bindings/VirtDataFunctionLibrary.java @@ -1,6 +1,5 @@ package io.nosqlbench.virtdata.core.bindings; -import io.nosqlbench.nb.api.spi.Named; import io.nosqlbench.virtdata.lang.ast.Expression; import io.nosqlbench.virtdata.lang.ast.FunctionCall; import io.nosqlbench.virtdata.lang.parser.VirtDataDSL; @@ -12,7 +11,7 @@ import java.util.stream.Collectors; * A VirtDataFunctionLibrary is simply a way to ask for a set * of named function objects in a generic way. */ -public interface VirtDataFunctionLibrary extends Named { +public interface VirtDataFunctionLibrary { /** * Given a signature for a unary function which takes an input diff --git a/virtdata-api/src/main/java/io/nosqlbench/virtdata/core/bindings/VirtDataLibraries.java b/virtdata-api/src/main/java/io/nosqlbench/virtdata/core/bindings/VirtDataLibraries.java index 6b500e4d5..c7063a178 100644 --- a/virtdata-api/src/main/java/io/nosqlbench/virtdata/core/bindings/VirtDataLibraries.java +++ b/virtdata-api/src/main/java/io/nosqlbench/virtdata/core/bindings/VirtDataLibraries.java @@ -9,9 +9,9 @@ import java.util.List; import java.util.Map; public class VirtDataLibraries implements VirtDataFunctionLibrary { - private final static Logger logger = LogManager.getLogger(VirtDataLibraries.class); - private static VirtDataLibraries instance = new VirtDataLibraries(); - private final Map> threadSafeCache = new HashMap<>(); + private final static Logger logger = LogManager.getLogger(VirtDataLibraries.class); + private static final VirtDataLibraries instance = new VirtDataLibraries(); + private final Map> threadSafeCache = new HashMap<>(); private final VirtDataFunctionResolver resolver = new VirtDataFunctionResolver(); @@ -21,11 +21,6 @@ public class VirtDataLibraries implements VirtDataFunctionLibrary { private VirtDataLibraries() { } - @Override - - public String getName() { - return "ALL"; - } @Override public List resolveFunctions( diff --git a/virtdata-userlibs/src/main/java/io/nosqlbench/virtdata/userlibs/apps/VirtDataService.java b/virtdata-userlibs/src/main/java/io/nosqlbench/virtdata/userlibs/apps/VirtDataService.java index f9b034179..8a17db0c8 100644 --- a/virtdata-userlibs/src/main/java/io/nosqlbench/virtdata/userlibs/apps/VirtDataService.java +++ b/virtdata-userlibs/src/main/java/io/nosqlbench/virtdata/userlibs/apps/VirtDataService.java @@ -13,7 +13,7 @@ import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; -@Service(WebServiceObject.class) +@Service(value = WebServiceObject.class, selector = "virtdata") @Singleton @Path("virtdata") public class VirtDataService implements WebServiceObject { diff --git a/virtdata-userlibs/src/main/java/io/nosqlbench/virtdata/userlibs/apps/docsapp/AutoDocsWebService.java b/virtdata-userlibs/src/main/java/io/nosqlbench/virtdata/userlibs/apps/docsapp/AutoDocsWebService.java index 350f7d7ce..caa358c21 100644 --- a/virtdata-userlibs/src/main/java/io/nosqlbench/virtdata/userlibs/apps/docsapp/AutoDocsWebService.java +++ b/virtdata-userlibs/src/main/java/io/nosqlbench/virtdata/userlibs/apps/docsapp/AutoDocsWebService.java @@ -18,7 +18,7 @@ import javax.ws.rs.core.MediaType; import java.util.List; import java.util.stream.Collectors; -@Service(WebServiceObject.class) +@Service(value = WebServiceObject.class, selector = "autodocs") @Singleton @Path("/services/virtdata/functions/") public class AutoDocsWebService implements WebServiceObject { diff --git a/virtdata-userlibs/src/main/java/io/nosqlbench/virtdata/userlibs/docinfo/VirtdataMarkdownManifest.java b/virtdata-userlibs/src/main/java/io/nosqlbench/virtdata/userlibs/docinfo/VirtdataMarkdownManifest.java index 0eef43ce5..85f75d444 100644 --- a/virtdata-userlibs/src/main/java/io/nosqlbench/virtdata/userlibs/docinfo/VirtdataMarkdownManifest.java +++ b/virtdata-userlibs/src/main/java/io/nosqlbench/virtdata/userlibs/docinfo/VirtdataMarkdownManifest.java @@ -5,7 +5,7 @@ import io.nosqlbench.docsys.api.Docs; import io.nosqlbench.docsys.api.DocsBinder; import io.nosqlbench.docsys.api.DocsysDynamicManifest; -@Service(DocsysDynamicManifest.class) +@Service(value = DocsysDynamicManifest.class, selector = "virtdata-docs") public class VirtdataMarkdownManifest implements DocsysDynamicManifest { public DocsBinder getDocs() {