diff --git a/README.md b/README.md index a8b3a04..818e508 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,14 @@ dropwizard-archetype ==================== -Maven2 Archetype for Coda Hale's Dropwizard \ No newline at end of file +Maven2 Archetype for Coda Hale's Dropwizard + +$ mvn package + +$ java -jar target/dropwizard-example-0.0.1-SNAPSHOT.jar server configs/hello-world.yml + +$ open http://localhost:8080/hello-world http://localhost:8080/hello-world?name=Successful+Dropwizard+User + +$ open http://localhost:8081/ http://localhost:8081/metrics http://localhost:8081/threads http://localhost:8081/healthcheck + + diff --git a/configs/hello-world.yml b/configs/hello-world.yml new file mode 100644 index 0000000..89c931f --- /dev/null +++ b/configs/hello-world.yml @@ -0,0 +1,2 @@ +template: Hello, %s! +defaultName: Stranger diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..d721884 --- /dev/null +++ b/pom.xml @@ -0,0 +1,72 @@ + + + 4.0.0 + + com.alexeypro.samples + dropwizard-example + 0.0.1-SNAPSHOT + + + + com.yammer.dropwizard + dropwizard-core + 0.4.0 + + + + + + UTF-8 + UTF-8 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + + 1.6 + 1.6 + UTF-8 + + + + org.apache.maven.plugins + maven-shade-plugin + 1.6 + + true + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + package + + shade + + + + + + com.alexeypro.samples.services.HelloWorldService + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/alexeypro/samples/HelloWorldConfiguration.java b/src/main/java/com/alexeypro/samples/HelloWorldConfiguration.java new file mode 100644 index 0000000..694b798 --- /dev/null +++ b/src/main/java/com/alexeypro/samples/HelloWorldConfiguration.java @@ -0,0 +1,23 @@ +package com.alexeypro.samples; + +import com.yammer.dropwizard.config.Configuration; +import org.codehaus.jackson.annotate.JsonProperty; +import org.hibernate.validator.constraints.NotEmpty; + +public class HelloWorldConfiguration extends Configuration { + @NotEmpty + @JsonProperty + private String template; + + @NotEmpty + @JsonProperty + private String defaultName = "Stranger"; + + public String getTemplate() { + return template; + } + + public String getDefaultName() { + return defaultName; + } +} \ No newline at end of file diff --git a/src/main/java/com/alexeypro/samples/Saying.java b/src/main/java/com/alexeypro/samples/Saying.java new file mode 100644 index 0000000..b3b10cf --- /dev/null +++ b/src/main/java/com/alexeypro/samples/Saying.java @@ -0,0 +1,19 @@ +package com.alexeypro.samples; + +public class Saying { + private final long id; + private final String content; + + public Saying(long id, String content) { + this.id = id; + this.content = content; + } + + public long getId() { + return id; + } + + public String getContent() { + return content; + } +} \ No newline at end of file diff --git a/src/main/java/com/alexeypro/samples/health/TemplateHealthCheck.java b/src/main/java/com/alexeypro/samples/health/TemplateHealthCheck.java new file mode 100644 index 0000000..6474cda --- /dev/null +++ b/src/main/java/com/alexeypro/samples/health/TemplateHealthCheck.java @@ -0,0 +1,21 @@ +package com.alexeypro.samples.health; + +import com.yammer.metrics.core.HealthCheck; + +public class TemplateHealthCheck extends HealthCheck { + private final String template; + + public TemplateHealthCheck(String template) { + super("template"); + this.template = template; + } + + @Override + protected Result check() throws Exception { + final String saying = String.format(template, "TEST"); + if (!saying.contains("TEST")) { + return Result.unhealthy("template doesn't include a name"); + } + return Result.healthy(); + } +} \ No newline at end of file diff --git a/src/main/java/com/alexeypro/samples/resources/HelloWorldResource.java b/src/main/java/com/alexeypro/samples/resources/HelloWorldResource.java new file mode 100644 index 0000000..9c7f8ca --- /dev/null +++ b/src/main/java/com/alexeypro/samples/resources/HelloWorldResource.java @@ -0,0 +1,33 @@ +package com.alexeypro.samples.resources; + +import com.alexeypro.samples.Saying; +import com.google.common.base.Optional; +import com.yammer.metrics.annotation.Timed; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import java.util.concurrent.atomic.AtomicLong; + +@Path("/hello-world") +@Produces(MediaType.APPLICATION_JSON) +public class HelloWorldResource { + private final String template; + private final String defaultName; + private final AtomicLong counter; + + public HelloWorldResource(String template, String defaultName) { + this.template = template; + this.defaultName = defaultName; + this.counter = new AtomicLong(); + } + + @GET + @Timed + public Saying sayHello(@QueryParam("name") Optional name) { + return new Saying(counter.incrementAndGet(), + String.format(template, name.or(defaultName))); + } +} \ No newline at end of file diff --git a/src/main/java/com/alexeypro/samples/services/HelloWorldService.java b/src/main/java/com/alexeypro/samples/services/HelloWorldService.java new file mode 100644 index 0000000..f59dd39 --- /dev/null +++ b/src/main/java/com/alexeypro/samples/services/HelloWorldService.java @@ -0,0 +1,27 @@ +package com.alexeypro.samples.services; + +import com.alexeypro.samples.HelloWorldConfiguration; +import com.alexeypro.samples.resources.HelloWorldResource; +import com.alexeypro.samples.health.TemplateHealthCheck; +import com.yammer.dropwizard.Service; +import com.yammer.dropwizard.config.Environment; + +public class HelloWorldService extends Service { + public static void main(String[] args) throws Exception { + new HelloWorldService().run(args); + } + + private HelloWorldService() { + super("hello-world"); + } + + @Override + protected void initialize(HelloWorldConfiguration configuration, + Environment environment) { + final String template = configuration.getTemplate(); + final String defaultName = configuration.getDefaultName(); + environment.addResource(new HelloWorldResource(template, defaultName)); + environment.addHealthCheck(new TemplateHealthCheck(template)); + } + +} \ No newline at end of file