Wednesday, September 24, 2014

Spring 4 + Hibernate 4 / Java configuration / rest service example with gradle

In this post I'll explain the required work to create a rest API utilizing both spring and hibernate version 4, and the configuration will be using java configuration classes not XML.

I'll use gradle to build and for dependency management, it's way easier than maven and keeps you focused on the application, if you are not familiar with gradle and interested in it see my previous post about it.

The first part which is dependency management is covered in gradle post mentioned above.
I'll skip to explain each tier of the project and its configurations:

As you can see we have 4 tiers:

1) DAO tier / data tier
In this tier we configure the datasource and hibernate, I used HSQL in memory db it can be easily substituted with other db engine providing the right dependencies

The DaoConfig defines the data source, transaction manager, session factory and  hibernate properties

The most important part is the annotations :
1) @Configuration : to tell spring that this is a configuration class
2) @PropertySource("") : is to load the properites file for this configuration
3) @ComponentScan({ "com.blabadi.gradle.dao" }) : is to tell spring container to scan the specific packages to look for beans, like Dao classes and entities
4) @EnableTransactionManagement : is similar to xml configuration <tx:annotation-driven>
responsible for registering the necessary Spring components that power annotation-driven transaction management (to be able to use @Transactional).

The rest is the person DO and the person DAO :

2) Business logic tier

configuration here is simple, and the person service is utilizing the @Transnational  annotation

3) Rest tier

this is where the web app configuration is, and exposes the Person APIs

The contains the spring web configuration for the rest project, it uses the @EnableWebMvc to configure the spring dispatcher servlet.

The is actually the replacement for web.xml in the java servlet 3 standard it looks for a class the implements  WebApplicationInitializer interface as replacement for the web.xml

Note that I had to add the dependency for servlet-api-3.0.1 to my gradle as compile time dependency but that's not the best way, because it will be provided by the application server.

1 comment:

  1. Thanks for the write-up, 2 years later and it still helped me solve my issue with latest Hibernate.


Note: Only a member of this blog may post a comment.

Istio —simple fast way to start

istio archeticture (source I would like to share with you a sample repo to start and help you continue your jou...