diff --git a/core/pom.xml b/core/pom.xml
index ad0ccb3..7042a08 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -101,4 +101,4 @@
 			<scope>test</scope>
 		</dependency>
 	</dependencies>
-</project>
\ No newline at end of file
+</project>
diff --git a/core/src/main/java/org/apache/metamodel/membrane/app/CachedDataSourceRegistryWrapper.java b/core/src/main/java/org/apache/metamodel/membrane/app/CachedDataSourceRegistryWrapper.java
index f09fbca..ed7902a 100644
--- a/core/src/main/java/org/apache/metamodel/membrane/app/CachedDataSourceRegistryWrapper.java
+++ b/core/src/main/java/org/apache/metamodel/membrane/app/CachedDataSourceRegistryWrapper.java
@@ -50,11 +50,11 @@
     private final DataSourceRegistry delegate;
     private final LoadingCache<String, DataContext> loadingCache;
 
-    public CachedDataSourceRegistryWrapper(DataSourceRegistry delegate) {
+    public CachedDataSourceRegistryWrapper(final DataSourceRegistry delegate) {
         this(delegate, DEFAULT_TIMEOUT_SECONDS, TimeUnit.SECONDS);
     }
 
-    public CachedDataSourceRegistryWrapper(DataSourceRegistry delegate, long cacheTimeout, TimeUnit cacheTimeoutUnit) {
+    public CachedDataSourceRegistryWrapper(final DataSourceRegistry delegate, final long cacheTimeout, final TimeUnit cacheTimeoutUnit) {
         this.delegate = delegate;
         this.loadingCache = CacheBuilder.newBuilder().expireAfterAccess(cacheTimeout, cacheTimeoutUnit).removalListener(
                 createRemovalListener()).build(createCacheLoader());
@@ -63,7 +63,7 @@
     private RemovalListener<String, DataContext> createRemovalListener() {
         return new RemovalListener<String, DataContext>() {
             @Override
-            public void onRemoval(RemovalNotification<String, DataContext> notification) {
+            public void onRemoval(final RemovalNotification<String, DataContext> notification) {
                 final DataContext dataContext = notification.getValue();
                 // some DataContexts are closeable - attempt closing it here
                 FileHelper.safeClose(dataContext);
@@ -74,7 +74,7 @@
     private CacheLoader<String, DataContext> createCacheLoader() {
         return new CacheLoader<String, DataContext>() {
             @Override
-            public DataContext load(String key) throws Exception {
+            public DataContext load(final String key) throws Exception {
                 return delegate.openDataContext(key);
             }
         };
@@ -86,14 +86,14 @@
     }
 
     @Override
-    public String registerDataSource(String dataContextName, DataContextProperties dataContextProperties)
+    public String registerDataSource(final String dataContextName, final DataContextProperties dataContextProperties)
             throws DataSourceAlreadyExistException {
         loadingCache.invalidate(dataContextName);
         return delegate.registerDataSource(dataContextName, dataContextProperties);
     }
 
     @Override
-    public DataContext openDataContext(String dataSourceName) throws NoSuchDataSourceException {
+    public DataContext openDataContext(final String dataSourceName) throws NoSuchDataSourceException {
         try {
             return loadingCache.get(dataSourceName);
         } catch (ExecutionException e) {
diff --git a/core/src/main/java/org/apache/metamodel/membrane/controllers/model/RestDataSourceDefinition.java b/core/src/main/java/org/apache/metamodel/membrane/controllers/model/RestDataSourceDefinition.java
index 500427e..3feef3c 100644
--- a/core/src/main/java/org/apache/metamodel/membrane/controllers/model/RestDataSourceDefinition.java
+++ b/core/src/main/java/org/apache/metamodel/membrane/controllers/model/RestDataSourceDefinition.java
@@ -49,7 +49,7 @@
     }
 
     @JsonAnySetter
-    public void set(String name, Object value) {
+    public void set(final String name, final Object value) {
         properties.put(name, value);
     }
 }
diff --git a/core/src/main/java/org/apache/metamodel/membrane/controllers/model/RestErrorResponse.java b/core/src/main/java/org/apache/metamodel/membrane/controllers/model/RestErrorResponse.java
index ad2ce2a..8504ea6 100644
--- a/core/src/main/java/org/apache/metamodel/membrane/controllers/model/RestErrorResponse.java
+++ b/core/src/main/java/org/apache/metamodel/membrane/controllers/model/RestErrorResponse.java
@@ -39,11 +39,11 @@
     @JsonInclude(JsonInclude.Include.NON_NULL)
     private Map<String, Object> additionalDetails;
 
-    public RestErrorResponse(int code, String message) {
+    public RestErrorResponse(final int code, final String message) {
         this(code, message, null);
     }
 
-    public RestErrorResponse(int code, String message, Map<String, Object> additionalDetails) {
+    public RestErrorResponse(final int code, final String message, final Map<String, Object> additionalDetails) {
         this.code = code;
         this.message = message;
         this.additionalDetails = additionalDetails;
@@ -57,7 +57,7 @@
         return code;
     }
 
-    public void setCode(int code) {
+    public void setCode(final int code) {
         this.code = code;
     }
 
@@ -65,11 +65,11 @@
         return message;
     }
 
-    public void setMessage(String message) {
+    public void setMessage(final String message) {
         this.message = message;
     }
 
-    public void setAdditionalDetails(Map<String, Object> additionalDetails) {
+    public void setAdditionalDetails(final Map<String, Object> additionalDetails) {
         this.additionalDetails = additionalDetails;
     }
 
diff --git a/core/src/main/java/org/apache/metamodel/membrane/controllers/model/RestLink.java b/core/src/main/java/org/apache/metamodel/membrane/controllers/model/RestLink.java
index 01fb76d..cde135c 100644
--- a/core/src/main/java/org/apache/metamodel/membrane/controllers/model/RestLink.java
+++ b/core/src/main/java/org/apache/metamodel/membrane/controllers/model/RestLink.java
@@ -30,13 +30,12 @@
     private static final long serialVersionUID = 1L;
 
     private String name;
-
     private URI uri;
 
     public RestLink() {
     }
 
-    public RestLink(String name, URI uri) {
+    public RestLink(final String name, final URI uri) {
         this();
         this.name = name;
         this.uri = uri;
@@ -46,7 +45,7 @@
         return name;
     }
 
-    public void setName(String name) {
+    public void setName(final String name) {
         this.name = name;
     }
 
@@ -54,7 +53,7 @@
         return uri;
     }
 
-    public void setUri(URI uri) {
+    public void setUri(final URI uri) {
         this.uri = uri;
     }
 }
diff --git a/undertow/pom.xml b/undertow/pom.xml
index 81c2600..d1b989a 100644
--- a/undertow/pom.xml
+++ b/undertow/pom.xml
@@ -77,4 +77,4 @@
 			<version>1.3.23.Final</version>
 		</dependency>
 	</dependencies>
-</project>
\ No newline at end of file
+</project>
diff --git a/war/pom.xml b/war/pom.xml
index 0c35c43..c4ab505 100644
--- a/war/pom.xml
+++ b/war/pom.xml
@@ -39,4 +39,4 @@
 			<version>${project.version}</version>
 		</dependency>
 	</dependencies>
-</project>
\ No newline at end of file
+</project>
