Code Monkey home page Code Monkey logo

dropwizard-todo-example's Introduction

Dropwizard Todo Example

An example "todo" Dropwizard application that uses SpringContextBuilder to create a Spring ApplicationContext. In this sample application, instead of using the default Dropwizard Hibernate support, we are using the SpringContextBuilder to create a Spring application context and drive transactions via Spring.

The main reasons you might want to do this are:

  • you already have a Spring-driven backend and want to use Dropwizard
  • you don't want sessions and transactions wrapped around an entire Jersey resource method (which is what will happen if you use the Dropwizard Hibernate-specific @UnitOfWork annotation)
  • you aren't using Hibernate, in which case there is no @UnitOfWork annotation for things like plain JDBC, JDBI, Spring JDBC, and so on and you want to use Spring to drive transactions.

To use SpringContextBuilder you'll first need to install the JAR in your Maven repository. To do that you will need to clone the repository at https://github.com/sleberknight/spring-appcontext-builder and then mvn install it. Then the following dependency declared in the POM file will be resolved properly.

<dependency>
    <groupId>com.fortitudetec</groupId>
    <artifactId>spring-appcontext-builder</artifactId>
    <version>0.1.0</version>
</dependency>

In the TodoApplication class in the run() method, we are creating a new application context and adding the Dropwizard configuration object and ManagedDataSource as parent beans. These parent beans are then accessible in the Spring application context, whether you are using Java Config or XML configuration.

ApplicationContext context = new SpringContextBuilder()
        .addParentContextBean("dataSource", dataSource)
        .addParentContextBean("configuration", configuration)
        .addAnnotationConfiguration(TodoSpringConfiguration.class)
        .build();

Then in the TodoSpringConfiguration class we autowire these parent beans in and use the data source to construct the Hibernate session factory.

@Configuration
@EnableTransactionManagement
@ComponentScan(basePackageClasses = TodoDao.class)
public class TodoSpringConfiguration {

    @Autowired
    private DataSource _dataSource;

    @Autowired
    private TodoConfiguration _configuration;

    @Bean
    public LocalSessionFactoryBean sessionFactory() {
        // ...
    }

    // ...
}

Once you have the Spring application context, you can simply get the beans you need (e.g. DAOs) directly from the context and manually inject them into your Jersey resource classes. For example:

TodoDao todoDao = context.getBean(TodoDao.class);
TodoResource todoResource = new TodoResource(todoDao);
environment.jersey().register(todoResource);

Manually extracting beans from a Spring context might be frowned upon by some people, but if the main reason Spring is being used is for things like transaction management in DAOs or service classes, then there really isn't any reason to make things more complicated. The Jersey resource class doesn't know anything about Spring; it simply knows that it needs another object to do its work and that's it. This also makes it much easier to test the resource class by mocking the dependency.

To run this example, you'll need to run an H2 server (see http://www.h2database.com/html/tutorial.html#using_server if you are not familiar with how to do this). Once the H2 server is running, you'll need to run the database migration to create a todos table. The simplest way is to do a mvn package to create a shaded-JAR file and then run the Dropwizard db migrate command.

If your local Maven repository is in your home directory in the default location, then the following command will start the H2 server:

$ java -cp ~/.m2/repository/com/h2database/h2/1.4.187/h2-1.4.187.jar org.h2.tools.Server

Next package the application into a JAR:

$ mvn package

Once the database is migrated, you can you can run the TodoApplication class directly, either directly in an IDE like IntelliJ or via the command line. First do the migration:

$ java -jar target/dropwizard-todo-example-0.1.0.jar db migrate config.yml

and then run the server:

$ java -jar target/dropwizard-todo-example-0.1.0.jar server config.yml

Since the application class in a Dropwizard application has a main() method, it is really simple to start and stop the application during development right from an IDE instead of needing to package into a JAR first. See the Dropwizard getting started or user manual for more information.

Finally, use any REST client (e.g. the Postman Chrome app) to hit the endpoints.

dropwizard-todo-example's People

Contributors

sleberknight avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.