An addon bundle and a set of classes for using Java 8 features like Optional<T>
and the new Date/Time API (JSR-310) in a Dropwizard application.
Currently it supports Java 8 versions of dropwizard-auth and dropwizard-jdbi.
INFO: The Dropwizard Java 8 Bundle has been integrated into Dropwizard 1.0.0 and higher and not required any more. Please only use this bundle if you're using an older version of Dropwizard.
Just add Java8Bundle
to your Application class
as described in the manual in the Bundles paragraph.
This will add support for Optional<T>
to Jersey and support for JSR-310 and Optional<T>
to Jackson.
public class DemoApplication extends Application<DemoConfiguration> {
// [...]
@Override
public void initialize(Bootstrap<HelloWorldConfiguration> bootstrap) {
bootstrap.addBundle(new Java8Bundle());
// [...]
}
}
When using ResourceTestRule
in unit tests, Java8 providers need to registered to ensure correct behaviour:
public static final ResourceTestRule resources = ResourceTestRule.builder()
.addResource(new HelloWorldResource())
.addProvider(OptionalMessageBodyWriter.class)
.addProvider(OptionalParamFeature.class)
.build();
To get support for Java 8 objects use io.dropwizard.java8.jdbi.DBIFactory
import io.dropwizard.java8.jdbi.DBIFactory;
@Override
public void run(ExampleConfiguration config, Environment environment) {
final DBIFactory factory = new DBIFactory();
final DBI jdbi = factory.build(environment, config.getDataSourceFactory(), "postgresql");
final UserDAO dao = jdbi.onDemand(UserDAO.class);
environment.jersey().register(new UserResource(dao));
}
When getting a single result use the annotation @SingleValueResult
public interface MyDAO {
@SingleValueResult
@SqlQuery("select name from something where id = :id")
Optional<String> findNameById(@Bind("id") int id);
}
This project is available on Maven Central. To add it to your project simply add the following dependencies to your
pom.xml
:
<dependency>
<groupId>io.dropwizard.modules</groupId>
<artifactId>dropwizard-java8</artifactId>
<version>0.9.0-1</version>
</dependency>
<dependency>
<groupId>io.dropwizard.modules</groupId>
<artifactId>dropwizard-java8-auth</artifactId>
<version>0.9.0-1</version>
</dependency>
<dependency>
<groupId>io.dropwizard.modules</groupId>
<artifactId>dropwizard-java8-jdbi</artifactId>
<version>0.9.0-1</version>
</dependency>
When using JSR-310 Dates with Hibernate, Jadira UserType Extend needs to be added:
<dependency>
<groupId>org.jadira.usertype</groupId>
<artifactId>usertype.extended</artifactId>
<version>4.0.0.GA</version>
</dependency>
Dropwizard will auto register this in SessionFactoryFactory
.
Please file bug reports and feature requests in GitHub issues.
Copyright (c) 2014-2015 Jochen Schalanda
This library is licensed under the Apache License, Version 2.0.
See http://www.apache.org/licenses/LICENSE-2.0.html or the LICENSE file in this repository for the full license text.