SlideShare une entreprise Scribd logo
1  sur  78
Télécharger pour lire hors ligne
Dropwizard
Scott Leberknight
4/29/2016
“…a Java framework for developing ops-
friendly, high-performance, RESTful web
services…”
“…pulls together stable, mature libraries
from the Java ecosystem into a simple, light-
weight package that lets you focus on
getting things done…”
“…out-of-the-box support for sophisticated
configuration, application metrics, logging,
operational tools…”
“…allowing you and your team to ship a
production-quality web service in the shortest
time possible”
Key Takeaways…
Simple to Build
Simple to Deploy
Simple to Monitor
RESTful web services that are…
Main Components
Jetty - Standalone web server
Jackson - JSON processing
Jersey (JAX-RS) - REST
Metrics - Application metrics
Other components…
Hibernate Validator - Validation
Logback & SLF4J - Logging
Liquibase - Database migrations
JDBI or Hibernate - Database access
And more…
Google Guava - Utilities
HttpClient or Jersey Client - HTTP clients
Joda Time - Date/time API
(*)
(*) Java 8 Date/Time API supersedes Joda
Freemarker & Mustache - Views/templates
Dropwizard app
30,000 foot view
Configuration
Application (Jetty server)
Resources (Jersey)
Data access (DAOs)
POJOs
reads
registers
access
serialize/
deserialize
JSON
CRUD
(fromYAML file)
(using Jackson)
components
basic workflow
HTTP
Request
Incoming
POJO
Resource
method
Logic, data
access, etc.
Outgoing
POJO(s)
HTTP
Response
Deserialize
JSON
Serialize
JSON
CLIENT
The Players
Class/Component Description
Configuration
Application configuration de-serialized fromYAML file
(via Jackson-annotated class)
Application
Initialize bundles, commands, resources, health checks,
etc. Starts Jetty server.
Resource Annotated Jersey/JAX-RS classes
DAO
Data access layer. Native Hibernate (AbstractDAO) and
JDBI support.
HealthCheck
Defines a runtime test of application behavior,
dependencies, etc.
Managed Objects Components requiring an explicit lifecycle (start / stop)
Command
Define command line actions (e.g. server starts Jetty; db
handles database operations)
POJOs (aka Representations)
Objects representing a service's RESTful API, serialized/
deserialized by Jackson
Lets’ build a simple
RESTful service to
control Nest thermostats…
Quick Digression - Lombok
“Project Lombok makes java a spicier
language by adding ‘handlers’ that know
how to build and compile simple,
boilerplate-free, not-quite-java code.”
- projectlombok.org
Lombok example #1
@Getter
@Setter
@EqualsAndHashCode
@ToString
@RequiredArgsConstructor

@AllArgsConstructor

