Initial commit, based on hipster 0.0.19
This commit is contained in:
parent
03597dbc73
commit
2e52f7f79f
21
.editorconfig
Normal file
21
.editorconfig
Normal file
@ -0,0 +1,21 @@
|
||||
# EditorConfig helps developers define and maintain consistent
|
||||
# coding styles between different editors and IDEs
|
||||
# editorconfig.org
|
||||
|
||||
root = true
|
||||
|
||||
|
||||
[*]
|
||||
|
||||
# Change these settings to your own preference
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
# We recommend you to keep these unchanged
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
target
|
||||
node_modules
|
||||
.idea
|
||||
*.iml
|
||||
.classpath
|
||||
.project
|
||||
.settings
|
||||
.merge_file*
|
||||
.DS_Store
|
21
.jshintrc
Normal file
21
.jshintrc
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"node": true,
|
||||
"esnext": true,
|
||||
"bitwise": true,
|
||||
"camelcase": true,
|
||||
"curly": true,
|
||||
"eqeqeq": true,
|
||||
"immed": true,
|
||||
"indent": 4,
|
||||
"latedef": true,
|
||||
"newcap": true,
|
||||
"noarg": true,
|
||||
"quotmark": "single",
|
||||
"regexp": true,
|
||||
"undef": true,
|
||||
"unused": true,
|
||||
"strict": true,
|
||||
"trailing": true,
|
||||
"smarttabs": true,
|
||||
"white": true
|
||||
}
|
6
.yo-rc.json
Normal file
6
.yo-rc.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"generator-jhipster": {
|
||||
"packageName": "com.mycompany.myapp",
|
||||
"packageFolder": "com/mycompany/myapp"
|
||||
}
|
||||
}
|
382
Gruntfile.js
Normal file
382
Gruntfile.js
Normal file
@ -0,0 +1,382 @@
|
||||
// Generated on 2013-11-09 using generator-jhipster 0.0.19
|
||||
'use strict';
|
||||
|
||||
// # Globbing
|
||||
// for performance reasons we're only matching one level down:
|
||||
// 'test/spec/{,*/}*.js'
|
||||
// use this if you want to recursively match all subfolders:
|
||||
// 'test/spec/**/*.js'
|
||||
|
||||
var proxySnippet = require('grunt-connect-proxy/lib/utils').proxyRequest;
|
||||
|
||||
module.exports = function (grunt) {
|
||||
require('load-grunt-tasks')(grunt);
|
||||
require('time-grunt')(grunt);
|
||||
|
||||
grunt.initConfig({
|
||||
yeoman: {
|
||||
// configurable paths
|
||||
app: require('./bower.json').appPath || 'app',
|
||||
dist: 'dist'
|
||||
},
|
||||
watch: {
|
||||
compass: {
|
||||
files: ['src/main/webapp/styles/{,*/}*.{scss,sass}'],
|
||||
tasks: ['compass:server', 'autoprefixer']
|
||||
},
|
||||
styles: {
|
||||
files: ['src/main/webapp/styles/{,*/}*.css'],
|
||||
tasks: ['copy:styles', 'autoprefixer']
|
||||
},
|
||||
livereload: {
|
||||
options: {
|
||||
livereload: 35729
|
||||
},
|
||||
files: [
|
||||
'src/main/webapp/{,*/}*.html',
|
||||
'.tmp/styles/{,*/}*.css',
|
||||
'{.tmp/,}src/main/webapp/scripts/{,*/}*.js',
|
||||
'src/main/webapp/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
|
||||
]
|
||||
}
|
||||
},
|
||||
autoprefixer: {
|
||||
options: ['last 1 version'],
|
||||
dist: {
|
||||
files: [{
|
||||
expand: true,
|
||||
cwd: '.tmp/styles/',
|
||||
src: '{,*/}*.css',
|
||||
dest: '.tmp/styles/'
|
||||
}]
|
||||
}
|
||||
},
|
||||
connect: {
|
||||
proxies: [
|
||||
{
|
||||
context: '/app',
|
||||
host: 'localhost',
|
||||
port: 8080,
|
||||
https: false,
|
||||
changeOrigin: false
|
||||
},
|
||||
{
|
||||
context: '/metrics',
|
||||
host: 'localhost',
|
||||
port: 8080,
|
||||
https: false,
|
||||
changeOrigin: false
|
||||
}
|
||||
],
|
||||
options: {
|
||||
port: 9000,
|
||||
// Change this to '0.0.0.0' to access the server from outside.
|
||||
hostname: 'localhost',
|
||||
livereload: 35729
|
||||
},
|
||||
livereload: {
|
||||
options: {
|
||||
open: true,
|
||||
base: [
|
||||
'.tmp',
|
||||
'src/main/webapp'
|
||||
],
|
||||
middleware: function (connect) {
|
||||
return [
|
||||
proxySnippet,
|
||||
connect.static(require('path').resolve('src/main/webapp'))
|
||||
];
|
||||
}
|
||||
}
|
||||
},
|
||||
test: {
|
||||
options: {
|
||||
port: 9001,
|
||||
base: [
|
||||
'.tmp',
|
||||
'test',
|
||||
'src/main/webapp'
|
||||
]
|
||||
}
|
||||
},
|
||||
dist: {
|
||||
options: {
|
||||
base: '<%= yeoman.dist %>'
|
||||
}
|
||||
}
|
||||
},
|
||||
clean: {
|
||||
dist: {
|
||||
files: [{
|
||||
dot: true,
|
||||
src: [
|
||||
'.tmp',
|
||||
'<%= yeoman.dist %>/*',
|
||||
'!<%= yeoman.dist %>/.git*'
|
||||
]
|
||||
}]
|
||||
},
|
||||
server: '.tmp'
|
||||
},
|
||||
jshint: {
|
||||
options: {
|
||||
jshintrc: '.jshintrc'
|
||||
},
|
||||
all: [
|
||||
'Gruntfile.js',
|
||||
'src/main/webapp/scripts/{,*/}*.js'
|
||||
]
|
||||
},
|
||||
coffee: {
|
||||
options: {
|
||||
sourceMap: true,
|
||||
sourceRoot: ''
|
||||
},
|
||||
dist: {
|
||||
files: [{
|
||||
expand: true,
|
||||
cwd: 'src/main/webapp/scripts',
|
||||
src: '{,*/}*.coffee',
|
||||
dest: '.tmp/scripts',
|
||||
ext: '.js'
|
||||
}]
|
||||
},
|
||||
test: {
|
||||
files: [{
|
||||
expand: true,
|
||||
cwd: 'test/spec',
|
||||
src: '{,*/}*.coffee',
|
||||
dest: '.tmp/spec',
|
||||
ext: '.js'
|
||||
}]
|
||||
}
|
||||
},
|
||||
compass: {
|
||||
options: {
|
||||
sassDir: 'src/main/scss',
|
||||
cssDir: 'src/main/webapp/styles',
|
||||
generatedImagesDir: '.tmp/images/generated',
|
||||
imagesDir: 'src/main/webapp/images',
|
||||
javascriptsDir: 'src/main/webapp/scripts',
|
||||
fontsDir: 'src/main/webapp/styles/fonts',
|
||||
importPath: 'src/main/webapp/bower_components',
|
||||
httpImagesPath: '/images',
|
||||
httpGeneratedImagesPath: '/images/generated',
|
||||
httpFontsPath: '/styles/fonts',
|
||||
relativeAssets: false
|
||||
},
|
||||
dist: {},
|
||||
server: {
|
||||
options: {
|
||||
debugInfo: true
|
||||
}
|
||||
}
|
||||
},
|
||||
// not used since Uglify task does concat,
|
||||
// but still available if needed
|
||||
/*concat: {
|
||||
dist: {}
|
||||
},*/
|
||||
rev: {
|
||||
dist: {
|
||||
files: {
|
||||
src: [
|
||||
'<%= yeoman.dist %>/scripts/{,*/}*.js',
|
||||
'<%= yeoman.dist %>/styles/{,*/}*.css',
|
||||
'<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
|
||||
'<%= yeoman.dist %>/styles/fonts/*'
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
useminPrepare: {
|
||||
html: 'src/main/webapp/index.html',
|
||||
options: {
|
||||
dest: '<%= yeoman.dist %>'
|
||||
}
|
||||
},
|
||||
usemin: {
|
||||
html: ['<%= yeoman.dist %>/{,*/}*.html'],
|
||||
css: ['<%= yeoman.dist %>/styles/{,*/}*.css'],
|
||||
options: {
|
||||
dirs: ['<%= yeoman.dist %>']
|
||||
}
|
||||
},
|
||||
imagemin: {
|
||||
dist: {
|
||||
files: [{
|
||||
expand: true,
|
||||
cwd: 'src/main/webapp/images',
|
||||
src: '{,*/}*.{png,jpg,jpeg}',
|
||||
dest: '<%= yeoman.dist %>/images'
|
||||
}]
|
||||
}
|
||||
},
|
||||
svgmin: {
|
||||
dist: {
|
||||
files: [{
|
||||
expand: true,
|
||||
cwd: 'src/main/webapp/images',
|
||||
src: '{,*/}*.svg',
|
||||
dest: '<%= yeoman.dist %>/images'
|
||||
}]
|
||||
}
|
||||
},
|
||||
cssmin: {
|
||||
// By default, your `index.html` <!-- Usemin Block --> will take care of
|
||||
// minification. This option is pre-configured if you do not wish to use
|
||||
// Usemin blocks.
|
||||
// dist: {
|
||||
// files: {
|
||||
// '<%= yeoman.dist %>/styles/main.css': [
|
||||
// '.tmp/styles/{,*/}*.css',
|
||||
// 'styles/{,*/}*.css'
|
||||
// ]
|
||||
// }
|
||||
// }
|
||||
},
|
||||
htmlmin: {
|
||||
dist: {
|
||||
options: {
|
||||
/*removeCommentsFromCDATA: true,
|
||||
// https://github.com/yeoman/grunt-usemin/issues/44
|
||||
//collapseWhitespace: true,
|
||||
collapseBooleanAttributes: true,
|
||||
removeAttributeQuotes: true,
|
||||
removeRedundantAttributes: true,
|
||||
useShortDoctype: true,
|
||||
removeEmptyAttributes: true,
|
||||
removeOptionalTags: true*/
|
||||
},
|
||||
files: [{
|
||||
expand: true,
|
||||
cwd: 'src/main/webapp',
|
||||
src: ['*.html', 'views/*.html'],
|
||||
dest: '<%= yeoman.dist %>'
|
||||
}]
|
||||
}
|
||||
},
|
||||
// Put files not handled in other tasks here
|
||||
copy: {
|
||||
dist: {
|
||||
files: [{
|
||||
expand: true,
|
||||
dot: true,
|
||||
cwd: 'src/main/webapp',
|
||||
dest: '<%= yeoman.dist %>',
|
||||
src: [
|
||||
'*.{ico,png,txt}',
|
||||
'.htaccess',
|
||||
'bower_components/**/*',
|
||||
'images/{,*/}*.{gif,webp}',
|
||||
'styles/fonts/*'
|
||||
]
|
||||
}, {
|
||||
expand: true,
|
||||
cwd: '.tmp/images',
|
||||
dest: '<%= yeoman.dist %>/images',
|
||||
src: [
|
||||
'generated/*'
|
||||
]
|
||||
}]
|
||||
},
|
||||
styles: {
|
||||
expand: true,
|
||||
cwd: 'src/main/webapp/styles',
|
||||
dest: '.tmp/styles/',
|
||||
src: '{,*/}*.css'
|
||||
}
|
||||
},
|
||||
concurrent: {
|
||||
server: [
|
||||
'compass:server',
|
||||
'copy:styles'
|
||||
],
|
||||
test: [
|
||||
'compass',
|
||||
'copy:styles'
|
||||
],
|
||||
dist: [
|
||||
'compass:dist',
|
||||
'copy:styles',
|
||||
'imagemin',
|
||||
'svgmin',
|
||||
'htmlmin'
|
||||
]
|
||||
},
|
||||
karma: {
|
||||
unit: {
|
||||
configFile: 'karma.conf.js',
|
||||
singleRun: true
|
||||
}
|
||||
},
|
||||
cdnify: {
|
||||
dist: {
|
||||
html: ['<%= yeoman.dist %>/*.html']
|
||||
}
|
||||
},
|
||||
ngmin: {
|
||||
dist: {
|
||||
files: [{
|
||||
expand: true,
|
||||
cwd: '<%= yeoman.dist %>/scripts',
|
||||
src: '*.js',
|
||||
dest: '<%= yeoman.dist %>/scripts'
|
||||
}]
|
||||
}
|
||||
},
|
||||
uglify: {
|
||||
dist: {
|
||||
files: {
|
||||
'<%= yeoman.dist %>/scripts/scripts.js': [
|
||||
'<%= yeoman.dist %>/scripts/scripts.js'
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
grunt.registerTask('server', function (target) {
|
||||
if (target === 'dist') {
|
||||
return grunt.task.run(['build', 'connect:dist:keepalive']);
|
||||
}
|
||||
|
||||
grunt.task.run([
|
||||
'clean:server',
|
||||
'concurrent:server',
|
||||
'autoprefixer',
|
||||
'configureProxies',
|
||||
'connect:livereload',
|
||||
'watch'
|
||||
]);
|
||||
});
|
||||
|
||||
grunt.registerTask('test', [
|
||||
'clean:server',
|
||||
'concurrent:test',
|
||||
'autoprefixer',
|
||||
'connect:test',
|
||||
'karma'
|
||||
]);
|
||||
|
||||
grunt.registerTask('build', [
|
||||
'clean:dist',
|
||||
'useminPrepare',
|
||||
'concurrent:dist',
|
||||
'autoprefixer',
|
||||
'concat',
|
||||
'copy:dist',
|
||||
'cdnify',
|
||||
'ngmin',
|
||||
'cssmin',
|
||||
'uglify',
|
||||
'rev',
|
||||
'usemin'
|
||||
]);
|
||||
|
||||
grunt.registerTask('default', [
|
||||
'jshint',
|
||||
'test',
|
||||
'build'
|
||||
]);
|
||||
};
|
18
bower.json
Normal file
18
bower.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "jhipster",
|
||||
"version": "0.0.0",
|
||||
"dependencies": {
|
||||
"sass-bootstrap": "~3.0.0",
|
||||
"modernizr": "~2.6.2",
|
||||
"jquery": "~1.10.2",
|
||||
"angular": "~1.0.7",
|
||||
"json3": "~3.2.4",
|
||||
"angular-resource": "~1.0.7",
|
||||
"angular-cookies": "~1.0.7",
|
||||
"angular-sanitize": "~1.0.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"angular-mocks": "~1.0.7",
|
||||
"angular-scenario": "~1.0.7"
|
||||
}
|
||||
}
|
36
package.json
Normal file
36
package.json
Normal file
@ -0,0 +1,36 @@
|
||||
{
|
||||
"name": "jhipster",
|
||||
"version": "0.0.0",
|
||||
"description": "Description for jhipster",
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"grunt": "~0.4.1",
|
||||
"grunt-contrib-copy": "~0.4.1",
|
||||
"grunt-contrib-concat": "~0.3.0",
|
||||
"grunt-contrib-uglify": "~0.2.0",
|
||||
"grunt-contrib-compass": "~0.5.0",
|
||||
"grunt-contrib-jshint": "~0.6.3",
|
||||
"grunt-contrib-cssmin": "~0.6.0",
|
||||
"grunt-contrib-connect": "~0.5.0",
|
||||
"grunt-contrib-clean": "~0.5.0",
|
||||
"grunt-contrib-htmlmin": "~0.1.3",
|
||||
"grunt-bower-install": "~0.5.0",
|
||||
"grunt-contrib-imagemin": "~0.2.0",
|
||||
"grunt-contrib-watch": "~0.5.2",
|
||||
"grunt-rev": "~0.1.0",
|
||||
"grunt-autoprefixer": "~0.2.0",
|
||||
"grunt-usemin": "~2.0.0",
|
||||
"grunt-modernizr": "~0.3.0",
|
||||
"grunt-svgmin": "~0.2.0",
|
||||
"grunt-rev": "~0.1.0",
|
||||
"grunt-concurrent": "~0.3.0",
|
||||
"load-grunt-tasks": "~0.1.0",
|
||||
"grunt-google-cdn": "~0.2.0",
|
||||
"grunt-ngmin": "~0.0.2",
|
||||
"time-grunt": "~0.1.1",
|
||||
"grunt-connect-proxy": "~0.1.6"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.8.0"
|
||||
}
|
||||
}
|
521
pom.xml
Normal file
521
pom.xml
Normal file
@ -0,0 +1,521 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.mycompany.myapp</groupId>
|
||||
<artifactId>jhipster</artifactId>
|
||||
<version>0.1-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
<description></description>
|
||||
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>development</id>
|
||||
<activation>
|
||||
<activeByDefault>true</activeByDefault>
|
||||
</activation>
|
||||
<properties>
|
||||
<!-- Spring profile to use -->
|
||||
<spring.profiles.active>development</spring.profiles.active>
|
||||
<!-- i18n resource files reloading -->
|
||||
<message.reloading.enabled>true</message.reloading.enabled>
|
||||
<!-- log configuration -->
|
||||
<logback.loglevel>DEBUG</logback.loglevel>
|
||||
<!-- ehcache configuration -->
|
||||
<ehcache.maxBytesLocalHeap>64M</ehcache.maxBytesLocalHeap>
|
||||
<!-- development database configuration -->
|
||||
<datasource.driverclassname>com.mysql.jdbc.Driver</datasource.driverclassname>
|
||||
<datasource.url>jdbc:mysql://localhost:3306/jhipster</datasource.url>
|
||||
<datasource.username>root</datasource.username>
|
||||
<datasource.password></datasource.password>
|
||||
<datasource.initialSize>2</datasource.initialSize>
|
||||
<datasource.minIdle>1</datasource.minIdle>
|
||||
<datasource.maxIdle>2</datasource.maxIdle>
|
||||
<datasource.maxActive>5</datasource.maxActive>
|
||||
<hibernate.dialect>org.hibernate.dialect.MySQLInnoDBDialect</hibernate.dialect>
|
||||
<hibernate.show_sql>true</hibernate.show_sql>
|
||||
<hibernate.generate_statistics>true</hibernate.generate_statistics>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<version>5.1.26</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>production</id>
|
||||
<properties>
|
||||
<!-- Spring profile to use -->
|
||||
<spring.profiles.active>production</spring.profiles.active>
|
||||
<!-- i18n resource files reloading -->
|
||||
<message.reloading.enabled>false</message.reloading.enabled>
|
||||
<!-- log configuration -->
|
||||
<logback.loglevel>WARN</logback.loglevel>
|
||||
<logback.appender>CONSOLE</logback.appender>
|
||||
<!-- ehcache configuration -->
|
||||
<ehcache.maxBytesLocalHeap>256M</ehcache.maxBytesLocalHeap>
|
||||
<!-- production database configuration -->
|
||||
<datasource.driverclassname>com.mysql.jdbc.Driver</datasource.driverclassname>
|
||||
<datasource.url>jdbc:mysql://localhost:3306/jhipster</datasource.url>
|
||||
<datasource.username>root</datasource.username>
|
||||
<datasource.password></datasource.password>
|
||||
<datasource.initialSize>4</datasource.initialSize>
|
||||
<datasource.minIdle>4</datasource.minIdle>
|
||||
<datasource.maxIdle>10</datasource.maxIdle>
|
||||
<datasource.maxActive>20</datasource.maxActive>
|
||||
<hibernate.dialect>org.hibernate.dialect.MySQLInnoDBDialect</hibernate.dialect>
|
||||
<hibernate.show_sql>false</hibernate.show_sql>
|
||||
<hibernate.generate_statistics>false</hibernate.generate_statistics>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<version>5.1.26</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</profile>
|
||||
</profiles>
|
||||
|
||||
<properties>
|
||||
<!-- Maven build properties -->
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<java.version>1.6</java.version>
|
||||
|
||||
<!-- Librairies versions -->
|
||||
<spring.version>3.2.3.RELEASE</spring.version>
|
||||
<spring.security.version>3.1.3.RELEASE</spring.security.version>
|
||||
<hibernate.version>4.2.6.Final</hibernate.version>
|
||||
<codahale.metrics.version>3.0.1</codahale.metrics.version>
|
||||
</properties>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>sonatype-releases</id>
|
||||
<name>Sonatype Releases Repository</name>
|
||||
<url>http://oss.sonatype.org/content/repositories/releases/</url>
|
||||
</repository>
|
||||
|
||||
</repositories>
|
||||
<prerequisites>
|
||||
<maven>3.0.0</maven>
|
||||
</prerequisites>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.codahale.metrics</groupId>
|
||||
<artifactId>metrics-core</artifactId>
|
||||
<version>${codahale.metrics.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.codahale.metrics</groupId>
|
||||
<artifactId>metrics-ehcache</artifactId>
|
||||
<version>${codahale.metrics.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.codahale.metrics</groupId>
|
||||
<artifactId>metrics-graphite</artifactId>
|
||||
<version>${codahale.metrics.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.codahale.metrics</groupId>
|
||||
<artifactId>metrics-jvm</artifactId>
|
||||
<version>${codahale.metrics.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.codahale.metrics</groupId>
|
||||
<artifactId>metrics-servlet</artifactId>
|
||||
<version>${codahale.metrics.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.codahale.metrics</groupId>
|
||||
<artifactId>metrics-servlets</artifactId>
|
||||
<version>${codahale.metrics.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.datatype</groupId>
|
||||
<artifactId>jackson-datatype-json-org</artifactId>
|
||||
<version>2.1.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.datatype</groupId>
|
||||
<artifactId>jackson-datatype-hppc</artifactId>
|
||||
<version>2.1.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.ryantenney.metrics</groupId>
|
||||
<artifactId>metrics-spring</artifactId>
|
||||
<version>3.0.0-RC2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.datatype</groupId>
|
||||
<artifactId>jackson-datatype-joda</artifactId>
|
||||
<version>2.1.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-fileupload</groupId>
|
||||
<artifactId>commons-fileupload</artifactId>
|
||||
<version>1.2.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<version>2.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-lang</groupId>
|
||||
<artifactId>commons-lang</artifactId>
|
||||
<version>2.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.inject</groupId>
|
||||
<artifactId>javax.inject</artifactId>
|
||||
<version>1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
<version>3.0.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>jstl</artifactId>
|
||||
<version>1.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.validation</groupId>
|
||||
<artifactId>validation-api</artifactId>
|
||||
<version>1.1.0.Final </version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>joda-time</groupId>
|
||||
<artifactId>joda-time</artifactId>
|
||||
<version>2.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>joda-time</groupId>
|
||||
<artifactId>joda-time-hibernate</artifactId>
|
||||
<version>1.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-core</artifactId>
|
||||
<version>1.0.13</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-classic</artifactId>
|
||||
<version>1.0.13</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.sf.ehcache</groupId>
|
||||
<artifactId>ehcache-web</artifactId>
|
||||
<version>2.0.4</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tomcat</groupId>
|
||||
<artifactId>tomcat-jdbc</artifactId>
|
||||
<version>7.0.42</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.aspectj</groupId>
|
||||
<artifactId>aspectjrt</artifactId>
|
||||
<version>1.7.3</version>
|
||||
<type>jar</type>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.aspectj</groupId>
|
||||
<artifactId>aspectjweaver</artifactId>
|
||||
<version>1.7.3</version>
|
||||
<type>jar</type>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hibernate</groupId>
|
||||
<artifactId>hibernate-core</artifactId>
|
||||
<version>${hibernate.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hibernate</groupId>
|
||||
<artifactId>hibernate-entitymanager</artifactId>
|
||||
<version>${hibernate.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hibernate</groupId>
|
||||
<artifactId>hibernate-ehcache</artifactId>
|
||||
<version>${hibernate.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hibernate</groupId>
|
||||
<artifactId>hibernate-validator</artifactId>
|
||||
<version>5.0.1.Final</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.liquibase</groupId>
|
||||
<artifactId>liquibase-core</artifactId>
|
||||
<version>3.0.7</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
<version>1.7.5</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>jcl-over-slf4j</artifactId>
|
||||
<version>1.7.5</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-aop</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-beans</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context-support</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-core</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-expression</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-orm</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-tx</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-web</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-webmvc</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.data</groupId>
|
||||
<artifactId>spring-data-jpa</artifactId>
|
||||
<version>1.4.1.RELEASE</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-core</artifactId>
|
||||
<version>${spring.security.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-config</artifactId>
|
||||
<version>${spring.security.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-crypto</artifactId>
|
||||
<version>${spring.security.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-web</artifactId>
|
||||
<version>${spring.security.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Test dependencies -->
|
||||
<dependency>
|
||||
<groupId>com.jayway.jsonpath</groupId>
|
||||
<artifactId>json-path</artifactId>
|
||||
<version>0.8.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hsqldb</groupId>
|
||||
<artifactId>hsqldb</artifactId>
|
||||
<version>2.3.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-test</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hamcrest</groupId>
|
||||
<artifactId>hamcrest-core</artifactId>
|
||||
<version>1.3</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hamcrest</groupId>
|
||||
<artifactId>hamcrest-library</artifactId>
|
||||
<version>1.3</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.11</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jayway.awaitility</groupId>
|
||||
<artifactId>awaitility</artifactId>
|
||||
<version>1.3.5</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-all</artifactId>
|
||||
<version>1.9.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<finalName>root</finalName>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<filtering>true</filtering>
|
||||
<includes>
|
||||
<include>**/*</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.0</version>
|
||||
<configuration>
|
||||
<source>1.6</source>
|
||||
<target>1.6</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-enforcer-plugin</artifactId>
|
||||
<version>1.2</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>enforce-versions</id>
|
||||
<goals>
|
||||
<goal>enforce</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<rules>
|
||||
<requireMavenVersion>
|
||||
<version>[3.0.0,)</version>
|
||||
</requireMavenVersion>
|
||||
<requireJavaVersion>
|
||||
<version>[1.6.0,)</version>
|
||||
</requireJavaVersion>
|
||||
</rules>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>2.14</version>
|
||||
<configuration>
|
||||
<argLine>-XX:MaxPermSize=128m -Xmx256m</argLine>
|
||||
<!-- Force alphabetical order to have a reproducible build -->
|
||||
<runOrder>alphabetical</runOrder>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>2.3</version>
|
||||
<configuration>
|
||||
<webResources>
|
||||
<resource>
|
||||
<directory>src/main/webapp/WEB-INF</directory>
|
||||
<targetPath>WEB-INF</targetPath>
|
||||
<includes>
|
||||
<include>web.xml</include>
|
||||
</includes>
|
||||
<filtering>true</filtering>
|
||||
</resource>
|
||||
</webResources>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-maven-plugin</artifactId>
|
||||
<version>9.1.0.RC0</version>
|
||||
<configuration>
|
||||
<scanIntervalSeconds>1</scanIntervalSeconds>
|
||||
<stopKey>stop-jetty</stopKey>
|
||||
<stopPort>9999</stopPort>
|
||||
<systemProperties>
|
||||
<systemProperty>
|
||||
<name>jetty.port</name>
|
||||
<value>8080</value>
|
||||
</systemProperty>
|
||||
<systemProperty>
|
||||
<name>spring.profiles.active</name>
|
||||
<value>development</value>
|
||||
</systemProperty>
|
||||
</systemProperties>
|
||||
<jvmArgs>-javaagent:spring_loaded/springloaded-1.1.4.jar -noverify</jvmArgs>
|
||||
<webApp>
|
||||
<contextPath>/</contextPath>
|
||||
</webApp>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.tomcat.maven</groupId>
|
||||
<artifactId>tomcat7-maven-plugin</artifactId>
|
||||
<version>2.1</version>
|
||||
<configuration>
|
||||
<path>/</path>
|
||||
<contextReloadable>true</contextReloadable>
|
||||
<protocol>org.apache.coyote.http11.Http11NioProtocol</protocol>
|
||||
<systemProperties>
|
||||
<spring.profiles.active>development</spring.profiles.active>
|
||||
</systemProperties>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-eclipse-plugin</artifactId>
|
||||
<version>2.9</version>
|
||||
<configuration>
|
||||
<downloadSources>true</downloadSources>
|
||||
<downloadJavadocs>true</downloadJavadocs>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>sonar-maven-plugin</artifactId>
|
||||
<version>2.0</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
BIN
spring_loaded/springloaded-1.1.4.jar
Normal file
BIN
spring_loaded/springloaded-1.1.4.jar
Normal file
Binary file not shown.
@ -0,0 +1,45 @@
|
||||
package com.mycompany.myapp.conf;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.context.annotation.*;
|
||||
import org.springframework.core.env.Environment;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.inject.Inject;
|
||||
import java.io.IOException;
|
||||
|
||||
@Configuration
|
||||
@PropertySource({"classpath:/META-INF/jhipster/jhipster.properties"})
|
||||
@ComponentScan(basePackages = {
|
||||
"com.mycompany.myapp.service",
|
||||
"com.mycompany.myapp.security"})
|
||||
@Import(value = {
|
||||
AsyncConfiguration.class,
|
||||
CacheConfiguration.class})
|
||||
@ImportResource("classpath:META-INF/spring/applicationContext-*.xml")
|
||||
public class ApplicationConfiguration {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(ApplicationConfiguration.class);
|
||||
|
||||
@Inject
|
||||
private Environment env;
|
||||
|
||||
/**
|
||||
* Initializes jhipster.
|
||||
* <p/>
|
||||
* Spring profiles can be configured with a system property -Dspring.profiles.active=your-active-profile
|
||||
* <p/>
|
||||
*/
|
||||
@PostConstruct
|
||||
public void initApplication() throws IOException {
|
||||
log.debug("Looking for Spring profiles...");
|
||||
if (env.getActiveProfiles().length == 0) {
|
||||
log.debug("No Spring profile configured, running with default configuration");
|
||||
} else {
|
||||
for (String profile : env.getActiveProfiles()) {
|
||||
log.debug("Detected Spring profile : {}", profile);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package com.mycompany.myapp.conf;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.scheduling.annotation.AsyncConfigurer;
|
||||
import org.springframework.scheduling.annotation.EnableAsync;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
@Configuration
|
||||
@EnableAsync
|
||||
@EnableScheduling
|
||||
public class AsyncConfiguration implements AsyncConfigurer {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(AsyncConfiguration.class);
|
||||
|
||||
@Override
|
||||
public Executor getAsyncExecutor() {
|
||||
log.debug("Creating Async Task Executor");
|
||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
||||
executor.setCorePoolSize(2);
|
||||
executor.setMaxPoolSize(50);
|
||||
executor.setQueueCapacity(10000);
|
||||
executor.setThreadNamePrefix("jhipster-Executor-");
|
||||
executor.initialize();
|
||||
return executor;
|
||||
}
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
package com.mycompany.myapp.conf;
|
||||
|
||||
import com.codahale.metrics.ehcache.InstrumentedEhcache;
|
||||
import net.sf.ehcache.Cache;
|
||||
import net.sf.ehcache.Ehcache;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.cache.CacheManager;
|
||||
import org.springframework.cache.annotation.EnableCaching;
|
||||
import org.springframework.cache.ehcache.EhCacheCacheManager;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import javax.annotation.PreDestroy;
|
||||
|
||||
@Configuration
|
||||
@EnableCaching
|
||||
public class CacheConfiguration {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(CacheConfiguration.class);
|
||||
|
||||
private net.sf.ehcache.CacheManager cacheManager;
|
||||
|
||||
@PreDestroy
|
||||
public void destroy() {
|
||||
log.info("Closing Ehcache");
|
||||
cacheManager.shutdown();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public CacheManager cacheManager() {
|
||||
log.debug("Starting Ehcache");
|
||||
cacheManager = net.sf.ehcache.CacheManager.create();
|
||||
|
||||
log.debug("Registring Ehcache Metrics gauges");
|
||||
Cache userCache = cacheManager.getCache("com.mycompany.myapp.domain.User");
|
||||
Ehcache decoratedStatusCache = InstrumentedEhcache.instrument(WebConfigurer.METRIC_REGISTRY, userCache);
|
||||
cacheManager.replaceCacheWithDecoratedCache(userCache, decoratedStatusCache);
|
||||
|
||||
Cache authoritiesCache = cacheManager.getCache("com.mycompany.myapp.domain.Authority");
|
||||
Ehcache decoratedAuthoritiesCache = InstrumentedEhcache.instrument(WebConfigurer.METRIC_REGISTRY, authoritiesCache);
|
||||
cacheManager.replaceCacheWithDecoratedCache(authoritiesCache, decoratedAuthoritiesCache);
|
||||
|
||||
Cache persistentTokenCache = cacheManager.getCache("com.mycompany.myapp.domain.PersistentToken");
|
||||
Ehcache decoratedPersistentTokenCache = InstrumentedEhcache.instrument(WebConfigurer.METRIC_REGISTRY, persistentTokenCache);
|
||||
cacheManager.replaceCacheWithDecoratedCache(persistentTokenCache, decoratedPersistentTokenCache);
|
||||
|
||||
EhCacheCacheManager ehCacheManager = new EhCacheCacheManager();
|
||||
ehCacheManager.setCacheManager(cacheManager);
|
||||
return ehCacheManager;
|
||||
}
|
||||
}
|
15
src/main/java/com/mycompany/myapp/conf/Constants.java
Normal file
15
src/main/java/com/mycompany/myapp/conf/Constants.java
Normal file
@ -0,0 +1,15 @@
|
||||
package com.mycompany.myapp.conf;
|
||||
|
||||
/**
|
||||
* Application constants.
|
||||
*/
|
||||
public final class Constants {
|
||||
|
||||
private Constants() {
|
||||
}
|
||||
|
||||
public static final String SPRING_PROFILE_DEVELOPMENT = "development";
|
||||
|
||||
public static final String SPRING_PROFILE_PRODUCTION = "production";
|
||||
|
||||
}
|
@ -0,0 +1,150 @@
|
||||
package com.mycompany.myapp.conf;
|
||||
|
||||
import org.apache.commons.lang.CharEncoding;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.context.MessageSource;
|
||||
import org.springframework.context.annotation.*;
|
||||
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.web.multipart.MultipartResolver;
|
||||
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
|
||||
import org.springframework.web.servlet.HandlerExceptionResolver;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
import org.springframework.web.servlet.View;
|
||||
import org.springframework.web.servlet.ViewResolver;
|
||||
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
|
||||
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
|
||||
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
|
||||
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
|
||||
import org.springframework.web.servlet.view.ContentNegotiatingViewResolver;
|
||||
import org.springframework.web.servlet.view.JstlView;
|
||||
import org.springframework.web.servlet.view.UrlBasedViewResolver;
|
||||
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Configuration
|
||||
@ComponentScan("com.mycompany.myapp.web")
|
||||
@EnableWebMvc
|
||||
@PropertySource({"classpath:/META-INF/jhipster/jhipster.properties"})
|
||||
@Import(value = {MetricsConfiguration.class})
|
||||
public class DispatcherServletConfiguration extends WebMvcConfigurerAdapter {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(DispatcherServletConfiguration.class);
|
||||
|
||||
// Cache for 1 month
|
||||
private static final int CACHE_PERIOD = 60 * 60 * 24 * 30;
|
||||
|
||||
// 10 Mo max file size
|
||||
private static final int MAX_UPLOAD_SIZE = 10 * 1000 * 1000;
|
||||
|
||||
@Inject
|
||||
private Environment env;
|
||||
|
||||
@Bean
|
||||
public ViewResolver contentNegotiatingViewResolver() {
|
||||
log.debug("Configuring the ContentNegotiatingViewResolver");
|
||||
ContentNegotiatingViewResolver viewResolver = new ContentNegotiatingViewResolver();
|
||||
List<ViewResolver> viewResolvers = new ArrayList<ViewResolver>();
|
||||
|
||||
UrlBasedViewResolver urlBasedViewResolver = new UrlBasedViewResolver();
|
||||
urlBasedViewResolver.setViewClass(JstlView.class);
|
||||
urlBasedViewResolver.setPrefix("/WEB-INF/pages/");
|
||||
urlBasedViewResolver.setSuffix(".jsp");
|
||||
viewResolvers.add(urlBasedViewResolver);
|
||||
|
||||
viewResolver.setViewResolvers(viewResolvers);
|
||||
|
||||
List<View> defaultViews = new ArrayList<View>();
|
||||
defaultViews.add(new MappingJackson2JsonView());
|
||||
viewResolver.setDefaultViews(defaultViews);
|
||||
|
||||
return viewResolver;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public SessionLocaleResolver localeResolver() {
|
||||
return new SessionLocaleResolver();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public LocaleChangeInterceptor localeChangeInterceptor() {
|
||||
log.debug("Configuring localeChangeInterceptor");
|
||||
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
|
||||
localeChangeInterceptor.setParamName("language");
|
||||
return localeChangeInterceptor;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public MessageSource messageSource() {
|
||||
log.debug("Loading MessageSources");
|
||||
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
|
||||
messageSource.setBasename("/WEB-INF/messages/messages");
|
||||
messageSource.setDefaultEncoding(CharEncoding.UTF_8);
|
||||
if ("true".equals(env.getProperty("message.reloading.enabled"))) {
|
||||
messageSource.setCacheSeconds(1);
|
||||
}
|
||||
return messageSource;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public MultipartResolver multipartResolver() {
|
||||
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
|
||||
multipartResolver.setMaxUploadSize(MAX_UPLOAD_SIZE);
|
||||
return multipartResolver;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
|
||||
log.debug("Creating requestMappingHandlerMapping");
|
||||
RequestMappingHandlerMapping requestMappingHandlerMapping = new RequestMappingHandlerMapping();
|
||||
requestMappingHandlerMapping.setUseSuffixPatternMatch(false);
|
||||
Object[] interceptors = {localeChangeInterceptor()};
|
||||
requestMappingHandlerMapping.setInterceptors(interceptors);
|
||||
return requestMappingHandlerMapping;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addResourceHandlers(ResourceHandlerRegistry registry) {
|
||||
log.debug("Adding static resource handlers");
|
||||
|
||||
registry.addResourceHandler("/scripts/**")
|
||||
.addResourceLocations("/scripts/")
|
||||
.setCachePeriod(CACHE_PERIOD);
|
||||
|
||||
registry.addResourceHandler("/styles/**")
|
||||
.addResourceLocations("/styles/")
|
||||
.setCachePeriod(CACHE_PERIOD);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {
|
||||
exceptionResolvers.add(new HandlerExceptionResolver() {
|
||||
|
||||
@Override
|
||||
public ModelAndView resolveException(HttpServletRequest request,
|
||||
HttpServletResponse response,
|
||||
Object handler,
|
||||
Exception ex) {
|
||||
try {
|
||||
log.error("An error has occured: {}", ex.getMessage());
|
||||
if (log.isDebugEnabled()) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
||||
return new ModelAndView();
|
||||
} catch (Exception handlerException) {
|
||||
log.warn("Handling of [{}] resulted in Exception", ex.getClass().getName(), handlerException);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,83 @@
|
||||
package com.mycompany.myapp.conf;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import com.codahale.metrics.graphite.Graphite;
|
||||
import com.codahale.metrics.graphite.GraphiteReporter;
|
||||
import com.codahale.metrics.health.HealthCheckRegistry;
|
||||
import com.codahale.metrics.jvm.*;
|
||||
import com.mycompany.myapp.conf.metrics.DatabaseHealthCheck;
|
||||
import com.ryantenney.metrics.spring.config.annotation.EnableMetrics;
|
||||
import com.ryantenney.metrics.spring.config.annotation.MetricsConfigurerAdapter;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.cache.CacheManager;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.env.Environment;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.inject.Inject;
|
||||
import javax.sql.DataSource;
|
||||
import java.lang.management.ManagementFactory;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static com.mycompany.myapp.conf.WebConfigurer.HEALTH_CHECK_REGISTRY;
|
||||
import static com.mycompany.myapp.conf.WebConfigurer.METRIC_REGISTRY;
|
||||
|
||||
@Configuration
|
||||
@EnableMetrics(proxyTargetClass = true)
|
||||
public class MetricsConfiguration extends MetricsConfigurerAdapter {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(MetricsConfiguration.class);
|
||||
|
||||
@Inject
|
||||
private Environment env;
|
||||
|
||||
@Inject
|
||||
private DataSource dataSource;
|
||||
|
||||
@Inject
|
||||
private CacheManager cacheManager;
|
||||
|
||||
@Override
|
||||
public MetricRegistry getMetricRegistry() {
|
||||
return METRIC_REGISTRY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HealthCheckRegistry getHealthCheckRegistry() {
|
||||
return HEALTH_CHECK_REGISTRY;
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
log.debug("Registring JVM gauges");
|
||||
METRIC_REGISTRY.register("jvm.memory", new MemoryUsageGaugeSet());
|
||||
METRIC_REGISTRY.register("jvm.garbage", new GarbageCollectorMetricSet());
|
||||
METRIC_REGISTRY.register("jvm.threads", new ThreadStatesGaugeSet());
|
||||
METRIC_REGISTRY.register("jvm.files", new FileDescriptorRatioGauge());
|
||||
METRIC_REGISTRY.register("jvm.buffers", new BufferPoolMetricSet(ManagementFactory.getPlatformMBeanServer()));
|
||||
|
||||
log.debug("Initializing Metrics healthchecks");
|
||||
HEALTH_CHECK_REGISTRY.register("database", new DatabaseHealthCheck(dataSource));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configureReporters(MetricRegistry metricRegistry) {
|
||||
if (env.acceptsProfiles(Constants.SPRING_PROFILE_PRODUCTION)) {
|
||||
String graphiteHost = env.getProperty("metrics.graphite.host");
|
||||
if (graphiteHost != null) {
|
||||
log.info("Initializing Metrics Graphite reporting");
|
||||
Integer graphitePort = env.getProperty("metrics.graphite.port", Integer.class);
|
||||
Graphite graphite = new Graphite(new InetSocketAddress(graphiteHost, graphitePort));
|
||||
GraphiteReporter reporter = GraphiteReporter.forRegistry(METRIC_REGISTRY)
|
||||
.convertRatesTo(TimeUnit.SECONDS)
|
||||
.convertDurationsTo(TimeUnit.MILLISECONDS)
|
||||
.build(graphite);
|
||||
reporter.start(1, TimeUnit.MINUTES);
|
||||
} else {
|
||||
log.warn("Graphite server is not configured, unable to send any data to Graphite");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
134
src/main/java/com/mycompany/myapp/conf/WebConfigurer.java
Normal file
134
src/main/java/com/mycompany/myapp/conf/WebConfigurer.java
Normal file
@ -0,0 +1,134 @@
|
||||
package com.mycompany.myapp.conf;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import com.codahale.metrics.health.HealthCheckRegistry;
|
||||
import com.codahale.metrics.servlet.InstrumentedFilter;
|
||||
import com.codahale.metrics.servlets.AdminServlet;
|
||||
import com.codahale.metrics.servlets.HealthCheckServlet;
|
||||
import com.codahale.metrics.servlets.MetricsServlet;
|
||||
import net.sf.ehcache.constructs.web.filter.GzipFilter;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.web.context.WebApplicationContext;
|
||||
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
|
||||
import org.springframework.web.context.support.WebApplicationContextUtils;
|
||||
import org.springframework.web.filter.DelegatingFilterProxy;
|
||||
import org.springframework.web.servlet.DispatcherServlet;
|
||||
|
||||
import javax.servlet.*;
|
||||
import java.util.EnumSet;
|
||||
|
||||
/**
|
||||
* Configuration of web application with Servlet 3.0 APIs.
|
||||
*/
|
||||
public class WebConfigurer implements ServletContextListener {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(WebConfigurer.class);
|
||||
|
||||
public static final MetricRegistry METRIC_REGISTRY = new MetricRegistry();
|
||||
|
||||
public static final HealthCheckRegistry HEALTH_CHECK_REGISTRY = new HealthCheckRegistry();
|
||||
|
||||
@Override
|
||||
public void contextInitialized(ServletContextEvent sce) {
|
||||
ServletContext servletContext = sce.getServletContext();
|
||||
log.info("Web application configuration");
|
||||
|
||||
log.debug("Configuring Spring root application context");
|
||||
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
|
||||
rootContext.register(ApplicationConfiguration.class);
|
||||
rootContext.refresh();
|
||||
|
||||
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, rootContext);
|
||||
|
||||
EnumSet<DispatcherType> disps = EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.ASYNC);
|
||||
|
||||
initSpring(servletContext, rootContext);
|
||||
initSpringSecurity(servletContext, disps);
|
||||
initMetrics(servletContext, disps);
|
||||
initGzip(servletContext, disps);
|
||||
|
||||
log.debug("Web application fully configured");
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the GZip filter.
|
||||
*/
|
||||
private void initGzip(ServletContext servletContext, EnumSet<DispatcherType> disps) {
|
||||
log.debug("Registering GZip Filter");
|
||||
FilterRegistration.Dynamic gzipFilter = servletContext.addFilter("gzipFilter",
|
||||
new GzipFilter());
|
||||
|
||||
gzipFilter.addMappingForUrlPatterns(disps, true, "/app/*");
|
||||
gzipFilter.addMappingForUrlPatterns(disps, true, "/scripts/*");
|
||||
gzipFilter.addMappingForUrlPatterns(disps, true, "/styles/*");
|
||||
gzipFilter.addMappingForUrlPatterns(disps, true, "*.html");
|
||||
gzipFilter.setAsyncSupported(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes Spring and Spring MVC.
|
||||
*/
|
||||
private ServletRegistration.Dynamic initSpring(ServletContext servletContext, AnnotationConfigWebApplicationContext rootContext) {
|
||||
log.debug("Configuring Spring Web application context");
|
||||
AnnotationConfigWebApplicationContext dispatcherServletConfiguration = new AnnotationConfigWebApplicationContext();
|
||||
dispatcherServletConfiguration.setParent(rootContext);
|
||||
dispatcherServletConfiguration.register(DispatcherServletConfiguration.class);
|
||||
|
||||
log.debug("Registering Spring MVC Servlet");
|
||||
ServletRegistration.Dynamic dispatcherServlet = servletContext.addServlet("dispatcher", new DispatcherServlet(
|
||||
dispatcherServletConfiguration));
|
||||
dispatcherServlet.addMapping("/app/*");
|
||||
dispatcherServlet.setLoadOnStartup(1);
|
||||
dispatcherServlet.setAsyncSupported(true);
|
||||
return dispatcherServlet;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes Spring Security.
|
||||
*/
|
||||
private void initSpringSecurity(ServletContext servletContext, EnumSet<DispatcherType> |