diff --git a/addons/jaeger/README.md b/addons/jaeger/README.md
new file mode 100644
index 0000000..250104e
--- /dev/null
+++ b/addons/jaeger/README.md
@@ -0,0 +1,29 @@
+# Sample Apps for Jaeger-Addon
+
+web-service1 is the root service which calls web-service2 and web-service3.
+
+web-service2 and web-service3 can also run independently.
+
+
+
+Steps to Run:
+
+1. run maven build for each web-service
+2. mvn seedstack:run is the command to start each web-service
+3. web-service1, web-service2, web-service3 will start on port 8080, 9000, 8090 respectively
+4. you need a collector to collect the traces send by above web services and that can be downloaded from https://www.jaegertracing.io/download/ ( see binary for windows, simpler one ).
+5. start the jaeger-all-in-one.exe as back-end service (Collector)
+
+
+URLs of Web Services-
+
+web-service1-> http://localhost:8080/api/v1/names/random
+
+web-service2-> http://localhost:9000/api/v1/animals/random
+
+web-service3-> http://localhost:8090/api/v1/scientists/random
+
+now access- http://localhost:16686/search to see the jaeger traces
+
+
+
diff --git a/addons/jaeger/web-service1/pom.xml b/addons/jaeger/web-service1/pom.xml
new file mode 100644
index 0000000..aa0aef9
--- /dev/null
+++ b/addons/jaeger/web-service1/pom.xml
@@ -0,0 +1,109 @@
+
+
+ 4.0.0
+
+
+ org.seedstack.samples
+ samples
+ 20.11-SNAPSHOT
+ ../../pom.xml
+
+
+ web-service1
+
+
+ 6.1.6.Final
+ 1.2.3
+ 3.12.1
+ 3.3.0
+
+
+
+
+
+ org.seedstack
+ seedstack-maven-plugin
+
+
+ build-capsule
+
+ package
+
+
+
+
+
+
+
+
+
+
+ org.seedstack.seed
+ seed-core
+
+
+ org.seedstack.seed
+ seed-security-core
+
+
+ org.seedstack.seed
+ seed-web-core
+
+
+ org.seedstack.seed
+ seed-web-security
+
+
+ org.seedstack.seed
+ seed-rest-jersey2
+
+
+ org.seedstack.seed
+ seed-web-undertow
+
+
+ org.seedstack.business
+ business-core
+
+
+ org.seedstack.addons.modelmapper
+ modelmapper
+
+
+ ch.qos.logback
+ logback-classic
+ ${logback.version}
+
+
+ org.hibernate.validator
+ hibernate-validator
+ ${hibernate-validator.version}
+
+
+
+ org.seedstack.seed
+ seed-testing-junit4
+ test
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+ io.rest-assured
+ rest-assured
+ ${rest-assured.version}
+ test
+
+
+
+ org.seedstack.addons.jaeger
+ jaeger
+ 1.0.0-SNAPSHOT
+
+
+
+
diff --git a/addons/jaeger/web-service1/src/main/java/org/generated/project/domain/model/aggregate/Aggregate.java b/addons/jaeger/web-service1/src/main/java/org/generated/project/domain/model/aggregate/Aggregate.java
new file mode 100644
index 0000000..1a2a644
--- /dev/null
+++ b/addons/jaeger/web-service1/src/main/java/org/generated/project/domain/model/aggregate/Aggregate.java
@@ -0,0 +1,18 @@
+package org.generated.project.domain.model.aggregate;
+
+import org.seedstack.business.domain.BaseAggregateRoot;
+
+
+public class Aggregate extends BaseAggregateRoot {
+ private String id;
+
+
+ public Aggregate(String id) {
+ this.id = id;
+ }
+
+ @Override
+ public String getId() {
+ return id;
+ }
+}
diff --git a/addons/jaeger/web-service1/src/main/java/org/generated/project/domain/services/MyMetricFactory.java b/addons/jaeger/web-service1/src/main/java/org/generated/project/domain/services/MyMetricFactory.java
new file mode 100644
index 0000000..87bebbb
--- /dev/null
+++ b/addons/jaeger/web-service1/src/main/java/org/generated/project/domain/services/MyMetricFactory.java
@@ -0,0 +1,45 @@
+/*
+ * Creation : 9 Jun 2021
+ */
+package org.generated.project.domain.services;
+
+import java.util.Map;
+
+import io.jaegertracing.internal.metrics.Counter;
+import io.jaegertracing.internal.metrics.Gauge;
+import io.jaegertracing.internal.metrics.Timer;
+import io.jaegertracing.spi.MetricsFactory;
+
+public class MyMetricFactory implements MetricsFactory {
+
+ @Override
+ public Counter createCounter(String name, Map tags) {
+ return new Counter() {
+
+ @Override
+ public void inc(long delta) {
+ }
+ };
+ }
+
+ @Override
+ public Timer createTimer(final String name, final Map tags) {
+ return new Timer() {
+
+ @Override
+ public void durationMicros(long time) {
+ }
+ };
+ }
+
+ @Override
+ public Gauge createGauge(final String name, final Map tags) {
+ return new Gauge() {
+
+ @Override
+ public void update(long amount) {
+ }
+ };
+ }
+
+}
\ No newline at end of file
diff --git a/addons/jaeger/web-service1/src/main/java/org/generated/project/domain/services/RequestBuilderCarrier.java b/addons/jaeger/web-service1/src/main/java/org/generated/project/domain/services/RequestBuilderCarrier.java
new file mode 100644
index 0000000..67531a1
--- /dev/null
+++ b/addons/jaeger/web-service1/src/main/java/org/generated/project/domain/services/RequestBuilderCarrier.java
@@ -0,0 +1,25 @@
+package org.generated.project.domain.services;
+
+import io.opentracing.propagation.TextMap;
+import okhttp3.Request;
+
+import java.util.Iterator;
+import java.util.Map;
+
+public class RequestBuilderCarrier implements TextMap {
+ private final Request.Builder requestBuilder;
+
+ public RequestBuilderCarrier(Request.Builder requestBuilder) {
+ this.requestBuilder = requestBuilder;
+ }
+
+ @Override
+ public Iterator> iterator() {
+ throw new UnsupportedOperationException("carrier is writer-only");
+ }
+
+ @Override
+ public void put(String key, String value) {
+ requestBuilder.addHeader(key, value);
+ }
+}
diff --git a/addons/jaeger/web-service1/src/main/java/org/generated/project/interfaces/rest/NameGeneratorService.java b/addons/jaeger/web-service1/src/main/java/org/generated/project/interfaces/rest/NameGeneratorService.java
new file mode 100644
index 0000000..cceb751
--- /dev/null
+++ b/addons/jaeger/web-service1/src/main/java/org/generated/project/interfaces/rest/NameGeneratorService.java
@@ -0,0 +1,64 @@
+package org.generated.project.interfaces.rest;
+
+import java.io.IOException;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+import org.generated.project.domain.services.RequestBuilderCarrier;
+import org.seedstack.jaeger.Tracing;
+
+import io.opentracing.Span;
+import io.opentracing.SpanContext;
+import io.opentracing.Tracer;
+import io.opentracing.propagation.Format;
+import io.opentracing.propagation.TextMap;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+
+@Path("/api/v1/names")
+public class NameGeneratorService {
+
+ OkHttpClient client = new OkHttpClient();
+
+ @Tracing("name-svc")
+ private Tracer tracer;
+
+ @GET
+ @Path("/random")
+ public String name() throws Exception {
+
+ Span span = tracer.buildSpan("generate-name").start();
+
+ Span scientistSpan = tracer.buildSpan("scientist-name-service").asChildOf(span).start();
+ String scientist = makeRequest("http://localhost:8090/api/v1/scientists/random", scientistSpan);
+ scientistSpan.finish();
+
+ Span animalSpan = tracer.buildSpan("animal-name-service").asChildOf(span).start();
+ String animal = makeRequest("http://localhost:9000/api/v1/animals/random", animalSpan);
+ animalSpan.finish();
+
+ String name = scientist + "<-->" + animal;
+ span.setTag("name", "HeynameTag");
+ span.finish();
+ return name;
+ }
+
+ private String makeRequest(String url, Span span) throws IOException {
+ Request.Builder requestBuilder = new Request.Builder().url(url);
+
+ SpanContext spanContext = span.context();
+ Format format = Format.Builtin.HTTP_HEADERS;
+ RequestBuilderCarrier requestBuilderCarriernew = new RequestBuilderCarrier(requestBuilder);
+
+ tracer.inject(spanContext, format, requestBuilderCarriernew);
+
+ Request request = requestBuilder.build();
+
+ try (Response response = client.newCall(request).execute()) {
+ return response.body().string();
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/addons/jaeger/web-service1/src/main/resources/application.yaml b/addons/jaeger/web-service1/src/main/resources/application.yaml
new file mode 100644
index 0000000..be90acb
--- /dev/null
+++ b/addons/jaeger/web-service1/src/main/resources/application.yaml
@@ -0,0 +1,76 @@
+# Put main configuration in this file
+# See http://seedstack.org/docs/seed/configuration for more information
+
+logging:
+ level: INFO
+
+application:
+ # Unique identifier of the application accross your organization
+ id: Web-Service1
+ # Make sure all your application base packages are listed below
+ basePackages: [ org.generated.project ]
+
+security:
+ # The security configuration realm uses the 'users' section below (replace it with a more useful realm later)
+ # See http://seedstack.org/docs/seed/manual/security/#realms for more information
+ realms: ConfigurationRealm
+ users:
+ # A default 'demo' user is defined with password 'demo'
+ demo: demo
+web:
+ server:
+ host: localhost
+ port: 8080
+
+ # The 'urls' section below in used to secure HTTP requests
+ # See http://seedstack.org/docs/seed/manual/security/#http-access-control for more information
+ urls:
+ # -
+ # pattern: /api/**
+ # filters: authcBasic
+
+
+jaeger:
+ #whether using Jaeger in devMode (boolean )
+ devMode: false
+ samplerConfig:
+ #The sampler type ( String ). Valid values: remote (default),ratelimiting, probabilistic, const. Optional ( String )
+ samplerType: const
+ #The integer or floating point value that makes sense for the correct samplerType (Number). Optional ( String )
+ samplerParam: 1
+ #The HTTP host:port when using the remote controlled sampler. optional, ( String )
+ samplerManagerHostPort: 128.0.0.1
+ senderConfig:
+ #The hostname for communicating with agent via UDP ( String )
+ agentHost: 127.0.0.1
+ #The port for communicating with agent via UDP ( String )
+ agentPort: 6831
+ #The traces endpoint, in case the client should connect directly to the Collector, like http://jaeger-collector:14268/api/traces ( String )
+ endPoint: http://localhost:14268/api/traces
+ #Authentication Token to send as "Bearer" to the endpoint ( String )
+ authToken: myauthtoken
+ #Username to send as part of "Basic" authentication to the endpoint ( String )
+ userName: myusername
+ #Password to send as part of "Basic" authentication to the endpoint ( String )
+ password: mypassword
+ reporterConfig:
+ #Whether the reporter should also log the spans ( boolean )
+ reporterLogSpans: true
+ #The reporter's maximum queue size ( String )
+ reporterMaxQueueSize: 10000
+ #The reporter's flush interval (ms) ( String )
+ reporterFlushInterval: 1000
+ codecConfig:
+ #Comma separated list of formats to use for propagating the trace context.Defaults to the standard Jaeger format.Valid values are jaeger, b3
+ propagation: jaeger,b3
+ tracerConfig:
+ #Opt-in to use 128 bit traceIds. By default, uses 64 bits ( boolean ).
+ traceId128Bit: false
+ #The fully qualified class name of the Metrics factory (Optional). (Class extends io.jaegertracing.spi.MetricsFactory>)
+ metricsFactory: #org.generated.project.domain.services.MyMetricFactory
+ #A comma separated list of name = value tracer level tags, which get added to all reported spans.default is optional
+ tracerTags:
+ tracerTag1: TracerValue1
+ tracerTag2: TracerValue2
+
+
diff --git a/addons/jaeger/web-service1/src/test/java/org/generated/project/interfaces/rest/HelloResourceIT.java b/addons/jaeger/web-service1/src/test/java/org/generated/project/interfaces/rest/HelloResourceIT.java
new file mode 100644
index 0000000..ca4962f
--- /dev/null
+++ b/addons/jaeger/web-service1/src/test/java/org/generated/project/interfaces/rest/HelloResourceIT.java
@@ -0,0 +1,21 @@
+package org.generated.project.interfaces.rest;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.seedstack.seed.Configuration;
+import org.seedstack.seed.testing.junit4.SeedITRunner;
+import org.seedstack.seed.undertow.LaunchWithUndertow;
+
+@RunWith(SeedITRunner.class)
+@LaunchWithUndertow
+public class HelloResourceIT {
+ @Configuration("runtime.web.baseUrl")
+ private String baseUrl;
+
+ @Test
+ public void testHelloWorld() throws Exception {
+ // Response response = given().auth().basic("demo", "demo").expect().statusCode(200).when().get(baseUrl + "/hello");
+
+ // assertThat(response.body().asString()).isEqualTo("Hello World!");
+ }
+}
diff --git a/addons/jaeger/web-service2/pom.xml b/addons/jaeger/web-service2/pom.xml
new file mode 100644
index 0000000..001d8bc
--- /dev/null
+++ b/addons/jaeger/web-service2/pom.xml
@@ -0,0 +1,109 @@
+
+
+ 4.0.0
+
+
+ org.seedstack.samples
+ samples
+ 20.11-SNAPSHOT
+ ../../pom.xml
+
+
+ web-service2
+
+
+ 6.1.6.Final
+ 1.2.3
+ 3.12.1
+ 3.3.0
+
+
+
+
+
+ org.seedstack
+ seedstack-maven-plugin
+
+
+ build-capsule
+
+ package
+
+
+
+
+
+
+
+
+
+
+ org.seedstack.seed
+ seed-core
+
+
+ org.seedstack.seed
+ seed-security-core
+
+
+ org.seedstack.seed
+ seed-web-core
+
+
+ org.seedstack.seed
+ seed-web-security
+
+
+ org.seedstack.seed
+ seed-rest-jersey2
+
+
+ org.seedstack.seed
+ seed-web-undertow
+
+
+ org.seedstack.business
+ business-core
+
+
+ org.seedstack.addons.modelmapper
+ modelmapper
+
+
+ ch.qos.logback
+ logback-classic
+ ${logback.version}
+
+
+ org.hibernate.validator
+ hibernate-validator
+ ${hibernate-validator.version}
+
+
+
+ org.seedstack.seed
+ seed-testing-junit4
+ test
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+ io.rest-assured
+ rest-assured
+ ${rest-assured.version}
+ test
+
+
+
+ org.seedstack.addons.jaeger
+ jaeger
+ 1.0.0-SNAPSHOT
+
+
+
+
diff --git a/addons/jaeger/web-service2/src/main/java/org/generated/project/domain/model/aggregate/Aggregate.java b/addons/jaeger/web-service2/src/main/java/org/generated/project/domain/model/aggregate/Aggregate.java
new file mode 100644
index 0000000..1a2a644
--- /dev/null
+++ b/addons/jaeger/web-service2/src/main/java/org/generated/project/domain/model/aggregate/Aggregate.java
@@ -0,0 +1,18 @@
+package org.generated.project.domain.model.aggregate;
+
+import org.seedstack.business.domain.BaseAggregateRoot;
+
+
+public class Aggregate extends BaseAggregateRoot {
+ private String id;
+
+
+ public Aggregate(String id) {
+ this.id = id;
+ }
+
+ @Override
+ public String getId() {
+ return id;
+ }
+}
diff --git a/addons/jaeger/web-service2/src/main/java/org/generated/project/domain/services/MyMetricFactory.java b/addons/jaeger/web-service2/src/main/java/org/generated/project/domain/services/MyMetricFactory.java
new file mode 100644
index 0000000..d01e2cb
--- /dev/null
+++ b/addons/jaeger/web-service2/src/main/java/org/generated/project/domain/services/MyMetricFactory.java
@@ -0,0 +1,41 @@
+/*
+ * Creation : 9 Jun 2021
+ */
+package org.generated.project.domain.services;
+
+import java.util.Map;
+
+import io.jaegertracing.internal.metrics.Counter;
+import io.jaegertracing.internal.metrics.Gauge;
+import io.jaegertracing.internal.metrics.Timer;
+import io.jaegertracing.spi.MetricsFactory;
+
+public class MyMetricFactory implements MetricsFactory {
+
+ @Override
+ public Counter createCounter(String name, Map tags) {
+ return new Counter() {
+ @Override
+ public void inc(long delta) {
+ }
+ };
+ }
+
+ @Override
+ public Timer createTimer(final String name, final Map tags) {
+ return new Timer() {
+ @Override
+ public void durationMicros(long time) {
+ }
+ };
+ }
+
+ @Override
+ public Gauge createGauge(final String name, final Map tags) {
+ return new Gauge() {
+ @Override
+ public void update(long amount) {
+ }
+ };
+ }
+}
\ No newline at end of file
diff --git a/addons/jaeger/web-service2/src/main/java/org/generated/project/domain/services/RequestBuilderCarrier.java b/addons/jaeger/web-service2/src/main/java/org/generated/project/domain/services/RequestBuilderCarrier.java
new file mode 100644
index 0000000..67531a1
--- /dev/null
+++ b/addons/jaeger/web-service2/src/main/java/org/generated/project/domain/services/RequestBuilderCarrier.java
@@ -0,0 +1,25 @@
+package org.generated.project.domain.services;
+
+import io.opentracing.propagation.TextMap;
+import okhttp3.Request;
+
+import java.util.Iterator;
+import java.util.Map;
+
+public class RequestBuilderCarrier implements TextMap {
+ private final Request.Builder requestBuilder;
+
+ public RequestBuilderCarrier(Request.Builder requestBuilder) {
+ this.requestBuilder = requestBuilder;
+ }
+
+ @Override
+ public Iterator> iterator() {
+ throw new UnsupportedOperationException("carrier is writer-only");
+ }
+
+ @Override
+ public void put(String key, String value) {
+ requestBuilder.addHeader(key, value);
+ }
+}
diff --git a/addons/jaeger/web-service2/src/main/java/org/generated/project/interfaces/rest/AnimalNameService.java b/addons/jaeger/web-service2/src/main/java/org/generated/project/interfaces/rest/AnimalNameService.java
new file mode 100644
index 0000000..12fee5e
--- /dev/null
+++ b/addons/jaeger/web-service2/src/main/java/org/generated/project/interfaces/rest/AnimalNameService.java
@@ -0,0 +1,63 @@
+package org.generated.project.interfaces.rest;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.stream.Collectors;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MultivaluedMap;
+
+import org.seedstack.jaeger.Tracing;
+
+import io.opentracing.Span;
+import io.opentracing.SpanContext;
+import io.opentracing.Tracer;
+import io.opentracing.propagation.Format;
+import io.opentracing.propagation.TextMapAdapter;
+
+@Path("/api/v1/animals")
+public class AnimalNameService {
+
+ private final List animalNames;
+ private Random random;
+
+ @Tracing("animal-svc")
+ private Tracer tracer;
+
+ public AnimalNameService() throws IOException {
+
+ InputStream inputStream = this.getClass().getResourceAsStream("/animals.txt");
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
+ animalNames = reader.lines().collect(Collectors.toList());
+ }
+ random = new Random();
+ }
+
+ @GET
+ @Path("/random")
+ public String name(@Context HttpHeaders headers) {
+
+ MultivaluedMap rawHeaders = headers.getRequestHeaders();
+ final Map header = new HashMap<>();
+
+ for (Map.Entry> entry : rawHeaders.entrySet()) {
+ header.put(entry.getKey(), entry.getValue().get(0));
+ }
+
+ SpanContext parentContext = tracer.extract(Format.Builtin.HTTP_HEADERS, new TextMapAdapter(header));
+ Span span = tracer.buildSpan("find-random-animal-name").asChildOf(parentContext).start();
+ span.setTag("animal", "HeyanimalTag");
+ String name = animalNames.get(random.nextInt(animalNames.size()));
+ span.finish();
+ return name;
+ }
+}
diff --git a/addons/jaeger/web-service2/src/main/resources/animals.txt b/addons/jaeger/web-service2/src/main/resources/animals.txt
new file mode 100644
index 0000000..603a075
--- /dev/null
+++ b/addons/jaeger/web-service2/src/main/resources/animals.txt
@@ -0,0 +1,594 @@
+Aardvark
+Abyssinian
+Adelie Penguin
+Affenpinscher
+Afghan Hound
+African Bush Elephant
+African Civet
+African Clawed Frog
+African Forest Elephant
+African Palm Civet
+African Penguin
+African Tree Toad
+African Wild Dog
+Ainu Dog
+Airedale Terrier
+Akbash
+Akita
+Alaskan Malamute
+Albatross
+Aldabra Giant Tortoise
+Alligator
+Alpine Dachsbracke
+American Bulldog
+American Cocker Spaniel
+American Coonhound
+American Eskimo Dog
+American Foxhound
+American Pit Bull Terrier
+American Staffordshire Terrier
+American Water Spaniel
+Anatolian Shepherd Dog
+Angelfish
+Ant
+Anteater
+Antelope
+Appenzeller Dog
+Arctic Fox
+Arctic Hare
+Arctic Wolf
+Armadillo
+Asian Elephant
+Asian Giant Hornet
+Asian Palm Civet
+Asiatic Black Bear
+Australian Cattle Dog
+Australian Kelpie Dog
+Australian Mist
+Australian Shepherd
+Australian Terrier
+Avocet
+Axolotl
+Aye Aye
+Baboon
+Bactrian Camel
+Badger
+Balinese
+Banded Palm Civet
+Bandicoot
+Barb
+Barn Owl
+Barnacle
+Barracuda
+Basenji Dog
+Basking Shark
+Basset Hound
+Bat
+Bavarian Mountain Hound
+Beagle
+Bear
+Bearded Collie
+Bearded Dragon
+Beaver
+Bedlington Terrier
+Beetle
+Bengal Tiger
+Bernese Mountain Dog
+Bichon Frise
+Binturong
+Bird
+Birds Of Paradise
+Birman
+Bison
+Black Bear
+Black Rhinoceros
+Black Russian Terrier
+Black Widow Spider
+Bloodhound
+Blue Lacy Dog
+Blue Whale
+Bluetick Coonhound
+Bobcat
+Bolognese Dog
+Bombay
+Bongo
+Bonobo
+Booby
+Border Collie
+Border Terrier
+Bornean Orang-utan
+Borneo Elephant
+Boston Terrier
+Bottle Nosed Dolphin
+Boxer Dog
+Boykin Spaniel
+Brazilian Terrier
+Brown Bear
+Budgerigar
+Buffalo
+Bull Mastiff
+Bull Shark
+Bull Terrier
+Bulldog
+Bullfrog
+Bumble Bee
+Burmese
+Burrowing Frog
+Butterfly
+Butterfly Fish
+Caiman
+Caiman Lizard
+Cairn Terrier
+Camel
+Canaan Dog
+Capybara
+Caracal
+Carolina Dog
+Cassowary
+Cat
+Caterpillar
+Catfish
+Cavalier King Charles Spaniel
+Centipede
+Cesky Fousek
+Chameleon
+Chamois
+Cheetah
+Chesapeake Bay Retriever
+Chicken
+Chihuahua
+Chimpanzee
+Chinchilla
+Chinese Crested Dog
+Chinook
+Chinstrap Penguin
+Chipmunk
+Chow Chow
+Cichlid
+Clouded Leopard
+Clown Fish
+Clumber Spaniel
+Coati
+Cockroach
+Collared Peccary
+Collie
+Common Buzzard
+Common Frog
+Common Loon
+Common Toad
+Coral
+Cottontop Tamarin
+Cougar
+Cow
+Coyote
+Crab
+Crab-Eating Macaque
+Crane
+Crested Penguin
+Crocodile
+Cross River Gorilla
+Curly Coated Retriever
+Cuscus
+Cuttlefish
+Dachshund
+Dalmatian
+Darwin's Frog
+Deer
+Desert Tortoise
+Deutsche Bracke
+Dhole
+Dingo
+Discus
+Doberman Pinscher
+Dodo
+Dog
+Dogo Argentino
+Dogue De Bordeaux
+Dolphin
+Donkey
+Dormouse
+Dragonfly
+Drever
+Duck
+Dugong
+Dunker
+Dusky Dolphin
+Dwarf Crocodile
+Eagle
+Earwig
+Eastern Gorilla
+Eastern Lowland Gorilla
+Echidna
+Edible Frog
+Egyptian Mau
+Electric Eel
+Elephant
+Elephant Seal
+Elephant Shrew
+Emperor Penguin
+Emperor Tamarin
+Emu
+English Cocker Spaniel
+English Shepherd
+English Springer Spaniel
+Entlebucher Mountain Dog
+Epagneul Pont Audemer
+Eskimo Dog
+Estrela Mountain Dog
+Falcon
+Fennec Fox
+Ferret
+Field Spaniel
+Fin Whale
+Finnish Spitz
+Fire-Bellied Toad
+Fish
+Fishing Cat
+Flamingo
+Flat Coat Retriever
+Flounder
+Fly
+Flying Squirrel
+Fossa
+Fox
+Fox Terrier
+French Bulldog
+Frigatebird
+Frilled Lizard
+Frog
+Fur Seal
+Galapagos Penguin
+Galapagos Tortoise
+Gar
+Gecko
+Gentoo Penguin
+Geoffroys Tamarin
+Gerbil
+German Pinscher
+German Shepherd
+Gharial
+Giant African Land Snail
+Giant Clam
+Giant Panda Bear
+Giant Schnauzer
+Gibbon
+Gila Monster
+Giraffe
+Glass Lizard
+Glow Worm
+Goat
+Golden Lion Tamarin
+Golden Oriole
+Golden Retriever
+Goose
+Gopher
+Gorilla
+Grasshopper
+Great Dane
+Great White Shark
+Greater Swiss Mountain Dog
+Green Bee-Eater
+Greenland Dog
+Grey Mouse Lemur
+Grey Reef Shark
+Grey Seal
+Greyhound
+Grizzly Bear
+Grouse
+Guinea Fowl
+Guinea Pig
+Guppy
+Hammerhead Shark
+Hamster
+Hare
+Harrier
+Havanese
+Hedgehog
+Hercules Beetle
+Hermit Crab
+Heron
+Highland Cattle
+Himalayan
+Hippopotamus
+Honey Bee
+Horn Shark
+Horned Frog
+Horse
+Horseshoe Crab
+Howler Monkey
+Human
+Humboldt Penguin
+Hummingbird
+Humpback Whale
+Hyena
+Ibis
+Ibizan Hound
+Iguana
+Impala
+Indian Elephant
+Indian Palm Squirrel
+Indian Rhinoceros
+Indian Star Tortoise
+Indochinese Tiger
+Indri
+Insect
+Irish Setter
+Irish WolfHound
+Jack Russel
+Jackal
+Jaguar
+Japanese Chin
+Japanese Macaque
+Javan Rhinoceros
+Javanese
+Jellyfish
+Kakapo
+Kangaroo
+Keel Billed Toucan
+Killer Whale
+King Crab
+King Penguin
+Kingfisher
+Kiwi
+Koala
+Komodo Dragon
+Kudu
+Labradoodle
+Labrador Retriever
+Ladybird
+Leaf-Tailed Gecko
+Lemming
+Lemur
+Leopard
+Leopard Cat
+Leopard Seal
+Leopard Tortoise
+Liger
+Lion
+Lionfish
+Little Penguin
+Lizard
+Llama
+Lobster
+Long-Eared Owl
+Lynx
+
+Macaroni Penguin
+Macaw
+Magellanic Penguin
+Magpie
+Maine Coon
+Malayan Civet
+Malayan Tiger
+Maltese
+Manatee
+Mandrill
+Manta Ray
+Marine Toad
+Markhor
+Marsh Frog
+Masked Palm Civet
+Mastiff
+Mayfly
+Meerkat
+Millipede
+Minke Whale
+Mole
+Molly
+Mongoose
+Mongrel
+Monitor Lizard
+Monkey
+Monte Iberia Eleuth
+Moorhen
+Moose
+Moray Eel
+Moth
+Mountain Gorilla
+Mountain Lion
+Mouse
+Mule
+Neanderthal
+Neapolitan Mastiff
+Newfoundland
+Newt
+Nightingale
+Norfolk Terrier
+Norwegian Forest
+Numbat
+Nurse Shark
+Ocelot
+Octopus
+Okapi
+Old English Sheepdog
+Olm
+Opossum
+Orang-utan
+Ostrich
+Otter
+Oyster
+Pademelon
+Panther
+Parrot
+Patas Monkey
+Peacock
+Pekingese
+Pelican
+Penguin
+Persian
+Pheasant
+Pied Tamarin
+Pig
+Pika
+Pike
+Pink Fairy Armadillo
+Piranha
+Platypus
+Pointer
+Poison Dart Frog
+Polar Bear
+Pond Skater
+Poodle
+Pool Frog
+Porcupine
+Possum
+Prawn
+Proboscis Monkey
+Puffer Fish
+Puffin
+Pug
+Puma
+Purple Emperor
+Puss Moth
+Pygmy Hippopotamus
+Pygmy Marmoset
+Quail
+Quetzal
+Quokka
+Quoll
+Rabbit
+Raccoon
+Raccoon Dog
+Radiated Tortoise
+Ragdoll
+Rat
+Rattlesnake
+Red Knee Tarantula
+Red Panda
+Red Wolf
+Red-handed Tamarin
+Reindeer
+Rhinoceros
+River Dolphin
+River Turtle
+Robin
+Rock Hyrax
+Rockhopper Penguin
+Roseate Spoonbill
+Rottweiler
+Royal Penguin
+Russian Blue
+Sabre-Toothed Tiger
+Saint Bernard
+Salamander
+Sand Lizard
+Saola
+Scorpion
+Scorpion Fish
+Sea Dragon
+Sea Lion
+Sea Otter
+Sea Slug
+Sea Squirt
+Sea Turtle
+Sea Urchin
+Seahorse
+Seal
+Serval
+Sheep
+Shih Tzu
+Shrimp
+Siamese
+Siamese Fighting Fish
+Siberian
+Siberian Husky
+Siberian Tiger
+Silver Dollar
+Skunk
+Sloth
+Slow Worm
+Snail
+Snake
+Snapping Turtle
+Snowshoe
+Snowy Owl
+Somali
+South China Tiger
+Spadefoot Toad
+Sparrow
+Spectacled Bear
+Sperm Whale
+Spider Monkey
+Spiny Dogfish
+Sponge
+Squid
+Squirrel
+Squirrel Monkey
+Sri Lankan Elephant
+Staffordshire Bull Terrier
+Stag Beetle
+Starfish
+Stellers Sea Cow
+Stick Insect
+Stingray
+Stoat
+Striped Rocket Frog
+Sumatran Elephant
+Sumatran Orang-utan
+Sumatran Rhinoceros
+Sumatran Tiger
+Sun Bear
+Swan
+Tang
+Tapanuli Orang-utan
+Tapir
+Tarsier
+Tasmanian Devil
+Tawny Owl
+Termite
+Tetra
+Thorny Devil
+Tibetan Mastiff
+Tiffany
+Tiger
+Tiger Salamander
+Tiger Shark
+Tortoise
+Toucan
+Tree Frog
+Tropicbird
+Tuatara
+Turkey
+Turkish Angora
+Uakari
+Uguisu
+Umbrellabird
+Vampire Bat
+Vervet Monkey
+Vulture
+Wallaby
+Walrus
+Warthog
+Wasp
+Water Buffalo
+Water Dragon
+Water Vole
+Weasel
+Welsh Corgi
+West Highland Terrier
+Western Gorilla
+Western Lowland Gorilla
+Whale Shark
+Whippet
+White Faced Capuchin
+White Rhinoceros
+White Tiger
+Wild Boar
+Wildebeest
+Wolf
+Wolverine
+Wombat
+Woodlouse
+Woodpecker
+Woolly Mammoth
+Woolly Monkey
+Wrasse
+X-Ray Tetra
+Yak
+Yellow-Eyed Penguin
+Yorkshire Terrier
+Zebra
+Zebra Shark
+Zebu
+Zonkey
+Zorse
\ No newline at end of file
diff --git a/addons/jaeger/web-service2/src/main/resources/application.yaml b/addons/jaeger/web-service2/src/main/resources/application.yaml
new file mode 100644
index 0000000..9d1e385
--- /dev/null
+++ b/addons/jaeger/web-service2/src/main/resources/application.yaml
@@ -0,0 +1,76 @@
+# Put main configuration in this file
+# See http://seedstack.org/docs/seed/configuration for more information
+
+logging:
+ level: INFO
+
+application:
+ # Unique identifier of the application accross your organization
+ id: Web-Service2
+ # Make sure all your application base packages are listed below
+ basePackages: [ org.generated.project ]
+
+security:
+ # The security configuration realm uses the 'users' section below (replace it with a more useful realm later)
+ # See http://seedstack.org/docs/seed/manual/security/#realms for more information
+ realms: ConfigurationRealm
+ users:
+ # A default 'demo' user is defined with password 'demo'
+ demo: demo
+web:
+ server:
+ host: localhost
+ port: 9000
+
+ # The 'urls' section below in used to secure HTTP requests
+ # See http://seedstack.org/docs/seed/manual/security/#http-access-control for more information
+ urls:
+ # -
+ # pattern: /api/**
+ # filters: authcBasic
+
+
+jaeger:
+ #whether using Jaeger in devMode (boolean )
+ devMode: false
+ samplerConfig:
+ #The sampler type ( String ). Valid values: remote (default),ratelimiting, probabilistic, const. Optional ( String )
+ samplerType: const
+ #The integer or floating point value that makes sense for the correct samplerType (Number). Optional ( String )
+ samplerParam: 1
+ #The HTTP host:port when using the remote controlled sampler. optional, ( String )
+ samplerManagerHostPort: 128.0.0.1
+ senderConfig:
+ #The hostname for communicating with agent via UDP ( String )
+ agentHost: 127.0.0.1
+ #The port for communicating with agent via UDP ( String )
+ agentPort: 6831
+ #The traces endpoint, in case the client should connect directly to the Collector, like http://jaeger-collector:14268/api/traces ( String )
+ endPoint: http://localhost:14268/api/traces
+ #Authentication Token to send as "Bearer" to the endpoint ( String )
+ authToken: myauthtoken
+ #Username to send as part of "Basic" authentication to the endpoint ( String )
+ userName: myusername
+ #Password to send as part of "Basic" authentication to the endpoint ( String )
+ password: mypassword
+ reporterConfig:
+ #Whether the reporter should also log the spans ( boolean )
+ reporterLogSpans: true
+ #The reporter's maximum queue size ( String )
+ reporterMaxQueueSize: 10000
+ #The reporter's flush interval (ms) ( String )
+ reporterFlushInterval: 1000
+ codecConfig:
+ #Comma separated list of formats to use for propagating the trace context.Defaults to the standard Jaeger format.Valid values are jaeger, b3
+ propagation: jaeger,b3
+ tracerConfig:
+ #Opt-in to use 128 bit traceIds. By default, uses 64 bits ( boolean ).
+ traceId128Bit: false
+ #The fully qualified class name of the Metrics factory (Optional). (Class extends io.jaegertracing.spi.MetricsFactory>)
+ metricsFactory: #org.generated.project.domain.services.MyMetricFactory
+ #A comma separated list of name = value tracer level tags, which get added to all reported spans.default is optional
+ tracerTags:
+ tracerTag1: TracerValue1
+ tracerTag2: TracerValue2
+
+
diff --git a/addons/jaeger/web-service2/src/test/java/org/generated/project/interfaces/rest/HelloResourceIT.java b/addons/jaeger/web-service2/src/test/java/org/generated/project/interfaces/rest/HelloResourceIT.java
new file mode 100644
index 0000000..ca4962f
--- /dev/null
+++ b/addons/jaeger/web-service2/src/test/java/org/generated/project/interfaces/rest/HelloResourceIT.java
@@ -0,0 +1,21 @@
+package org.generated.project.interfaces.rest;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.seedstack.seed.Configuration;
+import org.seedstack.seed.testing.junit4.SeedITRunner;
+import org.seedstack.seed.undertow.LaunchWithUndertow;
+
+@RunWith(SeedITRunner.class)
+@LaunchWithUndertow
+public class HelloResourceIT {
+ @Configuration("runtime.web.baseUrl")
+ private String baseUrl;
+
+ @Test
+ public void testHelloWorld() throws Exception {
+ // Response response = given().auth().basic("demo", "demo").expect().statusCode(200).when().get(baseUrl + "/hello");
+
+ // assertThat(response.body().asString()).isEqualTo("Hello World!");
+ }
+}
diff --git a/addons/jaeger/web-service3/pom.xml b/addons/jaeger/web-service3/pom.xml
new file mode 100644
index 0000000..bcc61b3
--- /dev/null
+++ b/addons/jaeger/web-service3/pom.xml
@@ -0,0 +1,108 @@
+
+
+ 4.0.0
+
+
+ org.seedstack.samples
+ samples
+ 20.11-SNAPSHOT
+ ../../pom.xml
+
+
+ web-service3
+
+
+ 6.1.6.Final
+ 1.2.3
+ 3.12.1
+ 3.3.0
+
+
+
+
+
+ org.seedstack
+ seedstack-maven-plugin
+
+
+ build-capsule
+
+ package
+
+
+
+
+
+
+
+
+
+ org.seedstack.seed
+ seed-core
+
+
+ org.seedstack.seed
+ seed-security-core
+
+
+ org.seedstack.seed
+ seed-web-core
+
+
+ org.seedstack.seed
+ seed-web-security
+
+
+ org.seedstack.seed
+ seed-rest-jersey2
+
+
+ org.seedstack.seed
+ seed-web-undertow
+
+
+ org.seedstack.business
+ business-core
+
+
+ org.seedstack.addons.modelmapper
+ modelmapper
+
+
+ ch.qos.logback
+ logback-classic
+ ${logback.version}
+
+
+ org.hibernate.validator
+ hibernate-validator
+ ${hibernate-validator.version}
+
+
+
+ org.seedstack.seed
+ seed-testing-junit4
+ test
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+ io.rest-assured
+ rest-assured
+ ${rest-assured.version}
+ test
+
+
+
+ org.seedstack.addons.jaeger
+ jaeger
+ 1.0.0-SNAPSHOT
+
+
+
+
diff --git a/addons/jaeger/web-service3/src/main/java/org/generated/project/domain/model/aggregate/Aggregate.java b/addons/jaeger/web-service3/src/main/java/org/generated/project/domain/model/aggregate/Aggregate.java
new file mode 100644
index 0000000..1a2a644
--- /dev/null
+++ b/addons/jaeger/web-service3/src/main/java/org/generated/project/domain/model/aggregate/Aggregate.java
@@ -0,0 +1,18 @@
+package org.generated.project.domain.model.aggregate;
+
+import org.seedstack.business.domain.BaseAggregateRoot;
+
+
+public class Aggregate extends BaseAggregateRoot {
+ private String id;
+
+
+ public Aggregate(String id) {
+ this.id = id;
+ }
+
+ @Override
+ public String getId() {
+ return id;
+ }
+}
diff --git a/addons/jaeger/web-service3/src/main/java/org/generated/project/domain/services/MyMetricFactory.java b/addons/jaeger/web-service3/src/main/java/org/generated/project/domain/services/MyMetricFactory.java
new file mode 100644
index 0000000..d01e2cb
--- /dev/null
+++ b/addons/jaeger/web-service3/src/main/java/org/generated/project/domain/services/MyMetricFactory.java
@@ -0,0 +1,41 @@
+/*
+ * Creation : 9 Jun 2021
+ */
+package org.generated.project.domain.services;
+
+import java.util.Map;
+
+import io.jaegertracing.internal.metrics.Counter;
+import io.jaegertracing.internal.metrics.Gauge;
+import io.jaegertracing.internal.metrics.Timer;
+import io.jaegertracing.spi.MetricsFactory;
+
+public class MyMetricFactory implements MetricsFactory {
+
+ @Override
+ public Counter createCounter(String name, Map tags) {
+ return new Counter() {
+ @Override
+ public void inc(long delta) {
+ }
+ };
+ }
+
+ @Override
+ public Timer createTimer(final String name, final Map tags) {
+ return new Timer() {
+ @Override
+ public void durationMicros(long time) {
+ }
+ };
+ }
+
+ @Override
+ public Gauge createGauge(final String name, final Map tags) {
+ return new Gauge() {
+ @Override
+ public void update(long amount) {
+ }
+ };
+ }
+}
\ No newline at end of file
diff --git a/addons/jaeger/web-service3/src/main/java/org/generated/project/domain/services/RequestBuilderCarrier.java b/addons/jaeger/web-service3/src/main/java/org/generated/project/domain/services/RequestBuilderCarrier.java
new file mode 100644
index 0000000..67531a1
--- /dev/null
+++ b/addons/jaeger/web-service3/src/main/java/org/generated/project/domain/services/RequestBuilderCarrier.java
@@ -0,0 +1,25 @@
+package org.generated.project.domain.services;
+
+import io.opentracing.propagation.TextMap;
+import okhttp3.Request;
+
+import java.util.Iterator;
+import java.util.Map;
+
+public class RequestBuilderCarrier implements TextMap {
+ private final Request.Builder requestBuilder;
+
+ public RequestBuilderCarrier(Request.Builder requestBuilder) {
+ this.requestBuilder = requestBuilder;
+ }
+
+ @Override
+ public Iterator> iterator() {
+ throw new UnsupportedOperationException("carrier is writer-only");
+ }
+
+ @Override
+ public void put(String key, String value) {
+ requestBuilder.addHeader(key, value);
+ }
+}
diff --git a/addons/jaeger/web-service3/src/main/java/org/generated/project/interfaces/rest/ScientistNameService.java b/addons/jaeger/web-service3/src/main/java/org/generated/project/interfaces/rest/ScientistNameService.java
new file mode 100644
index 0000000..5e12add
--- /dev/null
+++ b/addons/jaeger/web-service3/src/main/java/org/generated/project/interfaces/rest/ScientistNameService.java
@@ -0,0 +1,63 @@
+package org.generated.project.interfaces.rest;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.stream.Collectors;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MultivaluedMap;
+
+import org.seedstack.jaeger.Tracing;
+
+import io.opentracing.Span;
+import io.opentracing.SpanContext;
+import io.opentracing.Tracer;
+import io.opentracing.propagation.Format;
+import io.opentracing.propagation.TextMapAdapter;
+
+@Path("/api/v1/scientists")
+public class ScientistNameService {
+
+ private final List scientistsNames;
+ private Random random;
+
+ @Tracing("scientist-svc")
+ private Tracer tracer;
+
+ public ScientistNameService() throws IOException {
+ InputStream inputStream = this.getClass().getResourceAsStream("/scientists.txt");
+
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
+ scientistsNames = reader.lines().collect(Collectors.toList());
+ }
+ random = new Random();
+ }
+
+ @GET
+ @Path("/random")
+ public String name(@Context HttpHeaders headers) {
+
+ MultivaluedMap rawHeaders = headers.getRequestHeaders();
+ final Map header = new HashMap<>();
+
+ for (Map.Entry> entry : rawHeaders.entrySet()) {
+ header.put(entry.getKey(), entry.getValue().get(0));
+ }
+
+ SpanContext parentContext = tracer.extract(Format.Builtin.HTTP_HEADERS, new TextMapAdapter(header));
+ Span span = tracer.buildSpan("find-random-scientist-name").asChildOf(parentContext).start();
+ span.setTag("scientist", "HeyscientistTag");
+ String name = scientistsNames.get(random.nextInt(scientistsNames.size()));
+ span.finish();
+ return name;
+ }
+}
\ No newline at end of file
diff --git a/addons/jaeger/web-service3/src/main/resources/application.yaml b/addons/jaeger/web-service3/src/main/resources/application.yaml
new file mode 100644
index 0000000..f8b6d25
--- /dev/null
+++ b/addons/jaeger/web-service3/src/main/resources/application.yaml
@@ -0,0 +1,74 @@
+# Put main configuration in this file
+# See http://seedstack.org/docs/seed/configuration for more information
+
+logging:
+ level: INFO
+
+application:
+ # Unique identifier of the application accross your organization
+ id: Web-Service3
+ # Make sure all your application base packages are listed below
+ basePackages: [ org.generated.project ]
+
+security:
+ # The security configuration realm uses the 'users' section below (replace it with a more useful realm later)
+ # See http://seedstack.org/docs/seed/manual/security/#realms for more information
+ realms: ConfigurationRealm
+ users:
+ # A default 'demo' user is defined with password 'demo'
+ demo: demo
+web:
+ server:
+ host: localhost
+ port: 8090
+ # The 'urls' section below in used to secure HTTP requests
+ # See http://seedstack.org/docs/seed/manual/security/#http-access-control for more information
+ urls:
+ # -
+ # pattern: /api/**
+ # filters: authcBasic
+
+jaeger:
+ #whether using Jaeger in devMode(boolean).if true trace will not reported to backend Server
+ devMode: false
+ samplerConfig:
+ #The samplerType(String).valid values are remote (default),ratelimiting, probabilistic,const.
+ samplerType: const
+ #The samplerParam(Integer) that makes sense for the sampling.
+ samplerParam: 1
+ #The http host:port(String) when using the remote controlled sampler.
+ samplerManagerHostPort: 128.0.0.1
+ senderConfig:
+ #The hostname(String) for communicating with agent via udp.
+ agentHost: 127.0.0.1
+ #The port(Integer) for communicating with agent via udp.
+ agentPort: 6831
+ #The traces http endpoint(String),like http://jaeger-collector:14268/api/traces.
+ endPoint: http://localhost:14268/api/traces
+ #Authentication Token(String) to send as "Bearer" to the http endpoint.
+ authToken: myauthtoken
+ #Username(String) to send as part of "Basic" authentication to the http endpoint.
+ userName: myusername
+ #Password(String) to send as part of "Basic" authentication to the endpoint.
+ password: mypassword
+ reporterConfig:
+ #Whether the reporter should also log the spans(boolean)
+ reporterLogSpans: true
+ #The reporter's maximum queue size(Integer)
+ reporterMaxQueueSize: 10000
+ #The reporter's flush interval in miliseconds(Integer)
+ reporterFlushInterval: 1000
+ codecConfig:
+ #Comma separated list of trace formats.Defaults is Jaeger.Valid values are jaeger,b3,w3c
+ propagation: jaeger,b3
+ tracerConfig:
+ #Opt-in to use 128 bit traceIds. By default, uses 64 bits(boolean).
+ traceId128Bit: false
+ #The fully qualified class name of the Metrics factory (Optional).(Class extends io.jaegertracing.spi.MetricsFactory>)
+ metricsFactory:
+ #Tracer level tags, which get added to all reported spans.optional
+ tracerTags:
+ tracerTag1: TracerValue1
+ tracerTag2: TracerValue2
+
+
diff --git a/addons/jaeger/web-service3/src/main/resources/scientists.txt b/addons/jaeger/web-service3/src/main/resources/scientists.txt
new file mode 100644
index 0000000..0edf9a2
--- /dev/null
+++ b/addons/jaeger/web-service3/src/main/resources/scientists.txt
@@ -0,0 +1,417 @@
+Louis Agassiz
+Maria Gaetana Agnesi
+Al-Battani
+Abu Nasr Al-Farabi
+Alhazen
+Jim Al-Khalili
+Muhammad ibn Musa al-Khwarizmi
+Mihailo Petrovic Alas
+Angel Alcala
+Salim Ali
+Luis Alvarez
+Andre Marie Ampère
+Anaximander
+Carl Anderson
+Mary Anning
+Virginia Apgar
+Archimedes
+Agnes Arber
+Aristarchus
+Aristotle
+Svante Arrhenius
+Oswald Avery
+Amedeo Avogadro
+Avicenna
+Charles Babbage
+Francis Bacon
+Alexander Bain
+John Logie Baird
+Joseph Banks
+Ramon Barba
+John Bardeen
+Charles Barkla
+Ibn Battuta
+William Bayliss
+George Beadle
+Arnold Orville Beckman
+Henri Becquerel
+Emil Adolf Behring
+Alexander Graham Bell
+Emile Berliner
+Claude Bernard
+Timothy John Berners-Lee
+Daniel Bernoulli
+Jacob Berzelius
+Henry Bessemer
+Hans Bethe
+Homi Jehangir Bhabha
+Alfred Binet
+Clarence Birdseye
+Kristian Birkeland
+Elizabeth Blackwell
+Alfred Blalock
+Katharine Burr Blodgett
+Franz Boas
+David Bohm
+Aage Bohr
+Niels Bohr
+Ludwig Boltzmann
+Max Born
+Carl Bosch
+Robert Bosch
+Jagadish Chandra Bose
+Satyendra Nath Bose
+Walther Wilhelm Georg Bothe
+Robert Boyle
+Lawrence Bragg
+Tycho Brahe
+Brahmagupta
+Hennig Brand
+Georg Brandt
+Wernher Von Braun
+J Harlen Bretz
+Louis de Broglie
+Alexander Brongniart
+Robert Brown
+Michael E. Brown
+Lester R. Brown
+Eduard Buchner
+Linda Buck
+William Buckland
+Georges-Louis Leclerc, Comte de Buffon
+Robert Bunsen
+Luther Burbank
+Jocelyn Bell Burnell
+Macfarlane Burnet
+Thomas Burnet
+Benjamin Cabrera
+Santiago Ramon y Cajal
+Rachel Carson
+George Washington Carver
+Henry Cavendish
+Anders Celsius
+James Chadwick
+Subrahmanyan Chandrasekhar
+Erwin Chargaff
+Noam Chomsky
+Steven Chu
+Leland Clark
+John Cockcroft
+Arthur Compton
+Nicolaus Copernicus
+Gerty Theresa Cori
+Charles-Augustin de Coulomb
+Jacques Cousteau
+Brian Cox
+Francis Crick
+James Croll
+Nicholas Culpeper
+Marie Curie
+Pierre Curie
+Georges Cuvier
+Adalbert Czerny
+Gottlieb Daimler
+John Dalton
+James Dwight Dana
+Charles Darwin
+Humphry Davy
+Peter Debye
+Max Delbruck
+Jean Andre Deluc
+Democritus
+René Descartes
+Rudolf Christian Karl Diesel
+Diophantus
+Paul Dirac
+Prokop Divis
+Theodosius Dobzhansky
+Frank Drake
+K. Eric Drexler
+John Eccles
+Arthur Eddington
+Thomas Edison
+Paul Ehrlich
+Albert Einstein
+Gertrude Elion
+Empedocles
+Eratosthenes
+Euclid
+Leonhard Euler
+Michael Faraday
+Pierre de Fermat
+Enrico Fermi
+Richard Feynman
+Fibonacci – Leonardo of Pisa
+Emil Fischer
+Ronald Fisher
+Alexander Fleming
+Ambrose Fleming
+Howard Florey
+Henry Ford
+Lee De Forest
+Dian Fossey
+Leon Foucault
+Benjamin Franklin
+Rosalind Franklin
+Sigmund Freud
+Galen
+Galileo Galilei
+Francis Galton
+Luigi Galvani
+George Gamow
+Martin Gardner
+Carl Friedrich Gauss
+Murray Gell-Mann
+Sophie Germain
+Willard Gibbs
+William Gilbert
+Sheldon Lee Glashow
+Robert Goddard
+Maria Goeppert-Mayer
+Thomas Gold
+Jane Goodall
+Stephen Jay Gould
+Fritz Haber
+Ernst Haeckel
+Otto Hahn
+Albrecht von Haller
+Edmund Halley
+Thomas Harriot
+William Harvey
+Stephen Hawking
+Otto Haxel
+Werner Heisenberg
+Hermann von Helmholtz
+Jan Baptist von Helmont
+Joseph Henry
+Caroline Herschel
+John Herschel
+William Herschel
+Gustav Ludwig Hertz
+Heinrich Hertz
+Karl F. Herzfeld
+George de Hevesy
+Antony Hewish
+David Hilbert
+Maurice Hilleman
+Hipparchus
+Hippocrates
+Shintaro Hirase
+Dorothy Hodgkin
+Robert Hooke
+Frederick Gowland Hopkins
+William Hopkins
+Grace Murray Hopper
+Frank Hornby
+Jack Horner
+Bernardo Houssay
+Fred Hoyle
+Edwin Hubble
+Alexander von Humboldt
+Zora Neale Hurston
+James Hutton
+Christiaan Huygens
+Hypatia
+Ernesto Illy
+Ernst Ising
+Keisuke Ito
+Mae Carol Jemison
+Edward Jenner
+J. Hans D. Jensen
+Irene Joliot-Curie
+James Prescott Joule
+Percy Lavon Julian
+Michio Kaku
+Heike Kamerlingh Onnes
+Pyotr Kapitsa
+Friedrich August Kekulé
+Frances Kelsey
+Pearl Kendrick
+Johannes Kepler
+Abdul Qadeer Khan
+Omar Khayyam
+Alfred Kinsey
+Gustav Kirchoff
+Martin Klaproth
+Robert Koch
+Emil Kraepelin
+Thomas Kuhn
+Stephanie Kwolek
+Joseph-Louis Lagrange
+Jean-Baptiste Lamarck
+Hedy Lamarr
+Edwin Herbert Land
+Karl Landsteiner
+Pierre-Simon Laplace
+Max von Laue
+Antoine Lavoisier
+Ernest Lawrence
+Henrietta Leavitt
+Antonie van Leeuwenhoek
+Inge Lehmann
+Gottfried Leibniz
+Georges Lemaître
+Leonardo da Vinci
+Niccolo Leoniceno
+Aldo Leopold
+Rita Levi-Montalcini
+Claude Levi-Strauss
+Willard Frank Libby
+Justus von Liebig
+Carolus Linnaeus
+Joseph Lister
+John Locke
+Hendrik Antoon Lorentz
+Konrad Lorenz
+Ada Lovelace
+Percival Lowell
+Lucretius
+Charles Lyell
+Trofim Lysenko
+Ernst Mach
+Marcello Malpighi
+Jane Marcet
+Guglielmo Marconi
+Lynn Margulis
+Matthew Maury
+James Clerk Maxwell
+Ernst Mayr
+Barbara McClintock
+Lise Meitner
+Gregor Mendel
+Dmitri Mendeleev
+Franz Mesmer
+Antonio Meucci
+John Michell
+Albert Abraham Michelson
+Thomas Midgeley Jr.
+Milutin Milanković
+Maria Mitchell
+Mario Molina
+Thomas Hunt Morgan
+Samuel Morse
+Henry Moseley
+Ukichiro Nakaya
+John Napier
+Giulio Natta
+John Needham
+John von Neumann
+Thomas Newcomen
+Isaac Newton
+Charles Nicolle
+Florence Nightingale
+Tim Noakes
+Alfred Nobel
+Emmy Noether
+Christiane Nusslein-Volhard
+Bill Nye
+Hans Christian Oersted
+Georg Ohm
+J. Robert Oppenheimer
+Wilhelm Ostwald
+William Oughtred
+Blaise Pascal
+Louis Pasteur
+Wolfgang Ernst Pauli
+Linus Pauling
+Randy Pausch
+Ivan Pavlov
+Cecilia Payne-Gaposchkin
+Wilder Penfield
+Marguerite Perey
+William Perkin
+John Philoponus
+Jean Piaget
+Philippe Pinel
+Max Planck
+Pliny the Elder
+Karl Popper
+Beatrix Potter
+Joseph Priestley
+Proclus
+Claudius Ptolemy
+Pythagoras
+Adolphe Quetelet
+Harriet Quimby
+Thabit ibn Qurra
+C. V. Raman
+Srinivasa Ramanujan
+William Ramsay
+John Ray
+Prafulla Chandra Ray
+Francesco Redi
+Sally Ride
+Bernhard Riemann
+Wilhelm Röntgen
+Hermann Rorschach
+Ronald Ross
+Ibn Rushd
+Ernest Rutherford
+Carl Sagan
+Abdus Salam
+Jonas Salk
+Frederick Sanger
+Alberto Santos-Dumont
+Walter Schottky
+Erwin Schrödinger
+Theodor Schwann
+Glenn Seaborg
+Hans Selye
+Charles Sherrington
+Gene Shoemaker
+Ernst Werner von Siemens
+George Gaylord Simpson
+B. F. Skinner
+William Smith
+Frederick Soddy
+Mary Somerville
+Arnold Sommerfeld
+Hermann Staudinger
+Nicolas Steno
+Nettie Stevens
+William John Swainson
+Leo Szilard
+Niccolo Tartaglia
+Edward Teller
+Nikola Tesla
+Thales of Miletus
+Theon of Alexandria
+Benjamin Thompson
+J. J. Thomson
+William Thomson
+Henry David Thoreau
+Kip S. Thorne
+Clyde Tombaugh
+Susumu Tonegawa
+Evangelista Torricelli
+Charles Townes
+Youyou Tu
+Alan Turing
+Neil deGrasse Tyson
+Harold Urey
+Craig Venter
+Vladimir Vernadsky
+Andreas Vesalius
+Rudolf Virchow
+Artturi Virtanen
+Alessandro Volta
+Selman Waksman
+George Wald
+Alfred Russel Wallace
+John Wallis
+Ernest Walton
+James Watson
+James Watt
+Alfred Wegener
+John Archibald Wheeler
+Maurice Wilkins
+Thomas Willis
+E. O. Wilson
+Sven Wingqvist
+Sergei Winogradsky
+Carl Woese
+Friedrich Wöhler
+Wilbur and Orville Wright
+Wilhelm Wundt
+Chen-Ning Yang
+Ahmed Zewail
\ No newline at end of file
diff --git a/addons/jaeger/web-service3/src/test/java/org/generated/project/interfaces/rest/HelloResourceIT.java b/addons/jaeger/web-service3/src/test/java/org/generated/project/interfaces/rest/HelloResourceIT.java
new file mode 100644
index 0000000..ca4962f
--- /dev/null
+++ b/addons/jaeger/web-service3/src/test/java/org/generated/project/interfaces/rest/HelloResourceIT.java
@@ -0,0 +1,21 @@
+package org.generated.project.interfaces.rest;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.seedstack.seed.Configuration;
+import org.seedstack.seed.testing.junit4.SeedITRunner;
+import org.seedstack.seed.undertow.LaunchWithUndertow;
+
+@RunWith(SeedITRunner.class)
+@LaunchWithUndertow
+public class HelloResourceIT {
+ @Configuration("runtime.web.baseUrl")
+ private String baseUrl;
+
+ @Test
+ public void testHelloWorld() throws Exception {
+ // Response response = given().auth().basic("demo", "demo").expect().statusCode(200).when().get(baseUrl + "/hello");
+
+ // assertThat(response.body().asString()).isEqualTo("Hello World!");
+ }
+}