public class Person {

private String firstName;

private String lastName;

private int age;
}
or use
@Data
{
Lombok example #2
@Data
@Builder

@NoArgsConstructor

public class Person {

private String firstName;

private String lastName;

private int age;
}
Lombok example #3
val p = Person.builder()

.firstName("Bob")

.lastName("Smith")

.age(36)

.build();
local variable
type inference
configuration class
@Getter

@Setter

@ToString

public class NestConfiguration extends Configuration {



@JsonProperty("database")

@Valid

@NotNull

private DataSourceFactory dataSourceFactory;



}

config YAML
database:

driverClass: org.h2.Driver

user: nest

password: ${DEVIGNITION_DB_PWD:-DevIg$2016}

url: jdbc:h2:tcp://localhost/~/db/nest

validationQuery: "/* Nest DB Health Check */ SELECT 42"

properties:

hibernate.connection.charSet: UTF-8

hibernate.dialect: org.hibernate.dialect.H2Dialect

hibernate.format_sql: true

hibernate.show_sql: false



logging:

level: INFO

loggers:

com.devignition: DEBUG

org.hibernate.SQL: DEBUG

Application
main() - starts app (Jetty server)
initialize() - bundles, configuration options, etc.
run() - register Jersey resources & more
application class
public class NestApplication
extends Application<NestConfiguration> {
public static void main(final String[] args) throws Exception {

new NestApplication().run(args);

}
@Override public String getName() { return “Nest Service"; }
@Override

public void initialize(Bootstrap<NestConfiguration> bootstrap) {
// initialize bundles, e.g. migrations, Hibernate, etc.
}
@Override
public void run(NestConfiguration configuration,
Environment environment) {
// register resources, health checks, metrics, etc.
}
}
initialize - env var substitution
// in Application#initialize()
bootstrap.setConfigurationSourceProvider(

new SubstitutingSourceProvider(
bootstrap.getConfigurationSourceProvider(),

new EnvironmentVariableSubstitutor(false)));
# config.yml
# Use DEVIGNITION_DB_PWD env var, or
# default to DevIg$2016 if not exists (bash syntax)
password: ${DEVIGNITION_DB_PWD:-DevIg$2016}
Bundles
Re-usable functionality
Examples:
- Database migrations bundle
- Hibernate bundle
Migrations Bundle
Liquibase (out of box)
Add migrations bundle to application class
initialize - add a Bundle
// in Application#initialize()
bootstrap.addBundle(new MigrationsBundle<NestConfiguration>() {

@Override

public PooledDataSourceFactory
getDataSourceFactory(NestConfiguration config) {

return config.getDataSourceFactory();

}

});
Liquibase migration
<databaseChangeLog>
<changeSet id="001-create-nests-table" author="batman">
<createTable tableName="nests">
<column name="id" type="bigint" autoIncrement="true">

<constraints primaryKey="true" nullable="false"/>

</column>
<column name="location" type="varchar(256)">
<constraints nullable="false" unique="true"/>

</column>

<column name="temperature" type="int">

<constraints nullable="false"/>

</column>

<column name="mode" type="varchar(256)">

<constraints nullable="false"/>

</column>
</createTable>
</changeSet>
</databaseChangeLog>
run - register a resource
@Override
public void run(NestConfiguration configuration,
Environment environment) {
NestDao nestDao = new NestDao(
hibernateBundle.getSessionFactory());
NestResource nestResource = new NestResource(nestDao);
environment.jersey().register(nestResource);
}
Hibernate Bundle creates…
- managed connection pool
- database health check
- managed & instrumented SessionFactory
Managed Objects
Objects that are tied to the application’s
lifecycle (i.e. to Jetty lifecycle)
start() called before server starts
stop() called after server shuts down
Ideal for thread pools, scheduled executors, etc.
managed executor
// Create a Dropwizard-managed executor service
boolean useDaemon = true;

ScheduledExecutorService executor = environment.lifecycle()

.scheduledExecutorService("special-task-%d", useDaemon)

.build();

executor.scheduleAtFixedRate(this::performTask, 1L, 5L,
TimeUnit.MINUTES);
Health Checks
Runtime test of behavior, dependencies, etc.
Health checks should lightly test service
dependencies, e.g. databases, downstream
services, etc.
health check
public class NestServiceHealthCheck extends HealthCheck {
private NestService nestService;
public NestServiceHealthCheck(NestService service) {
this.nestService = service;
}
@Override
protected Result check() throws Exception {
NestServiceStatus status = nestService.currentStatus();
if (status.ok() {
return Result.healthy();
} else {
return Result.unhealthy(status.problems());
}
}
}
Representations
Generally…just POJOs
Use Hibernate Validator, e.g. @NotBlank
Optionally use advanced Jackson features,
e.g. custom serializers or deserializers
Sprinkle in Jackson annotations, e.g. @JsonIgnore
representation (POJO)
@Data

@Entity

@Table(name = "nests")

public class NestThermostat {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;


@NotBlank @Length(max = 256)

private String location;



@NotNull @Min(60) @Max(90)

private Integer temperature;

@NotNull

@Enumerated(EnumType.STRING)

private Mode mode;
@JsonIgnore

private UUID internalGuid;

}
Data Access / Application Logic
Use whatever makes sense for a given service
Difference services may use different data stores
- Postgres for relational data
- Neo4J for connected data
- MongoDB for document-oriented data
DAO (Hibernate)
public class NestDao extends AbstractDAO<NestThermostat> {

public NestDao(SessionFactory sessionFactory) { super(sessionFactory); }



public NestThermostat getById(long id) { return get(id); }



public List<NestThermostat> getAll() {

Criteria criteria = currentSession().createCriteria(getEntityClass())

.addOrder(Order.asc("location"));

return list(criteria);

}



public long create(NestThermostat nest) {

checkState(nest.getId() == null, "New nests cannot have an id");

return persist(nest).getId();

}



public void update(NestThermostat nest) {

checkState(nest.getId() != null, "Existing Nest must have an id");

persist(nest);

}



public void delete(long id) { currentSession().delete(getById(id)); }

}
DAO (JDBI)
public interface NestDao {



@SqlQuery("select * from nests order by location")

@Mapper(NestMapper.class)

ImmutableList<Nest> getAllNests();



@SqlQuery("select * from nests where location = :it")

@Mapper(NestMapper.class)

@SingleValueResult(Nest.class)

Optional<Nest> getNest(@Bind String location);



@GetGeneratedKeys

@SqlUpdate("insert into nests (location, location_id)"

+ " values (:location, :locationId)")
long createNest(@BindBean Nest nest);



@SqlUpdate("delete from nests where location = :it")

void deleteNest(@Bind String location);

}
Resource classes
Mostly just Jersey (JAX-RS) resource classes
Dropwizard adds some additional features, e.g.
- validation with @Valid
- AbstractParam and implementations
- Metrics support, e.g. @Timed
resource class
@Path("/nests")

@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)

public class NestResource {
private NestDao nestDao;



public NestResource(NestDao nestDao) {

this.nestDao = nestDao;

}
// resource methods (see next slide)
}
( dependency injection w/o a framework…amazing what constructors can do ! )
example resource methods
@GET

@Path("/{id}")

@Timed

@ExceptionMetered

@UnitOfWork

public Optional<NestThermostat> getById(@PathParam("id") LongParam id) {

return Optional.ofNullable(nestDao.getById(id.get()));

}



@POST

@Timed

@ExceptionMetered

@UnitOfWork

public Response addNest(@Valid NestThermostat nest) {

long id = nestDao.create(nest);

URI location = UriBuilder.fromResource(NestResource.class)
.path("{id}").build(id);

return Response.created(location)

.entity(nest)

.build();

}
Now let's put on
our DevOps hat…
https://twitter.com/shu/status/575801992641056768
Fat JARs
Maven Shade plugin
Single executable "fat" JAR files
One easily deployable artifact
(*)
(*) POJJ - Plain Old Java JAR
<plugin>

<artifactId>maven-jar-plugin</artifactId>

<version>2.6</version>

<configuration>

<archive>

<manifest>

<addClasspath>true</addClasspath>

<mainClass>${mainClass}</mainClass>

<addDefaultImplementationEntries>true</addDefaultImplementationEntries>

</manifest>

</archive>

</configuration>

</plugin>
Versioned JARs
Add Implementation-Version to JAR manifest
Maven jar plugin
Manifest-Version: 1.0
Implementation-Title: Nest Example Service
Implementation-Version: 1.0.0
Archiver-Version: Plexus Archiver
Built-By: sleberkn
Implementation-Vendor-Id: com.devignition
3. MANIFEST.MF (in JAR)
<groupId>com.devignition</groupId>
<artifactId>nest-service</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>Nest Example Service</name>
1. pom.xml (in project)
nest-service-1.0.0.jar
2. Build JAR file / maven-jar-plugin
Deployment steps
Build executable fat JAR
Run database migrations (if any)
Start application (embedded Jetty server)
Build JAR
$ mvn clean package
(*) Chicken & egg - database tests will fail without first migrating
Commands
$ java -jar nest-service-1.0.0.jar
usage: java -jar nest-service-1.0.0.jar
[-h] [-v] {server,check,db} ...
positional arguments:
{server,check,db} available commands
optional arguments:
-h, --help show this help message and exit
-v, --version show the application version and exit
Check, Migrate & Run!
$ java -jar nest-service-1.0.0.jar check config.yml
$ java -jar nest-service-1.0.0.jar db migrate config.yml
$ java -jar nest-service-1.0.0.jar server config.yml
Jetty is now listening…
Dropwizard App
(Jetty)
App Port
8080
Admin Port
8081
GET my.nest.com:8080 /nests
GET my.nest.com:8081 /healthcheck
GET my.nest.com:8081 /metrics
GET my.nest.com:8081 /ping
GET my.nest.com:8081 /threads
GET my.nest.com:8080 /nests/2
Ping…
(HTTP) GET Our Nests
DevOps Menu
Check our health
Metrics (there are a LOT)
Console
Metrics reporting
Graphite
CSV files
Ganglia
Custom…SLF4J
Monitoring
Common OS monitoring tools
ps, top, htop, lsof, iostat, etc.
Common OS monitoring tools
ps, top, htop, lsof, iostat, etc.
Testing Dropwizard
Fixtures for unit testing representations
Easily unit test resources using mock DAOs
Excellent integration test support…
Prefer AssertJ fluent-assertions
Lots of unit tests….
Integration testing
ResourceTestRule
DropwizardClientRule
DropwizardAppRule
DropwizardTestSupport
ResourceTestRule
public class NestResourceIntegrationTest {
private static final NestDao NEST_DAO = mock(NestDao.class);
@ClassRule

public static final ResourceTestRule RESOURCE = ResourceTestRule.builder()
.addResource(new NestResource(NEST_DAO))

.build();

@After public void tearDown() { reset(NEST_DAO); }
@Test

public void testGetNestById() {

long id = 42;

NestThermostat nest = newNest(id, "Kitchen", 72, Mode.COOL);

when(NEST_DAO.getById(id)).thenReturn(nest);

assertThat(RESOURCE.client()

.target("/nests/42")

.request()

.get(NestThermostat.class))

.isEqualToComparingFieldByField(nest);

}
}
(in-memory Jersey server)
DropwizardAppRule
public class NestApplicationIntegrationTest {
@ClassRule

public static final DropwizardAppRule<NestConfiguration> APP =

new DropwizardAppRule<>(NestApplication.class,
ResourceHelpers.resourceFilePath("test-app-config.yml"));

@Test

public void testGetNest() {
Client client = new JerseyClientBuilder(APP.getEnvironment())
.build("app test client");
String url = String.format("http://localhost:%d/nests",
APP.getLocalPort());
Response response = client.target(url)

.request()

.get();

assertThat(response.getStatusInfo()).isEqualTo(Response.Status.OK);
}
}
(full integration test starts your entire app)
& more to explore…
Tasks
Authentication
Filters
Simple Views
Form Handling
Clients
Polymorphic Config
Logging HTTP/2
HTTPS/TLS
Wrap-up
Production-focused, RESTful web services
DevOps-friendly deployment & monitoring
Make your apps Twelve-Factor apps…
The Twelve-Factor App
Dropwizard apps have many
characteristics of 12-Factor apps
http://12factor.net
Simple to Build
Simple to Deploy
Simple to Monitor
RESTful web services that are…
sample code
available at:
https://github.com/sleberknight/dropwizard-devignition-2016
https://jersey.java.net/
References, Act I
http://www.dropwizard.io/
http://wiki.fasterxml.com/JacksonHome
http://www.eclipse.org/jetty/
https://dropwizard.github.io/metrics/
References, Act II
http://hibernate.org/validator/
http://www.jdbi.org/
http://www.liquibase.org/
http://www.joda.org/joda-time/
https://github.com/google/guava/wiki
Photo Attributions
nest thermostat - http://www.nest.com
bundle - https://www.flickr.com/photos/pembo1781/5477885038/
caduceus - https://www.flickr.com/photos/26672416@N00/4777701981/
DevOps hat - https://twitter.com/shu/status/575801992641056768
coffee in mason jar - https://www.flickr.com/photos/traveloriented/9757236883/
tux - http://powerpcaccess.blogspot.com/2013/03/linux-
on-ppc-mac.html#.VyGHCBMrLdQ
(I own or took all other photos myself)
gunshow comic - http://gunshowcomic.com/316
half moon - https://www.flickr.com/photos/75929731@N08/7044973631/
My Info
sleberknight at
fortitudetec.com
www.fortitudetec.com
@sleberknight
scott.leberknight at
gmail
Dropwizard???
http://gunshowcomic.com/316

Contenu connexe

Tendances

EJB 3.0 - Yet Another Introduction
EJB 3.0 - Yet Another IntroductionEJB 3.0 - Yet Another Introduction
EJB 3.0 - Yet Another IntroductionKelum Senanayake
 
Spring Data JPA from 0-100 in 60 minutes
Spring Data JPA from 0-100 in 60 minutesSpring Data JPA from 0-100 in 60 minutes
Spring Data JPA from 0-100 in 60 minutesVMware Tanzu
 
Pentesting GraphQL Applications
Pentesting GraphQL ApplicationsPentesting GraphQL Applications
Pentesting GraphQL ApplicationsNeelu Tripathy
 
Deep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKDeep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKJosé Paumard
 
Spring Framework - Data Access
Spring Framework - Data AccessSpring Framework - Data Access
Spring Framework - Data AccessDzmitry Naskou
 
Hunting for Privilege Escalation in Windows Environment
Hunting for Privilege Escalation in Windows EnvironmentHunting for Privilege Escalation in Windows Environment
Hunting for Privilege Escalation in Windows EnvironmentTeymur Kheirkhabarov
 
[JWPA-1]의존성 주입(Dependency injection)
[JWPA-1]의존성 주입(Dependency injection)[JWPA-1]의존성 주입(Dependency injection)
[JWPA-1]의존성 주입(Dependency injection)Young-Ho Cho
 
FIDO2 Specifications Overview
FIDO2 Specifications OverviewFIDO2 Specifications Overview
FIDO2 Specifications OverviewFIDO Alliance
 
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...Domenic Denicola
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅Keesun Baik
 
Django Framework and Application Structure
Django Framework and Application StructureDjango Framework and Application Structure
Django Framework and Application StructureSEONGTAEK OH
 
Action Jackson! Effective JSON processing in Spring Boot Applications
Action Jackson! Effective JSON processing in Spring Boot ApplicationsAction Jackson! Effective JSON processing in Spring Boot Applications
Action Jackson! Effective JSON processing in Spring Boot ApplicationsJoris Kuipers
 
FIWARE Global Summit - NGSI-LD – an Evolution from NGSIv2
FIWARE Global Summit - NGSI-LD – an Evolution from NGSIv2FIWARE Global Summit - NGSI-LD – an Evolution from NGSIv2
FIWARE Global Summit - NGSI-LD – an Evolution from NGSIv2FIWARE
 
Django Rest Framework - Building a Web API
Django Rest Framework - Building a Web APIDjango Rest Framework - Building a Web API
Django Rest Framework - Building a Web APIMarcos Pereira
 
Spring data presentation
Spring data presentationSpring data presentation
Spring data presentationOleksii Usyk
 

Tendances (20)

EJB 3.0 - Yet Another Introduction
EJB 3.0 - Yet Another IntroductionEJB 3.0 - Yet Another Introduction
EJB 3.0 - Yet Another Introduction
 
Spring Data JPA from 0-100 in 60 minutes
Spring Data JPA from 0-100 in 60 minutesSpring Data JPA from 0-100 in 60 minutes
Spring Data JPA from 0-100 in 60 minutes
 
Pentesting GraphQL Applications
Pentesting GraphQL ApplicationsPentesting GraphQL Applications
Pentesting GraphQL Applications
 
Deep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKDeep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UK
 
Spring Data JPA
Spring Data JPASpring Data JPA
Spring Data JPA
 
Spring Framework - Data Access
Spring Framework - Data AccessSpring Framework - Data Access
Spring Framework - Data Access
 
Hunting for Privilege Escalation in Windows Environment
Hunting for Privilege Escalation in Windows EnvironmentHunting for Privilege Escalation in Windows Environment
Hunting for Privilege Escalation in Windows Environment
 
[JWPA-1]의존성 주입(Dependency injection)
[JWPA-1]의존성 주입(Dependency injection)[JWPA-1]의존성 주입(Dependency injection)
[JWPA-1]의존성 주입(Dependency injection)
 
GORM
GORMGORM
GORM
 
FIDO2 Specifications Overview
FIDO2 Specifications OverviewFIDO2 Specifications Overview
FIDO2 Specifications Overview
 
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅
 
Django Framework and Application Structure
Django Framework and Application StructureDjango Framework and Application Structure
Django Framework and Application Structure
 
Action Jackson! Effective JSON processing in Spring Boot Applications
Action Jackson! Effective JSON processing in Spring Boot ApplicationsAction Jackson! Effective JSON processing in Spring Boot Applications
Action Jackson! Effective JSON processing in Spring Boot Applications
 
Express JS
Express JSExpress JS
Express JS
 
FIWARE Global Summit - NGSI-LD – an Evolution from NGSIv2
FIWARE Global Summit - NGSI-LD – an Evolution from NGSIv2FIWARE Global Summit - NGSI-LD – an Evolution from NGSIv2
FIWARE Global Summit - NGSI-LD – an Evolution from NGSIv2
 
Django Rest Framework - Building a Web API
Django Rest Framework - Building a Web APIDjango Rest Framework - Building a Web API
Django Rest Framework - Building a Web API
 
Maven Overview
Maven OverviewMaven Overview
Maven Overview
 
Apache maven 2 overview
Apache maven 2 overviewApache maven 2 overview
Apache maven 2 overview
 
Spring data presentation
Spring data presentationSpring data presentation
Spring data presentation
 

En vedette

Dropwizard Introduction
Dropwizard IntroductionDropwizard Introduction
Dropwizard IntroductionAnthony Chen
 
Production Ready Web Services with Dropwizard
Production Ready Web Services with DropwizardProduction Ready Web Services with Dropwizard
Production Ready Web Services with Dropwizardsullis
 
Dropwizard Internals
Dropwizard InternalsDropwizard Internals
Dropwizard Internalscarlo-rtr
 
Dropwizard at Yammer
Dropwizard at YammerDropwizard at Yammer
Dropwizard at YammerJamie Furness
 
Simple REST with Dropwizard
Simple REST with DropwizardSimple REST with Dropwizard
Simple REST with DropwizardAndrei Savu
 
Dropwizard Spring - the perfect Java REST server stack
Dropwizard Spring - the perfect Java REST server stackDropwizard Spring - the perfect Java REST server stack
Dropwizard Spring - the perfect Java REST server stackJacek Furmankiewicz
 
Microservice Architecture JavaCro 2015
Microservice Architecture JavaCro 2015Microservice Architecture JavaCro 2015
Microservice Architecture JavaCro 2015Nenad Pecanac
 
Java application monitoring with Dropwizard Metrics and graphite
Java application monitoring with Dropwizard Metrics and graphite Java application monitoring with Dropwizard Metrics and graphite
Java application monitoring with Dropwizard Metrics and graphite Roberto Franchini
 
Android 3.1 - Portland Code Camp 2011
Android 3.1 - Portland Code Camp 2011Android 3.1 - Portland Code Camp 2011
Android 3.1 - Portland Code Camp 2011sullis
 
Dropwizard and Groovy
Dropwizard and GroovyDropwizard and Groovy
Dropwizard and Groovytomaslin
 
Simple REST-APIs with Dropwizard and Swagger
Simple REST-APIs with Dropwizard and SwaggerSimple REST-APIs with Dropwizard and Swagger
Simple REST-APIs with Dropwizard and SwaggerLeanIX GmbH
 
RESTful Web Services with Jersey
RESTful Web Services with JerseyRESTful Web Services with Jersey
RESTful Web Services with JerseyScott Leberknight
 
Fault tolerant microservices - LJC Skills Matter 4thNov2014
Fault tolerant microservices - LJC Skills Matter 4thNov2014Fault tolerant microservices - LJC Skills Matter 4thNov2014
Fault tolerant microservices - LJC Skills Matter 4thNov2014Christopher Batey
 

En vedette (20)

Dropwizard Introduction
Dropwizard IntroductionDropwizard Introduction
Dropwizard Introduction
 
Production Ready Web Services with Dropwizard
Production Ready Web Services with DropwizardProduction Ready Web Services with Dropwizard
Production Ready Web Services with Dropwizard
 
Dropwizard Internals
Dropwizard InternalsDropwizard Internals
Dropwizard Internals
 
Dropwizard at Yammer
Dropwizard at YammerDropwizard at Yammer
Dropwizard at Yammer
 
Dropwizard
DropwizardDropwizard
Dropwizard
 
Simple REST with Dropwizard
Simple REST with DropwizardSimple REST with Dropwizard
Simple REST with Dropwizard
 
Dropwizard Spring - the perfect Java REST server stack
Dropwizard Spring - the perfect Java REST server stackDropwizard Spring - the perfect Java REST server stack
Dropwizard Spring - the perfect Java REST server stack
 
Microservice Architecture JavaCro 2015
Microservice Architecture JavaCro 2015Microservice Architecture JavaCro 2015
Microservice Architecture JavaCro 2015
 
Java application monitoring with Dropwizard Metrics and graphite
Java application monitoring with Dropwizard Metrics and graphite Java application monitoring with Dropwizard Metrics and graphite
Java application monitoring with Dropwizard Metrics and graphite
 
Android 3.1 - Portland Code Camp 2011
Android 3.1 - Portland Code Camp 2011Android 3.1 - Portland Code Camp 2011
Android 3.1 - Portland Code Camp 2011
 
jps & jvmtop
jps & jvmtopjps & jvmtop
jps & jvmtop
 
Dropwizard and Groovy
Dropwizard and GroovyDropwizard and Groovy
Dropwizard and Groovy
 
httpie
httpiehttpie
httpie
 
Simple REST-APIs with Dropwizard and Swagger
Simple REST-APIs with Dropwizard and SwaggerSimple REST-APIs with Dropwizard and Swagger
Simple REST-APIs with Dropwizard and Swagger
 
RESTful Web Services with Jersey
RESTful Web Services with JerseyRESTful Web Services with Jersey
RESTful Web Services with Jersey
 
AWS Lambda
AWS LambdaAWS Lambda
AWS Lambda
 
Fault tolerant microservices - LJC Skills Matter 4thNov2014
Fault tolerant microservices - LJC Skills Matter 4thNov2014Fault tolerant microservices - LJC Skills Matter 4thNov2014
Fault tolerant microservices - LJC Skills Matter 4thNov2014
 
Soa with consul
Soa with consulSoa with consul
Soa with consul
 
JEE on DC/OS
JEE on DC/OSJEE on DC/OS
JEE on DC/OS
 
Microservices/dropwizard
Microservices/dropwizardMicroservices/dropwizard
Microservices/dropwizard
 

Similaire à Dropwizard

Hibernate
Hibernate Hibernate
Hibernate Sunil OS
 
比XML更好用的Java Annotation
比XML更好用的Java Annotation比XML更好用的Java Annotation
比XML更好用的Java Annotationjavatwo2011
 
Rediscovering Spring with Spring Boot(1)
Rediscovering Spring with Spring Boot(1)Rediscovering Spring with Spring Boot(1)
Rediscovering Spring with Spring Boot(1)Gunith Devasurendra
 
dokumen.tips_rediscovering-spring-with-spring-boot1 (1).pdf
dokumen.tips_rediscovering-spring-with-spring-boot1 (1).pdfdokumen.tips_rediscovering-spring-with-spring-boot1 (1).pdf
dokumen.tips_rediscovering-spring-with-spring-boot1 (1).pdfAppster1
 
dokumen.tips_rediscovering-spring-with-spring-boot1.pdf
dokumen.tips_rediscovering-spring-with-spring-boot1.pdfdokumen.tips_rediscovering-spring-with-spring-boot1.pdf
dokumen.tips_rediscovering-spring-with-spring-boot1.pdfAppster1
 
Tomcat连接池配置方法V2.1
Tomcat连接池配置方法V2.1Tomcat连接池配置方法V2.1
Tomcat连接池配置方法V2.1Zianed Hou
 
JBoss AS Upgrade
JBoss AS UpgradeJBoss AS Upgrade
JBoss AS Upgradesharmami
 
Java Configuration Deep Dive with Spring
Java Configuration Deep Dive with SpringJava Configuration Deep Dive with Spring
Java Configuration Deep Dive with SpringJoshua Long
 
Red Hat Agile integration Workshop Labs
Red Hat Agile integration Workshop LabsRed Hat Agile integration Workshop Labs
Red Hat Agile integration Workshop LabsJudy Breedlove
 
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)Red Hat Developers
 
Teste de Integração com DbUnit e jIntegrity
Teste de Integração com DbUnit e jIntegrityTeste de Integração com DbUnit e jIntegrity
Teste de Integração com DbUnit e jIntegrityWashington Botelho
 
Javatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparisonJavatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparisonJini Lee
 
Spring Framework Petclinic sample application
Spring Framework Petclinic sample applicationSpring Framework Petclinic sample application
Spring Framework Petclinic sample applicationAntoine Rey
 
Java Unit Testing with Unitils
Java Unit Testing with UnitilsJava Unit Testing with Unitils
Java Unit Testing with UnitilsMikalai Alimenkou
 
GlassFish REST Administration Backend
GlassFish REST Administration BackendGlassFish REST Administration Backend
GlassFish REST Administration BackendArun Gupta
 
Symfony2 - from the trenches
Symfony2 - from the trenchesSymfony2 - from the trenches
Symfony2 - from the trenchesLukas Smith
 
Modern Android app library stack
Modern Android app library stackModern Android app library stack
Modern Android app library stackTomáš Kypta
 

Similaire à Dropwizard (20)

Hibernate
Hibernate Hibernate
Hibernate
 
比XML更好用的Java Annotation
比XML更好用的Java Annotation比XML更好用的Java Annotation
比XML更好用的Java Annotation
 
Rediscovering Spring with Spring Boot(1)
Rediscovering Spring with Spring Boot(1)Rediscovering Spring with Spring Boot(1)
Rediscovering Spring with Spring Boot(1)
 
Play 2.0
Play 2.0Play 2.0
Play 2.0
 
dokumen.tips_rediscovering-spring-with-spring-boot1 (1).pdf
dokumen.tips_rediscovering-spring-with-spring-boot1 (1).pdfdokumen.tips_rediscovering-spring-with-spring-boot1 (1).pdf
dokumen.tips_rediscovering-spring-with-spring-boot1 (1).pdf
 
dokumen.tips_rediscovering-spring-with-spring-boot1.pdf
dokumen.tips_rediscovering-spring-with-spring-boot1.pdfdokumen.tips_rediscovering-spring-with-spring-boot1.pdf
dokumen.tips_rediscovering-spring-with-spring-boot1.pdf
 
Tomcat连接池配置方法V2.1
Tomcat连接池配置方法V2.1Tomcat连接池配置方法V2.1
Tomcat连接池配置方法V2.1
 
Introduction to Spring Boot
Introduction to Spring BootIntroduction to Spring Boot
Introduction to Spring Boot
 
JBoss AS Upgrade
JBoss AS UpgradeJBoss AS Upgrade
JBoss AS Upgrade
 
Java Configuration Deep Dive with Spring
Java Configuration Deep Dive with SpringJava Configuration Deep Dive with Spring
Java Configuration Deep Dive with Spring
 
Red Hat Agile integration Workshop Labs
Red Hat Agile integration Workshop LabsRed Hat Agile integration Workshop Labs
Red Hat Agile integration Workshop Labs
 
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
 
Teste de Integração com DbUnit e jIntegrity
Teste de Integração com DbUnit e jIntegrityTeste de Integração com DbUnit e jIntegrity
Teste de Integração com DbUnit e jIntegrity
 
Javatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparisonJavatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparison
 
Requery overview
Requery overviewRequery overview
Requery overview
 
Spring Framework Petclinic sample application
Spring Framework Petclinic sample applicationSpring Framework Petclinic sample application
Spring Framework Petclinic sample application
 
Java Unit Testing with Unitils
Java Unit Testing with UnitilsJava Unit Testing with Unitils
Java Unit Testing with Unitils
 
GlassFish REST Administration Backend
GlassFish REST Administration BackendGlassFish REST Administration Backend
GlassFish REST Administration Backend
 
Symfony2 - from the trenches
Symfony2 - from the trenchesSymfony2 - from the trenches
Symfony2 - from the trenches
 
Modern Android app library stack
Modern Android app library stackModern Android app library stack
Modern Android app library stack
 

Plus de Scott Leberknight (18)

JShell & ki
JShell & kiJShell & ki
JShell & ki
 
JUnit Pioneer
JUnit PioneerJUnit Pioneer
JUnit Pioneer
 
JDKs 10 to 14 (and beyond)
JDKs 10 to 14 (and beyond)JDKs 10 to 14 (and beyond)
JDKs 10 to 14 (and beyond)
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
SDKMAN!
SDKMAN!SDKMAN!
SDKMAN!
 
JUnit 5
JUnit 5JUnit 5
JUnit 5
 
Cloudera Impala, updated for v1.0
Cloudera Impala, updated for v1.0Cloudera Impala, updated for v1.0
Cloudera Impala, updated for v1.0
 
Java 8 Lambda Expressions
Java 8 Lambda ExpressionsJava 8 Lambda Expressions
Java 8 Lambda Expressions
 
Google Guava
Google GuavaGoogle Guava
Google Guava
 
Cloudera Impala
Cloudera ImpalaCloudera Impala
Cloudera Impala
 
iOS
iOSiOS
iOS
 
Apache ZooKeeper
Apache ZooKeeperApache ZooKeeper
Apache ZooKeeper
 
HBase Lightning Talk
HBase Lightning TalkHBase Lightning Talk
HBase Lightning Talk
 
Hadoop
HadoopHadoop
Hadoop
 
wtf is in Java/JDK/wtf7?
wtf is in Java/JDK/wtf7?wtf is in Java/JDK/wtf7?
wtf is in Java/JDK/wtf7?
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
 
Polyglot Persistence
Polyglot PersistencePolyglot Persistence
Polyglot Persistence
 
Rack
RackRack
Rack
 

Dernier

Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusZilliz
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbuapidays
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 

Dernier (20)

Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 

Dropwizard