|
@ -7,8 +7,11 @@
|
|||
|
||||
# Eclipse
|
||||
.settings/
|
||||
*.project
|
||||
*.classpath
|
||||
.prefs
|
||||
*.prefs
|
||||
.metadata/
|
||||
|
||||
# Intellij
|
||||
.idea/
|
||||
|
@ -23,3 +26,4 @@ log/
|
|||
target/
|
||||
|
||||
spring-openid/src/main/resources/application.properties
|
||||
.recommenders/
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
RemoteSystemsTempFiles/
|
||||
.classpath
|
||||
.project
|
||||
.settings/
|
||||
bin/
|
||||
.metadata/
|
||||
docs/*.autosave
|
||||
docs/*.autosave
|
||||
.recommenders/
|
||||
build/
|
||||
.gradle/
|
||||
.DS_Store
|
|
@ -0,0 +1,43 @@
|
|||
apply plugin: 'java'
|
||||
apply plugin: 'eclipse'
|
||||
|
||||
allprojects {
|
||||
apply plugin: 'java'
|
||||
sourceCompatibility = 1.6
|
||||
targetCompatibility = 1.6
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
resources.srcDirs = ["src/main/java","src/main/resources"]
|
||||
}
|
||||
test {
|
||||
resources.srcDirs = ["src/main/java", "src/main/resources", "src/test/resources"]
|
||||
}
|
||||
}
|
||||
|
||||
configurations {
|
||||
compile
|
||||
}
|
||||
|
||||
test {
|
||||
testLogging {
|
||||
events 'started', 'passed'
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
testCompile('junit:junit:4.11')
|
||||
testCompile('org.mockito:mockito-all:1.10.19')
|
||||
testCompile group: 'org.springframework', name: 'spring-test', version: '4.2.6.RELEASE'
|
||||
testCompile group: 'org.springframework', name: 'spring-core', version: '4.2.6.RELEASE'
|
||||
testCompile group: 'org.springframework', name: 'spring-beans', version: '4.2.6.RELEASE'
|
||||
testCompile group: 'org.springframework', name: 'spring-context', version: '4.2.6.RELEASE'
|
||||
testCompile group: 'javax.inject', name: 'javax.inject', version: '1'
|
||||
|
||||
testRuntime('junit:junit:4.11')
|
||||
}
|
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 23 KiB |
|
@ -0,0 +1 @@
|
|||
<mxfile userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36" version="5.5.1.6" editor="www.draw.io" type="device"><diagram>7Vjvb+I4EP1rkO4+7KkhhW0/8qt3J3V1Velq7z5VbmKIb50M55hS9q/fGXtMEgLXrprthwqEEH6ZOJ5573nAvXiSP/1uxCr7BKnUvf5Z+tSLp71+/6If4ycBWw8MBpceWBqVeiiqgLn6Jhk8Y3StUlk2Ai2AtmrVBBMoCpnYBiaMgU0zbAG6+dSVWIYnVsA8EbqNflGpzUJawwr/Q6plFp4cDTm/B5F8XRpYF/y8Xj9euJe/nIswFydaZiKFTQ2KZ1hWA4Az07f8aSI1lTaUzd93deTqbt1GFry2Z24I67DbkLtMsRQ8BGMzWEIh9KxCxy4/STOc4SizucavEX7Fh5rt34y7wT80+G3ghumImKFZV7K4y1Th0SuFK/K3/Cut3bIaxNoCQtUKrgFW/By/Zlro0bQZKmFtEo7CsROSMEvJUR93JUclS8glLhlDjNTCqsfm7II1tdzF8a2YlqC7QsAKVGHL2sw3BGAAuyO6HPgZ2Rz9yC0jcIRf/IxhVFtaBTkeD3PKeT4KveYMrpTU6QgLulFGplOZQ4v1cqNyLQqit0boAgobtEBjodUSaZsmWGdpEHiUxir0zYgvWOJonGRKp9diC2uqc2nRFGE0zsCobzitCM/Ay8Yy6WiwesSc7mRtGFlizE2gmO700LUoCaCYBLQWq1I97BacI9mqGIO1kHNQyJR0NwENmAYWINg0iIsSk4GwI/JqC4dvCO5mgmNmZFNtJfGAQ7LaNnJ5cVxpNXX8L/m88dbI/0AbIAlgKtF3qSwSXNYIwZF5UNYIs61d2JcF1sCRVkmitAa+ylC4ApxkFrVaMhSkouWCZjgslHIlElUsr13M9LxCbrkqBG0yZeUccVrTBvsNbQs430K73SRTKa7dbUtWWOG5J6LZh5jHYIxvLPiEtqIB5jXBMVIYxvimcGMnUGB+guwaTyUKayNJXC/ThGO5rYngcu4dz4kgxL1GBOctEbSI1Wrf657Y0O6c+3+Y1Ry5cC2CabxzW/YHN32D6rhNNUH7FGrxIPUNlMoqoPmNj92j9g3YG7zQwh04mJtDgzxMYd/D958+z+/ux7P70ee7v778eTub3k/AGPw1pNnfj4BTngz9syQxZPrfwtA8RU0TL9m8Tz29w54+PG829egje73GfxQ00ejqjL2Gf/8Dcb+ru93Re31uDZrs5PZXuN157Efa90G2u3A7C+vUvjtj70D7PsheB+2bDwJa7duC9+gvv54c+yacH+jPP82xEa+uxvqt/G+N/7bdOcAzDLued7SOVCo6DKG+uNeyX0I1e5h47aALRhfNLrj7q1ur8sEid9AEo/bBRjjleSfVHfJJ0O43xiWPa9UNley8uu2Tg3dW3eiCBRSqG/Nfre6ri8PqDNcf4VXn5PHsOw==</diagram></mxfile>
|
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 19 KiB |
|
@ -0,0 +1 @@
|
|||
<mxfile userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36" version="5.5.1.6" editor="www.draw.io" type="device"><diagram>7Vhdb9s4EPw1fuwhtqK0eYw/ctdDeijqHO7uyWAkWmJLcX0UFcf99d2llpZkKUiKOHkobBiGOVx+zcxybY2iWfHwuxWb/BOkUo8mZ+nDKJqPJpMPkwg/CdjVQBxf1kBmVVpD4wZYqu+SwTNGK5XKshPoALRTmy6YgDEycR1MWAvbbtgadHfVjcjCig2wTITuo/+o1OXhWBcN/odUWR5WHl/w+e5E8i2zUBlebzSJ1v5VdxcizMUHLXORwrYFRQuk1QLgzPSteJhJTdQG2upx14/07vdtpeG9PTEg7MPtwtllilRwE6zLIQMj9KJBp/58kmY4w1buCo1fx/gVF7W7fxn3jf+o8Vvsm+kVKUOzbqS5zZWp0WuFO6qHfJXO7dgNonKAULODG4ANr1PvmTb66LEZKqGyCUdh2xtJ2Exy1Ps95ehkCYXELWOIlVo4dd+dXbCnsn1cwyt+YWqHaeal74WueNJrJXX60XxF985lAT0Vyq0qtDBEd4vgNRgXtKG20CpDGucJnltaBO6ldQp9fMUdjjibJrnS6Y3YQUXnLh2aNLSmOVj1HacVYQ3sto5FQMO3I5Y0krWyssSYz4FyGllDN6IkgGIS0FpsSnW333CB5CszBeeg4KBwUvLBDDTgMZCAkDZBbDqY5OvlMbn7QoYB7HK+jUJz26R2FDOWt9P6gsGXSM83YUv6d9TrlR/PJaZCKk2CO7tC+MreKWeF3bU6Dp2BNHjdGleUzsI3Gbgz4F2zbtHJUHCLlmuaYdgr5UYkymQ3PmZ+3iBfmBiCtrlycok47WmLJYAyFedba5/guUpx7/6mcMKJWn7SegPKOE9mPMU30juj2yHGc82wjSqGNr4p3LoZGDyfwHE4TKK3tpL89Txb+Lzr24J9EK7zp3wQ4l5ig/OeDXrCanWY7rWwoQL5C+CnVS1QC39rs4y3/hZ956fvSB31pSboUEIt7qT+DKVyCmh+W8ceSPsG6sXM4FPqfXi5ePGAeHiEszVd4k2qrj79vbxdTRerj3/9uZjdLuarZZUksizXldac4feAk55S+rVMEW7st0hpnqLliudc36fCfsTCHr/vVvaIk70l/76It+W/PEJh978de4XdX491qi+dxRw7JfsLkt2n2M/U70G1j5HsbKxT/T6aegP1e1C9I9Rv/nPeq98OOEdP+foWig8U51fL1zHvrqX5F/l/pbCUPUNhX/Ae5ZGooscTVBQP6vVzpOYMJl2PUALPw88bJvmS/3C2SB7k+AgVcNx/rBEeu/wi5EYHvy8u+hUnEHl0cvsPDn4xcuMD58avRi42m0eqvq/12Dpa/AA=</diagram></mxfile>
|
After Width: | Height: | Size: 23 KiB |
|
@ -0,0 +1 @@
|
|||
<mxfile userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36" version="5.5.1.6" editor="www.draw.io" type="device"><diagram>7VhZbxs3EP41AtqHFDqydvOoy20KJwgiF2meDHp3pGXC5ahcyrLy6zPkDrWnYQVe5yGQIAjit8Njvm8OiYPJPHv4y4ht+g4TUIPxMHkYTBaD8fjP8YQ+HXAogCh6UwAbI5MCGpXASn4DBoeM7mQCec3QIiort3UwRq0htjVMGIP7utkaVX3XrdiEHUtgFQvVRj/JxKbBrYsS/xvkJg07jy7YvzsRf90Y3GnebzCerP2reJyJsBY7mqciwX0FmiyJVoNIK7tv2cMclKM20FbMu3rk6fHcBjSf7YkJ4Rz2EHyHhKjgIRqb4ga1UMsSnXn/wK0wpFFqM0VfR/SVNjWH/xj3g89u8Efkh8nUKeNW3YK+SaUu0CtJJyqmfAFrDxwNYmeRoPIE14hb3qc4szvoo24zlOPOxGxFYx9IwmyArS6PlFMkA2ZARyYTA0pYeV9fXXBMbY52Ja/0hantppm3vhdqx4teSVDJ7PBeZPBWf6EYXkCGLS3yvcyU0I70Cs1r1DYo5MZCyQ2RuYjJezAE3IOxkqJ5yg+sY24Wp1Il1+KAO+d9bilUw2iWopHfaFkR9qDHxrIUFPZVi5WbyYoZyMnmQyDezSyga5E7wNnEqJTY5vLueOCMJJB6htZixkbBUxcNc1RIbhABIXmC5M4x4CLzmOhtOUNVKiZwSQqRvy/ze3LJOqWV3H7Dds+Rn6thRf5XNNSkfbIASoYEdEzHmhI4NXfSGmEOlQfNqCAKvGZlROTW4FcIvGn0EbOuUMlQiBQFa7dCd5zkWxFLvbn2NovXJfKRWXHQPpUWVoS7M+2pCbhcpfXWyqd4KhM6u68VVlhRSO903qLU1lMZzehN5M5dfYjIrzmNScEwprczN3aOmvwTNI+mAcXVHlxsnRYSXtF2SHAQhIL+VBAEu+cEwetWELSEVbKZ6oWwoQf55P9hVTPSwtdtlvHG19FXfvma1JO21A5qSqjEHagPmEsr0a1vCtuGtD9BvYgZfEo9TvzniBd1iEcuNHP49t2/q5vb2fL27ft/lvOb5eJ2jsZQdVec3itriN1zRr9YTFycWNb7yGheohIUn8FONdoUzCl1/Nzde+zuUWjUob+P2rX9+LO71uC5Oz8nEvzvyFaD94XynPc95b2X80c6eafafeQ995NzJ+9NvY5O3qleD52c/6i3OrnFIkd/+/2csT9F845O/WIZO+LTVVT/CP/vJHWzExT2Pe9RHh1V7rLC9cVGyz5Fas5hp2sPXXDU7IIRp0yF5UB8jeQe/uWO2rcc4RbmF2E3umywe9FRt16K3fYlwi/G7njYYHfY0dP7YZeG5R2rf1a5x54svwM=</diagram></mxfile>
|
After Width: | Height: | Size: 36 KiB |
|
@ -0,0 +1 @@
|
|||
<mxfile userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36" version="5.5.1.6" editor="www.draw.io" type="device"><diagram>7Vptb+I4EP41le4+bEUIUPZjeenenrqn3tLT3X6qTGIS7zox5zil7K/fcTLTvHbhFOAkBEKAx87EM88zL7G4cqfRywfN1uEn5XN51e/5L1fu7KrfH/dd+LSCbS4Y9VAQaOHnIqcQLMR3jsIeSlPh86Sy0CgljVhXhZ6KY+6ZioxprTbVZSslq3dds4DuWAgWHpNN6d/CNyGZNSrkv3ERhHRnZ/Q+n1ky71ugVRrj/a767ip75dMRI11oaBIyX21KIncObtVKgWb7K3qZcmldS27Lr7t7Y/Z135rHuLcdF9A+zJZs5z64AodKm1AFKmZyXkgnmX3caujBKDSRhJ8O/ISb6u0/KM8GX+zgepgN/VuLjNW65vFjKOJceidgR/klX7kxW2QDS40CUbGDe6XWeJ+mlWh4olLtoR0wznjDdMBx1U0ushaWLkPPfOAq4rBlWKC5ZEY8V8nAkFPB67rCr/ADXdvuZtzLM5MpKr0TXPp/pkyKleD6Y/wVaDzjkWrAkWxEJFls/V7y9ErFhkCyY9ATgD9nHniEaxA8c20EEPoWJ4x13sQLhfTv2Val1iOJAbbSaBIqLb6DWkb3gGltEA1gfnnFwl6JoGmewJoHAsNemYvuWWIFdo2npGTrRCxfNxwBLCKeKGNUhIvIUkuIqZIKzAAHUPz8BHVrK8fU8waiNIt0x7REw00R4+4NysJKfKOwCwcwA5Y48M5mSL5iqQToISZ8Hnuws1sQ3+qlMJrpbWmiP5IWJ188w8/A/gQFIxZZYONlkn2xiPs1XdUVP1EMBpR0N4gILs5oUpAwMVp94wRVrDKSrkrooYjIKfnKaminZrJmnoiD+2zNbFBIPiMOVrQJheELkNs9baD02AwB+lYySyyh8MGiLEMZZljONkuttRKxybAbTuANaE5tVhqCXVMYA2loDG+7XJupisE+BtfBZRyovOGWzi0spODezUKkHZWRXbQbDLqzDlWUWNcAVop6dsmBpcqX5Zv/jGoEWGTVAmF8zLL3u0x9BWq3CbUV1SGUbMnlg0qEEcrq1/naGrQnQI+Q2oXeuDt4DhLlDKvzsFmdHYTi9OUZN1MJEjCjB6VZltLp06e/Fo9Pk/nTxz9+n08f57OnRep5PElWqZTbX37NU/ezArWX5Lln+HUt4WPs6XZFo4vltwtNMBpLNGmtppcG7ngN3IgenKiDQ1hL8DujFvjfH6CBQ6bVGrisLuWRvzAaQu4S+/vGPsVTl8apFW1a1wVtLN+Xxulg6A3Rg7vQO0DjhKcxjYJuVB6jVKsvEXtkzAnfU0Ssg23cobvl6xuoMqWO2bnuuWMSPHAtYKe2ZGNf/dpIL6WyNfaYXbRDh6OlNhq5f/oumjZT7o9iZUKuL23Siduk4bjaJrmDZhz2e20nXSTsRITmceelU+r2lLQ/A95ulVoBP0jibR5tXnqljvi1NEut+B3ilKntjPDSLf0fUdvSLh0vapvPs5/5v6mAorYHxFnpe9OR1le2ubHlsVa598Eaw9gCe4BiOKgXw2Zotbakh6iEzafIM/XxsObj8Qmd3Hzao1b5TLzr0vEVpYnmoSc58tDOJR3n69xhzbkt6eFozm0+MZ0bc2u516FgPYV3m48h50ZdSqlE3eHRvAvD4l9J2Vzpn1/u/Ac=</diagram></mxfile>
|
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 17 KiB |
|
@ -0,0 +1 @@
|
|||
<mxfile userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36" version="5.5.1.6" editor="www.draw.io" type="device"><diagram>7Vhtb+I4EP41SHcftgICtP1YoN1bqXtalZ7u7lPlJiZx1/HkHANlf/3OOGOSEPpyonfaOxUhFD8ejz3zzItDL5rljx+tKLLPkEjdG/aTx1407w2HZ8MIfwnYVsB4fF4BqVVJBQ1qYKG+SQb7jK5UIsuWoAPQThVtMAZjZOxamLAWNm2xJej2roVIw441sIiF7qK/q8RlwaxJjf8iVZqFnQcTtu9exF9TCyvD+/WG0dJ/qulcBF1saJmJBDYNKLpEt1oA1ExP+eNManJtcFu17uqJ2d25rTR8tucX4BQtWAu9YtN7w4nGpdMCH1J6uFJSJzeyhJWN5SfzgP5WYOYyhyCK6nfSbJbbBleWG5VrYXA0zVyuERzg4xKMW7AQjYVWqcHnGM8tLQJraZ1CQi54wkGBaJwpnVyLLazIutKht8NomoFV31CtCHvgtHUcW6PzlsSCViLcR9TKEmW+BJfRygq6FiUBJBOD1qIo1f3uwLmwqTJTcA5yFgqWXimtZ6ABzUAHBP6Da5rcMF1kq+TU8RBz9VFCLp3dokiY5bDhtBpxmm3qGI1GLJI14/OUBQXnRbrTXMcGPnB4HA4VVtEIlQ+U4XIpVtqhzQheIPAg1uJEwYlH9oMBzfRU1YFQOgtfZXCXAR8oy4YHGQoBouWSNBwOj7IQsTLptZeZj2rkhn1B0CZTTi4QpzNtsHwhBqhvqX0iZipJJKqcWnDCiYpxorcAZZz333iKX3TzrH8y7o3RrhmOkbgwxi+JWzcDg/YJXIfLJIbTRlJIHYiEkIcvR0KgngvOS9RHXLKOYX50oEjsEavVfoZXxIbq6XP+b7OaIxe0Q6Dxllief/DqW1RHXaoJ2qdQi3upv0CpqIIhZivZPWr/BfbOxq9j7+x48ninFnloQr/QaFko6xfGkKvQK3eff1vc3l19+nV+N69T+6efq+ReA6p9T+p/KizOX1nPx4wdExennbh4tnL/GG0cL2A/SBvvkHqgsz/Zxk/77T4+CNfBBvGDyaF6wCF1DPHcON6reTNtX6DTJ8uTaRteC15ib8SN9KhbGJ+uwZZM8N2Fh2hoBikYoS9rFD2HLySSNJDfGrSigXb7B+N+8CcNsOLRMLmgVynSWkhzmykqoIhSYvCSB+nclnNTrBxQ1d2d4Bo8wbRPdWY66PMZg3b5ftS6cWL+p/J5IqzU2L3Wbe1Hubn7YnQj/1opLCmv6H++8DzZZSgiyVlUnPbq5msaIacNdb03KEXjvVeKwaQbzIdiOVSso5zcfaXoRvd/2rtR6NTh3te9tQdHvrlzu7f2/5lzJ6fszRC6I1bx9t7FYf2fjJ9r/O8VXX4H</diagram></mxfile>
|
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 19 KiB |
|
@ -0,0 +1 @@
|
|||
<mxfile userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36" version="5.5.1.6" editor="www.draw.io" type="device"><diagram>3Vhbb+I6EP41SN0HECGQbh8boNuutkerltXZ84QMcRL3OHFqHAr99R0749y4qCpdqV0eQvx5PJ755mJDxx0nm2+SZPGtCCjvDPrBpuNOOoPB14ELTw1sC2A0uiiASLKggJwKuGfPFME+ojkL6KohqITgimVNcCnSlC5VAyNSiqemWCh4c9eMRHbHCrhfEr6L/ssCFVu3vAq/piyK7c6Oh/4tyPL/SIo8xf06Azc0n2I6IVYXOrqKSSCeapA7BVqlEKBZvyWbMeWaWktbse7qwGxpt6Qp2nZ8ATq0UlvrOg2ACRwKqWIRiZTwaYX6xj2qFfRhFKuEw6sDr7Cn3P5G3Az+04PeyAyDSx0YrTWj6SxmaYFeMTCoWPJAldpiMpBcCYAqC34IkeE+hc3a0INeI7QSuVyiFKakIjKiKDUqGYdEpiKhYDKISMqJYuumdoIpFZVyFa3wgsweCAtGe014jlrv6GPOJOR4m39FN2BdnVaQYs9kYQQ0TZlgqTLWjPzOaAII4SwCOidL8J9KANZUKgbpfIkTCQsCEztOFpT7ZZKOBRcgD/vaNLXsag0Uy7lZbGhJlcN13k0+7TKKivo9DAK2he6wGL6acNT8UzNQqe2CeE2r01IgwnAFEW/HqzTvVSFEw2sR7Aw8riOVNeLnPea6dv0E0kyn+CXM9rMNPA210AE03lU6mfXcsDanQ9/FWOo5DGepE94i/DY7LyxwS6FKgjtapPtN+gBhYiKd0ERYWfCvFC/Xa90NBKTAnSYWg1QfMrDpH3B8yKw3EcJpCFIlI23dXX2Y0JDkXEHDAM1a8oGsSY+JnkHe2QMLaIwkECw/Xaz0l5VZZSTd6yhnKe3GeDpoM52ezpXWVjVn5re/7mdzfzq/+ef7dDybTuZjISWEkEPOl14V+zXtPNGGsy/F5FpAlh/faR+tO8CJ5hwh+6j/BQYlPqk4PavnxlvdbHXmdlM1NVz23iKBfQFSITfnXGhONj8UqcJDzYEOZsZXJGEQXXdyTfmaaq3Nln+wB++ccQd7rWPbM3ZFF4dP1X3G7SNmQ2PWnSN4yoFnDtaP2i0PtI2d9vhhm+En7N+vNflTl5xna8xeRIa7Ned4e2ru4h1K7nyn5Owd+MS7JVzEMXv0ghb3+wMErXXJ0mhmbuxwyXsXdodavsbuBTaZGrm25dW5tdgp3OKPu7+XW8/emW3men+MXBhWP2+Li3j1F4I7fQE=</diagram></mxfile>
|
|
@ -0,0 +1,81 @@
|
|||
<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/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.baeldung</groupId>
|
||||
<artifactId>dependency-injection</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
|
||||
<name>@Resource vs @Inject vs @Autowired</name>
|
||||
<description>Accompanying the demonstration of the use of the annotations related to injection mechanisms, namely @Resource, @Inject, and @Autowired</description>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.11</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-all</artifactId>
|
||||
<version>1.10.19</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-test</artifactId>
|
||||
<version>4.2.6.RELEASE</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-core</artifactId>
|
||||
<version>4.2.6.RELEASE</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-beans</artifactId>
|
||||
<version>4.2.6.RELEASE</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
<version>4.2.6.RELEASE</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.inject</groupId>
|
||||
<artifactId>javax.inject</artifactId>
|
||||
<version>1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>1.6</source>
|
||||
<target>1.6</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<includes>
|
||||
<include>**/*Demo.java</include>
|
||||
</includes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>java.net</id>
|
||||
<url>https://maven.java.net/content/repositories/releases/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
</project>
|
|
@ -0,0 +1,27 @@
|
|||
package com.baeldung.autowired;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import com.baeldung.dependency.ArbitraryDependency;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(locations={
|
||||
"/applicationContextTest-@Autowired-Type.xml"})
|
||||
public class FieldAutowiredDemo {
|
||||
|
||||
@Autowired
|
||||
private ArbitraryDependency fieldDependency;
|
||||
|
||||
@Test
|
||||
public void fieldDependency_MUST_BE_AUTOWIRED_Correctly() {
|
||||
assertNotNull(fieldDependency);
|
||||
assertEquals("Arbitrary Dependency", fieldDependency.toString());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package com.baeldung.autowired;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import com.baeldung.dependency.ArbitraryDependency;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(locations={
|
||||
"/applicationContextTest-@Autowired-Name.xml"})
|
||||
public class FieldAutowiredNameDemo {
|
||||
|
||||
@Autowired
|
||||
private ArbitraryDependency autowiredFieldDependency;
|
||||
|
||||
@Test
|
||||
public void autowiredFieldDependency_MUST_BE_AUTOWIRED_Correctly() {
|
||||
assertNotNull(autowiredFieldDependency);
|
||||
assertEquals("Arbitrary Dependency", autowiredFieldDependency.toString());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package com.baeldung.autowired;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import com.baeldung.dependency.ArbitraryDependency;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(locations={
|
||||
"/applicationContextTest-@Autowired-Qualifier.xml"})
|
||||
public class FieldQualifierAutowiredDemo {
|
||||
|
||||
@Autowired
|
||||
@Qualifier("autowiredFieldDependency")
|
||||
private ArbitraryDependency fieldDependency1;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("anotherAutowiredFieldDependency")
|
||||
private ArbitraryDependency fieldDependency2;
|
||||
|
||||
@Test
|
||||
public void fieldDependency1_MUST_BE_AUTOWIRED_Correctly() {
|
||||
assertNotNull(fieldDependency1);
|
||||
assertEquals("Arbitrary Dependency", fieldDependency1.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void fieldDependency2_MUST_BE_AUTOWIRED_Correctly() {
|
||||
assertNotNull(fieldDependency2);
|
||||
assertEquals("Another Arbitrary Dependency", fieldDependency2.toString());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package com.baeldung.dependency;
|
||||
|
||||
public class AnotherArbitraryDependency extends ArbitraryDependency {
|
||||
|
||||
private final String label = "Another Arbitrary Dependency";
|
||||
|
||||
public String toString() {
|
||||
return label;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package com.baeldung.dependency;
|
||||
|
||||
public class ArbitraryDependency {
|
||||
|
||||
private final String label = "Arbitrary Dependency";
|
||||
|
||||
public String toString() {
|
||||
return label;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package com.baeldung.dependency;
|
||||
|
||||
public class YetAnotherArbitraryDependency extends ArbitraryDependency {
|
||||
|
||||
private final String label = "Yet Another Arbitrary Dependency";
|
||||
|
||||
public String toString() {
|
||||
return label;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package com.baeldung.inject;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import com.baeldung.dependency.ArbitraryDependency;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(locations={
|
||||
"/applicationContextTest-@Inject-Name.xml"})
|
||||
public class FieldByNameInjectDemo {
|
||||
|
||||
@Inject
|
||||
@Named("yetAnotherFieldInjectDependency")
|
||||
private ArbitraryDependency yetAnotherFieldInjectDependency;
|
||||
|
||||
@Test
|
||||
public void yetAnotherFieldInjectDependency_MUST_BE_INJECTED_Correctly() {
|
||||
assertNotNull(yetAnotherFieldInjectDependency);
|
||||
assertEquals("Yet Another Arbitrary Dependency", yetAnotherFieldInjectDependency.toString());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package com.baeldung.inject;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import com.baeldung.dependency.ArbitraryDependency;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(locations={
|
||||
"/applicationContextTest-@Inject-Type.xml"})
|
||||
public class FieldInjectDemo {
|
||||
|
||||
@Inject
|
||||
private ArbitraryDependency inject1Dependency;
|
||||
|
||||
@Test
|
||||
public void fieldDependency_MUST_BE_INJECTED_Successfully() {
|
||||
assertNotNull(inject1Dependency);
|
||||
assertEquals("Arbitrary Dependency", inject1Dependency.toString());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
package com.baeldung.inject;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import com.baeldung.dependency.ArbitraryDependency;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(locations={
|
||||
"/applicationContextTest-@Inject-Qualifier.xml"})
|
||||
public class FieldQualifierInjectDemo {
|
||||
|
||||
@Inject
|
||||
@Qualifier("defaultFile")
|
||||
private ArbitraryDependency defaultDependency;
|
||||
|
||||
@Inject
|
||||
@Qualifier("namedFile")
|
||||
private ArbitraryDependency namedDependency;
|
||||
|
||||
@Test
|
||||
public void defaultDependency_MUST_BE_INJECTED_Successfully() {
|
||||
assertNotNull(defaultDependency);
|
||||
assertEquals("Arbitrary Dependency", defaultDependency.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void namedDependency_MUST_BE_INJECTED_Correctly() {
|
||||
assertNotNull(defaultDependency);
|
||||
assertEquals("Another Arbitrary Dependency", namedDependency.toString());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package com.baeldung.resource;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(locations={
|
||||
"/applicationContextTest-@Resource-NameType.xml"})
|
||||
public class FieldResourceInjectionDemo {
|
||||
|
||||
@Resource(name="namedFile")
|
||||
private File defaultFile;
|
||||
|
||||
@Test
|
||||
public void plainResourceAnnotation_MUST_FIND_DefaultFile() {
|
||||
assertNotNull(defaultFile);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package com.baeldung.resource;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(locations={
|
||||
"/applicationContextTest-@Resource-Qualifier.xml"})
|
||||
public class MethodByQualifierResourceDemo {
|
||||
|
||||
private File arbDependency;
|
||||
private File anotherArbDependency;
|
||||
|
||||
@Test
|
||||
public void dependencies_MUST_BE_INJECTED_Correctly() {
|
||||
assertNotNull(arbDependency);
|
||||
assertEquals("namedFile.txt", arbDependency.getName());
|
||||
assertNotNull(anotherArbDependency);
|
||||
assertEquals("defaultFile.txt", anotherArbDependency.getName());
|
||||
}
|
||||
|
||||
@Resource
|
||||
@Qualifier("namedFile")
|
||||
public void setArbDependency(File arbDependency) {
|
||||
this.arbDependency = arbDependency;
|
||||
}
|
||||
|
||||
@Resource
|
||||
@Qualifier("defaultFile")
|
||||
public void setAnotherArbDependency(File anotherArbDependency) {
|
||||
this.anotherArbDependency = anotherArbDependency;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package com.baeldung.resource;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(locations={
|
||||
"/applicationContextTest-@Resource-NameType.xml"})
|
||||
public class MethodByTypeResourceDemo {
|
||||
|
||||
private File defaultFile;
|
||||
|
||||
@Resource
|
||||
protected void setDefaultFile(File defaultFile) {
|
||||
this.defaultFile = defaultFile;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void defaultFile_MUST_BE_INJECTED_Correctly() {
|
||||
assertNotNull(defaultFile);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
package com.baeldung.resource;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(locations={
|
||||
"/applicationContextTest-@Resource-NameType.xml"})
|
||||
public class MethodResourceInjectionDemo {
|
||||
|
||||
private File defaultFile;
|
||||
|
||||
@Resource(name="namedFile")
|
||||
protected void setDefaultFile(File defaultFile) {
|
||||
this.defaultFile = defaultFile;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void defaultFile_MUST_BE_INJECTED_Correctly() {
|
||||
assertNotNull(defaultFile);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package com.baeldung.resource;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(locations={
|
||||
"/applicationContextTest-@Resource-NameType.xml"})
|
||||
public class NamedResourceTest {
|
||||
|
||||
@Resource(name="namedFile")
|
||||
private File testFile;
|
||||
|
||||
@Test
|
||||
public void namedResource_MUST_FIND_SPECIFIED_File() {
|
||||
assertNotNull(testFile);
|
||||
assertTrue(testFile.getName().equals("namedFile.txt"));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package com.baeldung.resource;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(locations={
|
||||
"/applicationContextTest-@Resource-Qualifier.xml"})
|
||||
public class QualifierResourceInjectionDemo {
|
||||
|
||||
@Resource
|
||||
private File defaultFile;
|
||||
|
||||
@Resource
|
||||
@Qualifier("namedFile")
|
||||
private File namedFile;
|
||||
|
||||
@Test
|
||||
public void defaultFile_MUST_BE_Valid() {
|
||||
assertNotNull(defaultFile);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void namedFile_MUST_BE_Valid() {
|
||||
assertNotNull(namedFile);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
package com.baeldung.resource;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(locations={
|
||||
"/applicationContextTest-@Resource-NameType.xml"})
|
||||
public class SetterResourceInjectionDemo {
|
||||
|
||||
private File defaultFile;
|
||||
|
||||
@Resource
|
||||
protected void setDefaultFile(File defaultFile) {
|
||||
this.defaultFile = defaultFile;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setter_MUST_INJECT_Resource() {
|
||||
assertNotNull(defaultFile);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/context
|
||||
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
|
||||
|
||||
<bean id="autowiredFieldDependency" class="com.baeldung.dependency.ArbitraryDependency"/>
|
||||
|
||||
<bean id="anotherAutowiredFieldDependency" class="com.baeldung.dependency.AnotherArbitraryDependency"/>
|
||||
</beans>
|
|
@ -0,0 +1,12 @@
|
|||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/context
|
||||
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
|
||||
|
||||
<bean id="autowiredFieldDependency" class="com.baeldung.dependency.ArbitraryDependency"/>
|
||||
|
||||
<bean id="anotherAutowiredFieldDependency" class="com.baeldung.dependency.AnotherArbitraryDependency"/>
|
||||
</beans>
|
|
@ -0,0 +1,10 @@
|
|||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/context
|
||||
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
|
||||
|
||||
<bean id="autowiredFieldDependency" class="com.baeldung.dependency.ArbitraryDependency"/>
|
||||
</beans>
|
|
@ -0,0 +1,11 @@
|
|||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/context
|
||||
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
|
||||
|
||||
<bean id="yetAnotherFieldInjectDependency" class="com.baeldung.dependency.YetAnotherArbitraryDependency"/>
|
||||
|
||||
</beans>
|
|
@ -0,0 +1,12 @@
|
|||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/context
|
||||
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
|
||||
|
||||
<bean id="defaultFile" class="com.baeldung.dependency.ArbitraryDependency"/>
|
||||
|
||||
<bean id="namedFile" class="com.baeldung.dependency.AnotherArbitraryDependency"/>
|
||||
</beans>
|
|
@ -0,0 +1,10 @@
|
|||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/context
|
||||
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
|
||||
|
||||
<bean id="injectDependency" class="com.baeldung.dependency.ArbitraryDependency"/>
|
||||
</beans>
|
|
@ -0,0 +1,12 @@
|
|||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/context
|
||||
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
|
||||
|
||||
<bean id="namedFile" class="java.io.File">
|
||||
<constructor-arg value="namedFile.txt"/>
|
||||
</bean>
|
||||
</beans>
|
|
@ -0,0 +1,16 @@
|
|||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/context
|
||||
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
|
||||
|
||||
<bean id="defaultFile" class="java.io.File">
|
||||
<constructor-arg value="defaultFile.txt"/>
|
||||
</bean>
|
||||
|
||||
<bean id="namedFile" class="java.io.File">
|
||||
<constructor-arg value="namedFile.txt"/>
|
||||
</bean>
|
||||
</beans>
|
|
@ -0,0 +1,110 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.baeldung</groupId>
|
||||
<artifactId>gatling</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
<scala.version>2.11.7</scala.version>
|
||||
<encoding>UTF-8</encoding>
|
||||
<gatling.version>2.2.0</gatling.version>
|
||||
<scala-maven-plugin.version>3.2.2</scala-maven-plugin.version>
|
||||
</properties>
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.gatling</groupId>
|
||||
<artifactId>gatling-app</artifactId>
|
||||
<version>${gatling.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.gatling</groupId>
|
||||
<artifactId>gatling-recorder</artifactId>
|
||||
<version>${gatling.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.gatling.highcharts</groupId>
|
||||
<artifactId>gatling-charts-highcharts</artifactId>
|
||||
<version>${gatling.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.scala-lang</groupId>
|
||||
<artifactId>scala-library</artifactId>
|
||||
<version>${scala.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.gatling.highcharts</groupId>
|
||||
<artifactId>gatling-charts-highcharts</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.gatling</groupId>
|
||||
<artifactId>gatling-app</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.gatling</groupId>
|
||||
<artifactId>gatling-recorder</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.scala-lang</groupId>
|
||||
<artifactId>scala-library</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<testSourceDirectory>src/test/scala</testSourceDirectory>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>net.alchim31.maven</groupId>
|
||||
<artifactId>scala-maven-plugin</artifactId>
|
||||
<version>${scala-maven-plugin.version}</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>net.alchim31.maven</groupId>
|
||||
<artifactId>scala-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>testCompile</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<args>
|
||||
<arg>-Ybackend:GenBCode</arg>
|
||||
<arg>-Ydelambdafy:method</arg>
|
||||
<arg>-target:jvm-1.8</arg>
|
||||
<arg>-deprecation</arg>
|
||||
<arg>-feature</arg>
|
||||
<arg>-unchecked</arg>
|
||||
<arg>-language:implicitConversions</arg>
|
||||
<arg>-language:postfixOps</arg>
|
||||
</args>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>io.gatling</groupId>
|
||||
<artifactId>gatling-maven-plugin</artifactId>
|
||||
<version>${gatling.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>test</phase>
|
||||
<goals><goal>execute</goal></goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
|
@ -0,0 +1,127 @@
|
|||
#########################
|
||||
# Gatling Configuration #
|
||||
#########################
|
||||
|
||||
# This file contains all the settings configurable for Gatling with their default values
|
||||
|
||||
gatling {
|
||||
core {
|
||||
#outputDirectoryBaseName = "" # The prefix for each simulation result folder (then suffixed by the report generation timestamp)
|
||||
#runDescription = "" # The description for this simulation run, displayed in each report
|
||||
#encoding = "utf-8" # Encoding to use throughout Gatling for file and string manipulation
|
||||
#simulationClass = "" # The FQCN of the simulation to run (when used in conjunction with noReports, the simulation for which assertions will be validated)
|
||||
#mute = false # When set to true, don't ask for simulation name nor run description (currently only used by Gatling SBT plugin)
|
||||
#elFileBodiesCacheMaxCapacity = 200 # Cache size for request body EL templates, set to 0 to disable
|
||||
#rawFileBodiesCacheMaxCapacity = 200 # Cache size for request body Raw templates, set to 0 to disable
|
||||
#rawFileBodiesInMemoryMaxSize = 1000 # Below this limit, raw file bodies will be cached in memory
|
||||
|
||||
extract {
|
||||
regex {
|
||||
#cacheMaxCapacity = 200 # Cache size for the compiled regexes, set to 0 to disable caching
|
||||
}
|
||||
xpath {
|
||||
#cacheMaxCapacity = 200 # Cache size for the compiled XPath queries, set to 0 to disable caching
|
||||
}
|
||||
jsonPath {
|
||||
#cacheMaxCapacity = 200 # Cache size for the compiled jsonPath queries, set to 0 to disable caching
|
||||
#preferJackson = false # When set to true, prefer Jackson over Boon for JSON-related operations
|
||||
}
|
||||
css {
|
||||
#cacheMaxCapacity = 200 # Cache size for the compiled CSS selectors queries, set to 0 to disable caching
|
||||
}
|
||||
}
|
||||
|
||||
directory {
|
||||
#data = user-files/data # Folder where user's data (e.g. files used by Feeders) is located
|
||||
#bodies = user-files/bodies # Folder where bodies are located
|
||||
#simulations = user-files/simulations # Folder where the bundle's simulations are located
|
||||
#reportsOnly = "" # If set, name of report folder to look for in order to generate its report
|
||||
#binaries = "" # If set, name of the folder where compiles classes are located: Defaults to GATLING_HOME/target.
|
||||
#results = results # Name of the folder where all reports folder are located
|
||||
}
|
||||
}
|
||||
charting {
|
||||
#noReports = false # When set to true, don't generate HTML reports
|
||||
#maxPlotPerSeries = 1000 # Number of points per graph in Gatling reports
|
||||
#useGroupDurationMetric = false # Switch group timings from cumulated response time to group duration.
|
||||
indicators {
|
||||
#lowerBound = 800 # Lower bound for the requests' response time to track in the reports and the console summary
|
||||
#higherBound = 1200 # Higher bound for the requests' response time to track in the reports and the console summary
|
||||
#percentile1 = 50 # Value for the 1st percentile to track in the reports, the console summary and Graphite
|
||||
#percentile2 = 75 # Value for the 2nd percentile to track in the reports, the console summary and Graphite
|
||||
#percentile3 = 95 # Value for the 3rd percentile to track in the reports, the console summary and Graphite
|
||||
#percentile4 = 99 # Value for the 4th percentile to track in the reports, the console summary and Graphite
|
||||
}
|
||||
}
|
||||
http {
|
||||
#fetchedCssCacheMaxCapacity = 200 # Cache size for CSS parsed content, set to 0 to disable
|
||||
#fetchedHtmlCacheMaxCapacity = 200 # Cache size for HTML parsed content, set to 0 to disable
|
||||
#perUserCacheMaxCapacity = 200 # Per virtual user cache size, set to 0 to disable
|
||||
#warmUpUrl = "http://gatling.io" # The URL to use to warm-up the HTTP stack (blank means disabled)
|
||||
#enableGA = true # Very light Google Analytics, please support
|
||||
ssl {
|
||||
keyStore {
|
||||
#type = "" # Type of SSLContext's KeyManagers store
|
||||
#file = "" # Location of SSLContext's KeyManagers store
|
||||
#password = "" # Password for SSLContext's KeyManagers store
|
||||
#algorithm = "" # Algorithm used SSLContext's KeyManagers store
|
||||
}
|
||||
trustStore {
|
||||
#type = "" # Type of SSLContext's TrustManagers store
|
||||
#file = "" # Location of SSLContext's TrustManagers store
|
||||
#password = "" # Password for SSLContext's TrustManagers store
|
||||
#algorithm = "" # Algorithm used by SSLContext's TrustManagers store
|
||||
}
|
||||
}
|
||||
ahc {
|
||||
#keepAlive = true # Allow pooling HTTP connections (keep-alive header automatically added)
|
||||
#connectTimeout = 60000 # Timeout when establishing a connection
|
||||
#pooledConnectionIdleTimeout = 60000 # Timeout when a connection stays unused in the pool
|
||||
#readTimeout = 60000 # Timeout when a used connection stays idle
|
||||
#maxRetry = 2 # Number of times that a request should be tried again
|
||||
#requestTimeout = 60000 # Timeout of the requests
|
||||
#acceptAnyCertificate = true # When set to true, doesn't validate SSL certificates
|
||||
#httpClientCodecMaxInitialLineLength = 4096 # Maximum length of the initial line of the response (e.g. "HTTP/1.0 200 OK")
|
||||
#httpClientCodecMaxHeaderSize = 8192 # Maximum size, in bytes, of each request's headers
|
||||
#httpClientCodecMaxChunkSize = 8192 # Maximum length of the content or each chunk
|
||||
#webSocketMaxFrameSize = 10240000 # Maximum frame payload size
|
||||
#sslEnabledProtocols = [TLSv1.2, TLSv1.1, TLSv1] # Array of enabled protocols for HTTPS, if empty use the JDK defaults
|
||||
#sslEnabledCipherSuites = [] # Array of enabled cipher suites for HTTPS, if empty use the JDK defaults
|
||||
#sslSessionCacheSize = 0 # SSLSession cache size, set to 0 to use JDK's default
|
||||
#sslSessionTimeout = 0 # SSLSession timeout in seconds, set to 0 to use JDK's default (24h)
|
||||
#useOpenSsl = false # if OpenSSL should be used instead of JSSE (requires tcnative jar)
|
||||
#useNativeTransport = false # if native transport should be used instead of Java NIO (requires netty-transport-native-epoll, currently Linux only)
|
||||
#usePooledMemory = true # if Gatling should use pooled memory
|
||||
#tcpNoDelay = true
|
||||
#soReuseAddress = false
|
||||
#soLinger = -1
|
||||
#soSndBuf = -1
|
||||
#soRcvBuf = -1
|
||||
}
|
||||
dns {
|
||||
#queryTimeout = 5000 # Timeout of each DNS query in millis
|
||||
#maxQueriesPerResolve = 3 # Maximum allowed number of DNS queries for a given name resolution
|
||||
}
|
||||
}
|
||||
data {
|
||||
#writers = [console, file] # The list of DataWriters to which Gatling write simulation data (currently supported : console, file, graphite, jdbc)
|
||||
console {
|
||||
#light = false # When set to true, displays a light version without detailed request stats
|
||||
}
|
||||
file {
|
||||
#bufferSize = 8192 # FileDataWriter's internal data buffer size, in bytes
|
||||
}
|
||||
leak {
|
||||
#noActivityTimeout = 30 # Period, in seconds, for which Gatling may have no activity before considering a leak may be happening
|
||||
}
|
||||
graphite {
|
||||
#light = false # only send the all* stats
|
||||
#host = "localhost" # The host where the Carbon server is located
|
||||
#port = 2003 # The port to which the Carbon server listens to (2003 is default for plaintext, 2004 is default for pickle)
|
||||
#protocol = "tcp" # The protocol used to send data to Carbon (currently supported : "tcp", "udp")
|
||||
#rootPathPrefix = "gatling" # The common prefix of all metrics sent to Graphite
|
||||
#bufferSize = 8192 # GraphiteDataWriter's internal data buffer size, in bytes
|
||||
#writeInterval = 1 # GraphiteDataWriter's write interval, in seconds
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
|
||||
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
|
||||
<immediateFlush>false</immediateFlush>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- Uncomment for logging ALL HTTP request and responses -->
|
||||
<!-- <logger name="io.gatling.http.ahc" level="TRACE" /> -->
|
||||
<!-- <logger name="io.gatling.http.response" level="TRACE" /> -->
|
||||
<!-- Uncomment for logging ONLY FAILED HTTP request and responses -->
|
||||
<!-- <logger name="io.gatling.http.ahc" level="DEBUG" /> -->
|
||||
<!-- <logger name="io.gatling.http.response" level="DEBUG" /> -->
|
||||
|
||||
<root level="WARN">
|
||||
<appender-ref ref="CONSOLE" />
|
||||
</root>
|
||||
|
||||
</configuration>
|
|
@ -0,0 +1,53 @@
|
|||
recorder {
|
||||
core {
|
||||
#mode = "Proxy"
|
||||
#encoding = "utf-8" # The encoding used for reading/writing request bodies and the generated simulation
|
||||
#outputFolder = "" # The folder where generated simulation will we written
|
||||
#package = "" # The package's name of the generated simulation
|
||||
#className = "RecordedSimulation" # The name of the generated Simulation class
|
||||
#thresholdForPauseCreation = 100 # The minimum time, in milliseconds, that must pass between requests to trigger a pause creation
|
||||
#saveConfig = false # When set to true, the configuration from the Recorder GUI overwrites this configuration
|
||||
#headless = false # When set to true, run the Recorder in headless mode instead of the GUI
|
||||
#harFilePath = "" # The path of the HAR file to convert
|
||||
}
|
||||
filters {
|
||||
#filterStrategy = "Disabled" # The selected filter resources filter strategy (currently supported : "Disabled", "BlackList", "WhiteList")
|
||||
#whitelist = [] # The list of ressources patterns that are part of the Recorder's whitelist
|
||||
#blacklist = [] # The list of ressources patterns that are part of the Recorder's blacklist
|
||||
}
|
||||
http {
|
||||
#automaticReferer = true # When set to false, write the referer + enable 'disableAutoReferer' in the generated simulation
|
||||
#followRedirect = true # When set to false, write redirect requests + enable 'disableFollowRedirect' in the generated simulation
|
||||
#removeCacheHeaders = true # When set to true, removes from the generated requests headers leading to request caching
|
||||
#inferHtmlResources = true # When set to true, add inferred resources + set 'inferHtmlResources' with the configured blacklist/whitelist in the generated simulation
|
||||
#checkResponseBodies = false # When set to true, save response bodies as files and add raw checks in the generated simulation
|
||||
}
|
||||
proxy {
|
||||
#port = 8000 # Local port used by Gatling's Proxy for HTTP/HTTPS
|
||||
https {
|
||||
#mode = "SelfSignedCertificate" # The selected "HTTPS mode" (currently supported : "SelfSignedCertificate", "ProvidedKeyStore", "GatlingCertificateAuthority", "CustomCertificateAuthority")
|
||||
keyStore {
|
||||
#path = "" # The path of the custom key store
|
||||
#password = "" # The password for this key store
|
||||
#type = "JKS" # The type of the key store (currently supported: "JKS")
|
||||
}
|
||||
certificateAuthority {
|
||||
#certificatePath = "" # The path of the custom certificate
|
||||
#privateKeyPath = "" # The certificate's private key path
|
||||
}
|
||||
}
|
||||
outgoing {
|
||||
#host = "" # The outgoing proxy's hostname
|
||||
#username = "" # The username to use to connect to the outgoing proxy
|
||||
#password = "" # The password corresponding to the user to use to connect to the outgoing proxy
|
||||
#port = 0 # The HTTP port to use to connect to the outgoing proxy
|
||||
#sslPort = 0 # If set, The HTTPS port to use to connect to the outgoing proxy
|
||||
}
|
||||
}
|
||||
netty {
|
||||
#maxInitialLineLength = 10000 # Maximum length of the initial line of the response (e.g. "HTTP/1.0 200 OK")
|
||||
#maxHeaderSize = 20000 # Maximum size, in bytes, of each request's headers
|
||||
#maxChunkSize = 8192 # Maximum length of the content or each chunk
|
||||
#maxContentLength = 100000000 # Maximum length of the aggregated content of each response
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
import io.gatling.app.Gatling
|
||||
import io.gatling.core.config.GatlingPropertiesBuilder
|
||||
|
||||
object Engine extends App {
|
||||
|
||||
val props = new GatlingPropertiesBuilder
|
||||
props.dataDirectory(IDEPathHelper.dataDirectory.toString)
|
||||
props.resultsDirectory(IDEPathHelper.resultsDirectory.toString)
|
||||
props.bodiesDirectory(IDEPathHelper.bodiesDirectory.toString)
|
||||
props.binariesDirectory(IDEPathHelper.mavenBinariesDirectory.toString)
|
||||
|
||||
Gatling.fromMap(props.build)
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
import java.nio.file.Path
|
||||
|
||||
import io.gatling.commons.util.PathHelper._
|
||||
|
||||
object IDEPathHelper {
|
||||
|
||||
val gatlingConfUrl: Path = getClass.getClassLoader.getResource("gatling.conf").toURI
|
||||
val projectRootDir = gatlingConfUrl.ancestor(3)
|
||||
|
||||
val mavenSourcesDirectory = projectRootDir / "src" / "test" / "scala"
|
||||
val mavenResourcesDirectory = projectRootDir / "src" / "test" / "resources"
|
||||
val mavenTargetDirectory = projectRootDir / "target"
|
||||
val mavenBinariesDirectory = mavenTargetDirectory / "test-classes"
|
||||
|
||||
val dataDirectory = mavenResourcesDirectory / "data"
|
||||
val bodiesDirectory = mavenResourcesDirectory / "bodies"
|
||||
|
||||
val recorderOutputDirectory = mavenSourcesDirectory
|
||||
val resultsDirectory = mavenTargetDirectory / "gatling"
|
||||
|
||||
val recorderConfigFile = mavenResourcesDirectory / "recorder.conf"
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
import io.gatling.recorder.GatlingRecorder
|
||||
import io.gatling.recorder.config.RecorderPropertiesBuilder
|
||||
|
||||
object Recorder extends App {
|
||||
|
||||
val props = new RecorderPropertiesBuilder
|
||||
props.simulationOutputFolder(IDEPathHelper.recorderOutputDirectory.toString)
|
||||
props.simulationPackage("org.baeldung")
|
||||
props.bodiesFolder(IDEPathHelper.bodiesDirectory.toString)
|
||||
|
||||
GatlingRecorder.fromMap(props.build, Some(IDEPathHelper.recorderConfigFile))
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
package org.baeldung
|
||||
|
||||
import scala.concurrent.duration._
|
||||
|
||||
import io.gatling.core.Predef._
|
||||
import io.gatling.http.Predef._
|
||||
import io.gatling.jdbc.Predef._
|
||||
|
||||
class RecordedSimulation extends Simulation {
|
||||
|
||||
val httpProtocol = http
|
||||
.baseURL("http://computer-database.gatling.io")
|
||||
.inferHtmlResources(BlackList(""".*\.css""", """.*\.js""", """.*\.ico"""), WhiteList())
|
||||
.acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
|
||||
.acceptEncodingHeader("gzip, deflate")
|
||||
.acceptLanguageHeader("it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3")
|
||||
.userAgentHeader("Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
val scn = scenario("RecordedSimulation")
|
||||
.exec(http("request_0")
|
||||
.get("/"))
|
||||
.pause(5)
|
||||
.exec(http("request_1")
|
||||
.get("/computers?f=amstrad"))
|
||||
.pause(4)
|
||||
.exec(http("request_2")
|
||||
.get("/computers/412"))
|
||||
.pause(2)
|
||||
.exec(http("request_3")
|
||||
.get("/"))
|
||||
.pause(2)
|
||||
.exec(http("request_4")
|
||||
.get("/computers?p=1"))
|
||||
.pause(1)
|
||||
.exec(http("request_5")
|
||||
.get("/computers?p=2"))
|
||||
.pause(2)
|
||||
.exec(http("request_6")
|
||||
.get("/computers?p=3"))
|
||||
|
||||
setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol)
|
||||
}
|
|
@ -1,55 +0,0 @@
|
|||
#Sat Jan 21 23:04:06 EET 2012
|
||||
eclipse.preferences.version=1
|
||||
editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
|
||||
sp_cleanup.add_default_serial_version_id=true
|
||||
sp_cleanup.add_generated_serial_version_id=false
|
||||
sp_cleanup.add_missing_annotations=true
|
||||
sp_cleanup.add_missing_deprecated_annotations=true
|
||||
sp_cleanup.add_missing_methods=false
|
||||
sp_cleanup.add_missing_nls_tags=false
|
||||
sp_cleanup.add_missing_override_annotations=true
|
||||
sp_cleanup.add_missing_override_annotations_interface_methods=true
|
||||
sp_cleanup.add_serial_version_id=false
|
||||
sp_cleanup.always_use_blocks=true
|
||||
sp_cleanup.always_use_parentheses_in_expressions=true
|
||||
sp_cleanup.always_use_this_for_non_static_field_access=false
|
||||
sp_cleanup.always_use_this_for_non_static_method_access=false
|
||||
sp_cleanup.convert_to_enhanced_for_loop=true
|
||||
sp_cleanup.correct_indentation=true
|
||||
sp_cleanup.format_source_code=true
|
||||
sp_cleanup.format_source_code_changes_only=true
|
||||
sp_cleanup.make_local_variable_final=true
|
||||
sp_cleanup.make_parameters_final=true
|
||||
sp_cleanup.make_private_fields_final=false
|
||||
sp_cleanup.make_type_abstract_if_missing_method=false
|
||||
sp_cleanup.make_variable_declarations_final=true
|
||||
sp_cleanup.never_use_blocks=false
|
||||
sp_cleanup.never_use_parentheses_in_expressions=false
|
||||
sp_cleanup.on_save_use_additional_actions=true
|
||||
sp_cleanup.organize_imports=true
|
||||
sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
|
||||
sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
|
||||
sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
|
||||
sp_cleanup.qualify_static_member_accesses_with_declaring_class=true
|
||||
sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
|
||||
sp_cleanup.remove_private_constructors=true
|
||||
sp_cleanup.remove_trailing_whitespaces=true
|
||||
sp_cleanup.remove_trailing_whitespaces_all=true
|
||||
sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
|
||||
sp_cleanup.remove_unnecessary_casts=true
|
||||
sp_cleanup.remove_unnecessary_nls_tags=false
|
||||
sp_cleanup.remove_unused_imports=true
|
||||
sp_cleanup.remove_unused_local_variables=false
|
||||
sp_cleanup.remove_unused_private_fields=true
|
||||
sp_cleanup.remove_unused_private_members=false
|
||||
sp_cleanup.remove_unused_private_methods=true
|
||||
sp_cleanup.remove_unused_private_types=true
|
||||
sp_cleanup.sort_members=false
|
||||
sp_cleanup.sort_members_all=false
|
||||
sp_cleanup.use_blocks=false
|
||||
sp_cleanup.use_blocks_only_for_return_and_throw=false
|
||||
sp_cleanup.use_parentheses_in_expressions=false
|
||||
sp_cleanup.use_this_for_non_static_field_access=true
|
||||
sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
|
||||
sp_cleanup.use_this_for_non_static_method_access=true
|
||||
sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
|
|
@ -0,0 +1,86 @@
|
|||
package org.baeldung.httpclient;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.http.Header;
|
||||
import org.apache.http.HttpHost;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.auth.AuthScope;
|
||||
import org.apache.http.auth.AuthenticationException;
|
||||
import org.apache.http.auth.MalformedChallengeException;
|
||||
import org.apache.http.auth.UsernamePasswordCredentials;
|
||||
import org.apache.http.client.AuthCache;
|
||||
import org.apache.http.client.ClientProtocolException;
|
||||
import org.apache.http.client.CredentialsProvider;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.client.protocol.HttpClientContext;
|
||||
import org.apache.http.impl.auth.DigestScheme;
|
||||
import org.apache.http.impl.client.BasicAuthCache;
|
||||
import org.apache.http.impl.client.BasicCredentialsProvider;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.junit.Test;
|
||||
|
||||
public class SandboxTest {
|
||||
|
||||
@Test
|
||||
public final void whenInterestingDigestAuthScenario_then200OK() throws AuthenticationException, ClientProtocolException, IOException, MalformedChallengeException {
|
||||
final HttpHost targetHost = new HttpHost("httpbin.org", 80, "http");
|
||||
|
||||
// set up the credentials to run agains the server
|
||||
final CredentialsProvider credsProvider = new BasicCredentialsProvider();
|
||||
credsProvider.setCredentials(new AuthScope(targetHost.getHostName(), targetHost.getPort()), new UsernamePasswordCredentials("user", "passwd"));
|
||||
|
||||
// We need a first run to get a 401 to seed the digest auth
|
||||
|
||||
// Make a client using those creds
|
||||
final CloseableHttpClient client = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
|
||||
|
||||
// And make a call to the URL we are after
|
||||
final HttpGet httpget = new HttpGet("http://httpbin.org/digest-auth/auth/user/passwd");
|
||||
|
||||
// Create a context to use
|
||||
final HttpClientContext context = HttpClientContext.create();
|
||||
|
||||
// Get a response from the sever (expect a 401!)
|
||||
final HttpResponse authResponse = client.execute(targetHost, httpget, context);
|
||||
|
||||
// Pull out the auth header that came back from the server
|
||||
final Header challenge = authResponse.getHeaders("WWW-Authenticate")[0];
|
||||
|
||||
// Lets use a digest scheme to solve it
|
||||
final DigestScheme digest = new DigestScheme();
|
||||
digest.processChallenge(challenge);
|
||||
|
||||
// Make a header with the solution based upon user/password and what the digest got out of the initial 401 reponse
|
||||
final Header solution = digest.authenticate(new UsernamePasswordCredentials("user", "passwd"), httpget, context);
|
||||
|
||||
// Need an auth cache to use the new digest we made
|
||||
final AuthCache authCache = new BasicAuthCache();
|
||||
authCache.put(targetHost, digest);
|
||||
|
||||
// Add the authCache and thus solved digest to the context
|
||||
context.setAuthCache(authCache);
|
||||
|
||||
// Pimp up our http get with the solved header made by the digest
|
||||
httpget.addHeader(solution);
|
||||
|
||||
// use it!
|
||||
System.out.println("Executing request " + httpget.getRequestLine() + " to target " + targetHost);
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
final CloseableHttpResponse responseGood = client.execute(targetHost, httpget, context);
|
||||
|
||||
try {
|
||||
System.out.println("----------------------------------------");
|
||||
System.out.println(responseGood.getStatusLine());
|
||||
System.out.println(EntityUtils.toString(responseGood.getEntity()));
|
||||
} finally {
|
||||
responseGood.close();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,311 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.baeldung</groupId>
|
||||
<artifactId>jee7schedule</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<description>JavaEE 7 Arquillian Archetype Sample</description>
|
||||
<packaging>war</packaging>
|
||||
|
||||
<properties>
|
||||
<java.min.version>1.7</java.min.version>
|
||||
<maven.min.version>3.0.0</maven.min.version>
|
||||
|
||||
<version.junit>4.11</version.junit>
|
||||
<version.javaee_api>7.0</version.javaee_api>
|
||||
|
||||
<version.arquillian_core>1.1.4.Final</version.arquillian_core>
|
||||
|
||||
<version.wildfly>8.0.0.Final</version.wildfly>
|
||||
</properties>
|
||||
|
||||
<prerequisites>
|
||||
<maven>${maven.min.version}</maven>
|
||||
</prerequisites>
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.jboss.arquillian</groupId>
|
||||
<artifactId>arquillian-bom</artifactId>
|
||||
<version>${version.arquillian_core}</version>
|
||||
<scope>import</scope>
|
||||
<type>pom</type>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>javax</groupId>
|
||||
<artifactId>javaee-api</artifactId>
|
||||
<version>${version.javaee_api}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>${version.junit}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jboss.arquillian.junit</groupId>
|
||||
<artifactId>arquillian-junit-container</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jayway.awaitility</groupId>
|
||||
<artifactId>awaitility</artifactId>
|
||||
<version>1.6.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.jboss.shrinkwrap.resolver</groupId>
|
||||
<artifactId>shrinkwrap-resolver-impl-maven</artifactId>
|
||||
<scope>test</scope>
|
||||
<type>jar</type>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.jboss.shrinkwrap.resolver</groupId>
|
||||
<artifactId>shrinkwrap-resolver-impl-maven-archive</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.1</version>
|
||||
<configuration>
|
||||
<source>${java.min.version}</source>
|
||||
<target>${java.min.version}</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>2.1.1</version>
|
||||
<configuration>
|
||||
<failOnMissingWebXml>false</failOnMissingWebXml>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<profiles>
|
||||
|
||||
<profile>
|
||||
<id>wildfly-managed-arquillian</id>
|
||||
<activation>
|
||||
<activeByDefault>true</activeByDefault>
|
||||
</activation>
|
||||
<properties>
|
||||
<serverProfile>standalone-full.xml</serverProfile>
|
||||
<serverRoot>${project.build.directory}/wildfly-${version.wildfly}</serverRoot>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.undertow</groupId>
|
||||
<artifactId>undertow-websockets-jsr</artifactId>
|
||||
<version>1.0.0.Beta25</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jboss.resteasy</groupId>
|
||||
<artifactId>resteasy-client</artifactId>
|
||||
<version>3.0.5.Final</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jboss.resteasy</groupId>
|
||||
<artifactId>resteasy-jaxb-provider</artifactId>
|
||||
<version>3.0.5.Final</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jboss.resteasy</groupId>
|
||||
<artifactId>resteasy-json-p-provider</artifactId>
|
||||
<version>3.0.5.Final</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wildfly</groupId>
|
||||
<artifactId>wildfly-arquillian-container-managed</artifactId>
|
||||
<version>${version.wildfly}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<version>2.8</version>
|
||||
<configuration>
|
||||
<skip>${maven.test.skip}</skip>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>unpack</id>
|
||||
<phase>process-test-classes</phase>
|
||||
<goals>
|
||||
<goal>unpack</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<artifactItems>
|
||||
<artifactItem>
|
||||
<groupId>org.wildfly</groupId>
|
||||
<artifactId>wildfly-dist</artifactId>
|
||||
<version>${version.wildfly}</version>
|
||||
<type>zip</type>
|
||||
<overWrite>false</overWrite>
|
||||
<outputDirectory>${project.build.directory}</outputDirectory>
|
||||
</artifactItem>
|
||||
</artifactItems>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>2.17</version>
|
||||
<configuration>
|
||||
<environmentVariables>
|
||||
<JBOSS_HOME>${project.build.directory}/wildfly-${version.wildfly}</JBOSS_HOME>
|
||||
</environmentVariables>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>wildfly-remote-arquillian</id>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.undertow</groupId>
|
||||
<artifactId>undertow-websockets-jsr</artifactId>
|
||||
<version>1.0.0.Beta25</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jboss.resteasy</groupId>
|
||||
<artifactId>resteasy-client</artifactId>
|
||||
<version>3.0.5.Final</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jboss.resteasy</groupId>
|
||||
<artifactId>resteasy-jaxb-provider</artifactId>
|
||||
<version>3.0.5.Final</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jboss.resteasy</groupId>
|
||||
<artifactId>resteasy-json-p-provider</artifactId>
|
||||
<version>3.0.5.Final</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wildfly</groupId>
|
||||
<artifactId>wildfly-arquillian-container-remote</artifactId>
|
||||
<version>${version.wildfly}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>glassfish-embedded-arquillian</id>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.main.extras</groupId>
|
||||
<artifactId>glassfish-embedded-all</artifactId>
|
||||
<version>4.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish</groupId>
|
||||
<artifactId>javax.json</artifactId>
|
||||
<version>1.0.4</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.tyrus</groupId>
|
||||
<artifactId>tyrus-client</artifactId>
|
||||
<version>1.3</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.tyrus</groupId>
|
||||
<artifactId>tyrus-container-grizzly-client</artifactId>
|
||||
<version>1.3</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.core</groupId>
|
||||
<artifactId>jersey-client</artifactId>
|
||||
<version>2.4</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jboss.arquillian.container</groupId>
|
||||
<artifactId>arquillian-glassfish-embedded-3.1</artifactId>
|
||||
<version>1.0.0.CR4</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>glassfish-remote-arquillian</id>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.glassfish</groupId>
|
||||
<artifactId>javax.json</artifactId>
|
||||
<version>1.0.4</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.tyrus</groupId>
|
||||
<artifactId>tyrus-client</artifactId>
|
||||
<version>1.3</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.tyrus</groupId>
|
||||
<artifactId>tyrus-container-grizzly-client</artifactId>
|
||||
<version>1.3</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.core</groupId>
|
||||
<artifactId>jersey-client</artifactId>
|
||||
<version>2.4</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.media</groupId>
|
||||
<artifactId>jersey-media-json-jackson</artifactId>
|
||||
<version>2.4</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.media</groupId>
|
||||
<artifactId>jersey-media-json-processing</artifactId>
|
||||
<version>2.4</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jboss.arquillian.container</groupId>
|
||||
<artifactId>arquillian-glassfish-remote-3.1</artifactId>
|
||||
<version>1.0.0.CR4</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</profile>
|
||||
</profiles>
|
||||
</project>
|
|
@ -0,0 +1,27 @@
|
|||
package com.baeldung.timer;
|
||||
|
||||
import javax.ejb.Schedule;
|
||||
import javax.ejb.Singleton;
|
||||
import javax.ejb.Startup;
|
||||
import javax.enterprise.event.Event;
|
||||
import javax.inject.Inject;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
@Startup
|
||||
@Singleton
|
||||
public class AutomaticTimerBean {
|
||||
|
||||
|
||||
@Inject
|
||||
Event<TimerEvent> event;
|
||||
|
||||
/**
|
||||
* This method will be called every 10 second and will fire an @TimerEvent
|
||||
*/
|
||||
@Schedule(hour = "*", minute = "*", second = "*/10", info = "Every 10 second timer")
|
||||
public void printDate() {
|
||||
event.fire(new TimerEvent("TimerEvent sent at :" + new Date()));
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package com.baeldung.timer;
|
||||
|
||||
import javax.ejb.*;
|
||||
|
||||
/**
|
||||
* Created by ccristianchiovari on 5/2/16.
|
||||
*/
|
||||
@Singleton
|
||||
public class FixedDelayTimerBean {
|
||||
|
||||
@EJB
|
||||
private WorkerBean workerBean;
|
||||
|
||||
@Lock(LockType.READ)
|
||||
@Schedule(second = "*/5", minute = "*", hour = "*", persistent = false)
|
||||
public void atSchedule() throws InterruptedException {
|
||||
workerBean.doTimerWork();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
package com.baeldung.timer;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.Resource;
|
||||
import javax.ejb.*;
|
||||
import javax.enterprise.event.Event;
|
||||
import javax.inject.Inject;
|
||||
|
||||
/**
|
||||
* author: Cristian Chiovari
|
||||
*/
|
||||
@Startup
|
||||
@Singleton
|
||||
public class ProgrammaticAtFixedRateTimerBean {
|
||||
|
||||
@Inject
|
||||
Event<TimerEvent> event;
|
||||
|
||||
@Resource
|
||||
TimerService timerService;
|
||||
|
||||
@PostConstruct
|
||||
public void initialize() {
|
||||
timerService.createTimer(0,1000, "Every second timer");
|
||||
}
|
||||
|
||||
@Timeout
|
||||
public void programmaticTimout(Timer timer) {
|
||||
event.fire(new TimerEvent(timer.getInfo().toString()));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package com.baeldung.timer;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.Resource;
|
||||
import javax.ejb.*;
|
||||
import javax.enterprise.event.Event;
|
||||
import javax.inject.Inject;
|
||||
|
||||
/**
|
||||
* author: Jacek Jackowiak
|
||||
*/
|
||||
@Startup
|
||||
@Singleton
|
||||
public class ProgrammaticTimerBean {
|
||||
|
||||
@Inject
|
||||
Event<TimerEvent> event;
|
||||
|
||||
@Resource
|
||||
TimerService timerService;
|
||||
|
||||
@PostConstruct
|
||||
public void initialize() {
|
||||
ScheduleExpression scheduleExpression = new ScheduleExpression()
|
||||
.hour("*")
|
||||
.minute("*")
|
||||
.second("*/5");
|
||||
|
||||
TimerConfig timerConfig = new TimerConfig();
|
||||
timerConfig.setInfo("Every 5 second timer");
|
||||
|
||||
timerService.createCalendarTimer(scheduleExpression, timerConfig);
|
||||
}
|
||||
|
||||
@Timeout
|
||||
public void programmaticTimout(Timer timer) {
|
||||
event.fire(new TimerEvent(timer.getInfo().toString()));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
package com.baeldung.timer;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.Resource;
|
||||
import javax.ejb.*;
|
||||
import javax.enterprise.event.Event;
|
||||
import javax.inject.Inject;
|
||||
|
||||
/**
|
||||
* author: Cristian Chiovari
|
||||
*/
|
||||
@Startup
|
||||
@Singleton
|
||||
public class ProgrammaticWithInitialFixedDelayTimerBean {
|
||||
|
||||
@Inject
|
||||
Event<TimerEvent> event;
|
||||
|
||||
@Resource
|
||||
TimerService timerService;
|
||||
|
||||
@PostConstruct
|
||||
public void initialize() {
|
||||
timerService.createTimer(10000l,5000l, "Delay 10 seconds then every 5 second timer");
|
||||
}
|
||||
|
||||
@Timeout
|
||||
public void programmaticTimout(Timer timer) {
|
||||
event.fire(new TimerEvent(timer.getInfo().toString()));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package com.baeldung.timer;
|
||||
|
||||
import javax.ejb.Schedule;
|
||||
import javax.ejb.Singleton;
|
||||
import javax.ejb.Startup;
|
||||
import javax.ejb.Timer;
|
||||
import javax.enterprise.event.Event;
|
||||
import javax.inject.Inject;
|
||||
|
||||
|
||||
@Startup
|
||||
@Singleton
|
||||
public class ScheduleTimerBean {
|
||||
|
||||
@Inject
|
||||
Event<TimerEvent> event;
|
||||
|
||||
@Schedule(hour = "*", minute = "*", second = "*/5", info = "Every 5 second timer")
|
||||
public void automaticallyScheduled(Timer timer) {
|
||||
fireEvent(timer);
|
||||
}
|
||||
|
||||
|
||||
private void fireEvent(Timer timer) {
|
||||
event.fire(new TimerEvent(timer.getInfo().toString()));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package com.baeldung.timer;
|
||||
|
||||
public class TimerEvent {
|
||||
|
||||
private String eventInfo;
|
||||
private long time = System.currentTimeMillis();
|
||||
|
||||
public TimerEvent(String s) {
|
||||
this.eventInfo = s;
|
||||
}
|
||||
|
||||
public long getTime() {
|
||||
return time;
|
||||
}
|
||||
|
||||
public String getEventInfo() {
|
||||
return eventInfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "TimerEvent {" +
|
||||
"eventInfo='" + eventInfo + '\'' +
|
||||
", time=" + time +
|
||||
'}';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package com.baeldung.timer;
|
||||
|
||||
import javax.ejb.Singleton;
|
||||
import javax.ejb.Startup;
|
||||
import javax.enterprise.event.Observes;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
/**
|
||||
* This class will listen to all TimerEvent and will collect them
|
||||
*/
|
||||
@Startup
|
||||
@Singleton
|
||||
public class TimerEventListener {
|
||||
|
||||
final List<TimerEvent> events = new CopyOnWriteArrayList<>();
|
||||
|
||||
public void listen(@Observes TimerEvent event) {
|
||||
System.out.println("event = " + event);
|
||||
events.add(event);
|
||||
}
|
||||
|
||||
public List<TimerEvent> getEvents() {
|
||||
return events;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
package com.baeldung.timer;
|
||||
|
||||
import javax.ejb.Lock;
|
||||
import javax.ejb.LockType;
|
||||
import javax.ejb.Singleton;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
/**
|
||||
* Created by cristianchiovari on 5/2/16.
|
||||
*/
|
||||
@Singleton
|
||||
public class WorkerBean {
|
||||
|
||||
private AtomicBoolean busy = new AtomicBoolean(false);
|
||||
|
||||
@Lock(LockType.READ)
|
||||
public void doTimerWork() throws InterruptedException {
|
||||
|
||||
System.out.println("Timer method called but not started yet !");
|
||||
|
||||
if (!busy.compareAndSet(false, true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
System.out.println("Timer work started");
|
||||
Thread.sleep(12000);
|
||||
System.out.println("Timer work done");
|
||||
} finally {
|
||||
busy.set(false);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
package com.baeldung.timer;
|
||||
|
||||
import com.jayway.awaitility.Awaitility;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.jboss.arquillian.container.test.api.Deployment;
|
||||
import org.jboss.arquillian.junit.Arquillian;
|
||||
import org.jboss.shrinkwrap.api.ShrinkWrap;
|
||||
import org.jboss.shrinkwrap.api.spec.WebArchive;
|
||||
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.io.File;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static com.jayway.awaitility.Awaitility.await;
|
||||
import static com.jayway.awaitility.Awaitility.to;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
|
||||
|
||||
@RunWith(Arquillian.class)
|
||||
public class AutomaticTimerBeanTest {
|
||||
|
||||
//the @AutomaticTimerBean has a method called every 10 seconds
|
||||
//testing the difference ==> 100000
|
||||
final static long TIMEOUT = 10000l;
|
||||
|
||||
//the tolerance accepted , so if between two consecutive calls there has to be at least 9 or max 11 seconds.
|
||||
//because the timer service is not intended for real-time applications so it will not be exactly 10 seconds
|
||||
final static long TOLERANCE = 1000l;
|
||||
|
||||
@Inject
|
||||
TimerEventListener timerEventListener;
|
||||
|
||||
@Deployment
|
||||
public static WebArchive deploy() {
|
||||
File[] jars = Maven.resolver().loadPomFromFile("pom.xml")
|
||||
.resolve("com.jayway.awaitility:awaitility")
|
||||
.withTransitivity().asFile();
|
||||
|
||||
//only @AutomaticTimerBean is deployed not the other timers
|
||||
return ShrinkWrap.create(WebArchive.class)
|
||||
.addAsLibraries(jars)
|
||||
.addClasses(WithinWindowMatcher.class, TimerEvent.class, TimerEventListener.class, AutomaticTimerBean.class);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void should_receive_two_pings() {
|
||||
Awaitility.setDefaultTimeout(30, TimeUnit.SECONDS);
|
||||
//the test will wait here until two events are triggered
|
||||
await().untilCall(to(timerEventListener.getEvents()).size(), equalTo(2));
|
||||
|
||||
TimerEvent firstEvent = timerEventListener.getEvents().get(0);
|
||||
TimerEvent secondEvent = timerEventListener.getEvents().get(1);
|
||||
|
||||
long delay = secondEvent.getTime() - firstEvent.getTime();
|
||||
System.out.println("Actual timeout = " + delay);
|
||||
|
||||
//ensure that the delay between the events is more or less 10 seconds (no real time precision)
|
||||
assertThat(delay, Matchers.is(WithinWindowMatcher.withinWindow(TIMEOUT, TOLERANCE)));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
package com.baeldung.timer;
|
||||
|
||||
import com.jayway.awaitility.Awaitility;
|
||||
import org.jboss.arquillian.container.test.api.Deployment;
|
||||
import org.jboss.arquillian.junit.Arquillian;
|
||||
import org.jboss.shrinkwrap.api.ShrinkWrap;
|
||||
import org.jboss.shrinkwrap.api.spec.WebArchive;
|
||||
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.io.File;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static com.jayway.awaitility.Awaitility.await;
|
||||
import static com.jayway.awaitility.Awaitility.to;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
|
||||
|
||||
@RunWith(Arquillian.class)
|
||||
public class ProgrammaticAtFixedRateTimerBeanTest {
|
||||
|
||||
final static long TIMEOUT = 1000;
|
||||
final static long TOLERANCE = 500l;
|
||||
|
||||
@Inject
|
||||
TimerEventListener timerEventListener;
|
||||
|
||||
@Deployment
|
||||
public static WebArchive deploy() {
|
||||
File[] jars = Maven.resolver().loadPomFromFile("pom.xml")
|
||||
.resolve("com.jayway.awaitility:awaitility")
|
||||
.withTransitivity().asFile();
|
||||
|
||||
return ShrinkWrap.create(WebArchive.class)
|
||||
.addAsLibraries(jars)
|
||||
.addClasses(WithinWindowMatcher.class, TimerEvent.class, TimerEventListener.class, ProgrammaticAtFixedRateTimerBean.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_receive_ten_pings() {
|
||||
|
||||
Awaitility.setDefaultTimeout(30, TimeUnit.SECONDS);
|
||||
|
||||
await().untilCall(to(timerEventListener.getEvents()).size(), equalTo(10));
|
||||
TimerEvent firstEvent = timerEventListener.getEvents().get(0);
|
||||
TimerEvent secondEvent = timerEventListener.getEvents().get(1);
|
||||
|
||||
long delay = secondEvent.getTime() - firstEvent.getTime();
|
||||
System.out.println("Actual timeout = " + delay);
|
||||
assertThat(delay, is(WithinWindowMatcher.withinWindow(TIMEOUT, TOLERANCE)));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
package com.baeldung.timer;
|
||||
|
||||
import org.jboss.arquillian.container.test.api.Deployment;
|
||||
import org.jboss.arquillian.junit.Arquillian;
|
||||
import org.jboss.shrinkwrap.api.ShrinkWrap;
|
||||
import org.jboss.shrinkwrap.api.spec.WebArchive;
|
||||
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.io.File;
|
||||
|
||||
import static com.jayway.awaitility.Awaitility.await;
|
||||
import static com.jayway.awaitility.Awaitility.to;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
|
||||
|
||||
@RunWith(Arquillian.class)
|
||||
public class ProgrammaticTimerBeanTest {
|
||||
|
||||
final static long TIMEOUT = 5000l;
|
||||
final static long TOLERANCE = 1000l;
|
||||
|
||||
@Inject
|
||||
TimerEventListener timerEventListener;
|
||||
|
||||
@Deployment
|
||||
public static WebArchive deploy() {
|
||||
File[] jars = Maven.resolver().loadPomFromFile("pom.xml")
|
||||
.resolve("com.jayway.awaitility:awaitility")
|
||||
.withTransitivity().asFile();
|
||||
|
||||
return ShrinkWrap.create(WebArchive.class)
|
||||
.addAsLibraries(jars)
|
||||
.addClasses(WithinWindowMatcher.class, TimerEvent.class, TimerEventListener.class, ProgrammaticTimerBean.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_receive_two_pings() {
|
||||
|
||||
await().untilCall(to(timerEventListener.getEvents()).size(), equalTo(2));
|
||||
|
||||
TimerEvent firstEvent = timerEventListener.getEvents().get(0);
|
||||
TimerEvent secondEvent = timerEventListener.getEvents().get(1);
|
||||
|
||||
long delay = secondEvent.getTime() - firstEvent.getTime();
|
||||
System.out.println("Actual timeout = " + delay);
|
||||
assertThat(delay, is(WithinWindowMatcher.withinWindow(TIMEOUT, TOLERANCE)));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
package com.baeldung.timer;
|
||||
|
||||
import com.jayway.awaitility.Awaitility;
|
||||
import org.jboss.arquillian.container.test.api.Deployment;
|
||||
import org.jboss.arquillian.junit.Arquillian;
|
||||
import org.jboss.shrinkwrap.api.ShrinkWrap;
|
||||
import org.jboss.shrinkwrap.api.spec.WebArchive;
|
||||
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.io.File;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static com.jayway.awaitility.Awaitility.await;
|
||||
import static com.jayway.awaitility.Awaitility.to;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
|
||||
|
||||
@RunWith(Arquillian.class)
|
||||
public class ProgrammaticWithFixedDelayTimerBeanTest {
|
||||
|
||||
final static long TIMEOUT = 15000l;
|
||||
final static long TOLERANCE = 1000l;
|
||||
|
||||
@Inject
|
||||
TimerEventListener timerEventListener;
|
||||
|
||||
@Deployment
|
||||
public static WebArchive deploy() {
|
||||
File[] jars = Maven.resolver().loadPomFromFile("pom.xml")
|
||||
.resolve("com.jayway.awaitility:awaitility")
|
||||
.withTransitivity().asFile();
|
||||
|
||||
return ShrinkWrap.create(WebArchive.class)
|
||||
.addAsLibraries(jars)
|
||||
.addClasses(WithinWindowMatcher.class, TimerEvent.class, TimerEventListener.class, ProgrammaticWithInitialFixedDelayTimerBean.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_receive_two_pings() {
|
||||
|
||||
Awaitility.setDefaultTimeout(30, TimeUnit.SECONDS);
|
||||
|
||||
// 10 seconds pause so we get the startTime and it will trigger first event
|
||||
long startTime = System.currentTimeMillis();
|
||||
|
||||
await().untilCall(to(timerEventListener.getEvents()).size(), equalTo(2));
|
||||
TimerEvent firstEvent = timerEventListener.getEvents().get(0);
|
||||
TimerEvent secondEvent = timerEventListener.getEvents().get(1);
|
||||
|
||||
long delay = secondEvent.getTime() - startTime;
|
||||
System.out.println("Actual timeout = " + delay);
|
||||
|
||||
//apx 15 seconds = 10 delay + 2 timers (first after a pause of 10 seconds and the next others every 5 seconds)
|
||||
assertThat(delay, is(WithinWindowMatcher.withinWindow(TIMEOUT, TOLERANCE)));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
package com.baeldung.timer;
|
||||
|
||||
import com.jayway.awaitility.Awaitility;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.jboss.arquillian.container.test.api.Deployment;
|
||||
import org.jboss.arquillian.junit.Arquillian;
|
||||
import org.jboss.shrinkwrap.api.ShrinkWrap;
|
||||
import org.jboss.shrinkwrap.api.spec.WebArchive;
|
||||
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.io.File;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static com.jayway.awaitility.Awaitility.await;
|
||||
import static com.jayway.awaitility.Awaitility.to;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
|
||||
|
||||
@RunWith(Arquillian.class)
|
||||
public class ScheduleTimerBeanTest {
|
||||
|
||||
final static long TIMEOUT = 5000l;
|
||||
final static long TOLERANCE = 1000l;
|
||||
|
||||
@Inject
|
||||
TimerEventListener timerEventListener;
|
||||
|
||||
@Deployment
|
||||
public static WebArchive deploy() {
|
||||
File[] jars = Maven.resolver().loadPomFromFile("pom.xml")
|
||||
.resolve("com.jayway.awaitility:awaitility")
|
||||
.withTransitivity().asFile();
|
||||
|
||||
return ShrinkWrap.create(WebArchive.class)
|
||||
.addAsLibraries(jars)
|
||||
.addClasses(WithinWindowMatcher.class, TimerEvent.class, TimerEventListener.class, ScheduleTimerBean.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_receive_three_pings() {
|
||||
|
||||
Awaitility.setDefaultTimeout(30, TimeUnit.SECONDS);
|
||||
await().untilCall(to(timerEventListener.getEvents()).size(), equalTo(3));
|
||||
|
||||
TimerEvent firstEvent = timerEventListener.getEvents().get(0);
|
||||
TimerEvent secondEvent = timerEventListener.getEvents().get(1);
|
||||
TimerEvent thirdEvent = timerEventListener.getEvents().get(2);
|
||||
|
||||
long delay = secondEvent.getTime() - firstEvent.getTime();
|
||||
assertThat(delay, Matchers.is(WithinWindowMatcher.withinWindow(TIMEOUT, TOLERANCE)));
|
||||
delay = thirdEvent.getTime() - secondEvent.getTime();
|
||||
assertThat(delay, Matchers.is(WithinWindowMatcher.withinWindow(TIMEOUT, TOLERANCE)));
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package com.baeldung.timer;
|
||||
|
||||
import org.hamcrest.BaseMatcher;
|
||||
import org.hamcrest.Description;
|
||||
import org.hamcrest.Matcher;
|
||||
|
||||
class WithinWindowMatcher extends BaseMatcher<Long> {
|
||||
private final long timeout;
|
||||
private final long tolerance;
|
||||
|
||||
public WithinWindowMatcher(long timeout, long tolerance) {
|
||||
this.timeout = timeout;
|
||||
this.tolerance = tolerance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Object item) {
|
||||
final Long actual = (Long) item;
|
||||
return Math.abs(actual - timeout) < tolerance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void describeTo(Description description) {
|
||||
//To change body of implemented methods use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
public static Matcher<Long> withinWindow(final long timeout, final long tolerance) {
|
||||
return new WithinWindowMatcher(timeout, tolerance);
|
||||
}
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" output="target/classes" path="src/main/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="target/classes"/>
|
||||
</classpath>
|
|
@ -0,0 +1 @@
|
|||
/src/main/java/com/baeldung/jooq/introduction/db
|
|
@ -1,29 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>jooq-spring</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.springframework.ide.eclipse.core.springbuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.springframework.ide.eclipse.core.springnature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
|
@ -14,6 +14,19 @@
|
|||
<junit.version>4.12</junit.version>
|
||||
</properties>
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<!-- Import dependency management from Spring Boot -->
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-dependencies</artifactId>
|
||||
<version>1.3.3.RELEASE</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<dependencies>
|
||||
<!-- jOOQ -->
|
||||
<dependency>
|
||||
|
@ -40,6 +53,11 @@
|
|||
<artifactId>spring-jdbc</artifactId>
|
||||
<version>${org.springframework.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-jooq</artifactId>
|
||||
<version>1.3.3.RELEASE</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Logging -->
|
||||
<dependency>
|
||||
|
@ -67,7 +85,7 @@
|
|||
<artifactId>spring-test</artifactId>
|
||||
<version>${org.springframework.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
spring.datasource.url=jdbc:h2:~/jooq
|
||||
spring.datasource.username=sa
|
||||
spring.datasource.password=
|
|
@ -8,12 +8,12 @@ import org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator;
|
|||
import org.springframework.jdbc.support.SQLExceptionTranslator;
|
||||
|
||||
public class ExceptionTranslator extends DefaultExecuteListener {
|
||||
private static final long serialVersionUID = 649359748808106775L;
|
||||
|
||||
@Override
|
||||
public void exception(ExecuteContext context) {
|
||||
SQLDialect dialect = context.configuration().dialect();
|
||||
SQLExceptionTranslator translator = new SQLErrorCodeSQLExceptionTranslator(dialect.name());
|
||||
|
||||
context.exception(translator.translate("Access database using jOOQ", context.sql(), context.sqlException()));
|
||||
}
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
package com.baeldung.jooq.introduction;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import org.h2.jdbcx.JdbcDataSource;
|
||||
import org.jooq.SQLDialect;
|
||||
import org.jooq.impl.DataSourceConnectionProvider;
|
||||
|
@ -17,11 +16,14 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
|||
import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
|
||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
@Configuration
|
||||
@ComponentScan({ "com.baeldung.jooq.introduction.db.public_.tables" })
|
||||
@EnableTransactionManagement
|
||||
@PropertySource("classpath:intro_config.properties")
|
||||
public class PersistenceContext {
|
||||
|
||||
@Autowired
|
||||
private Environment environment;
|
||||
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
package com.baeldung.jooq.introduction;
|
||||
|
||||
import com.baeldung.jooq.introduction.db.public_.tables.Author;
|
||||
import com.baeldung.jooq.introduction.db.public_.tables.AuthorBook;
|
||||
import com.baeldung.jooq.introduction.db.public_.tables.Book;
|
||||
import org.jooq.DSLContext;
|
||||
import org.jooq.Record3;
|
||||
import org.jooq.Result;
|
||||
|
@ -15,6 +12,9 @@ import org.springframework.test.context.ContextConfiguration;
|
|||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import static com.baeldung.jooq.introduction.db.public_.tables.Author.AUTHOR;
|
||||
import static com.baeldung.jooq.introduction.db.public_.tables.AuthorBook.AUTHOR_BOOK;
|
||||
import static com.baeldung.jooq.introduction.db.public_.tables.Book.BOOK;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
@ContextConfiguration(classes = PersistenceContext.class)
|
||||
|
@ -25,61 +25,98 @@ public class QueryTest {
|
|||
@Autowired
|
||||
private DSLContext dsl;
|
||||
|
||||
Author author = Author.AUTHOR;
|
||||
Book book = Book.BOOK;
|
||||
AuthorBook authorBook = AuthorBook.AUTHOR_BOOK;
|
||||
|
||||
@Test
|
||||
public void givenValidData_whenInserting_thenSucceed() {
|
||||
dsl.insertInto(author).set(author.ID, 4).set(author.FIRST_NAME, "Herbert").set(author.LAST_NAME, "Schildt").execute();
|
||||
dsl.insertInto(book).set(book.ID, 4).set(book.TITLE, "A Beginner's Guide").execute();
|
||||
dsl.insertInto(authorBook).set(authorBook.AUTHOR_ID, 4).set(authorBook.BOOK_ID, 4).execute();
|
||||
Result<Record3<Integer, String, Integer>> result = dsl.select(author.ID, author.LAST_NAME, DSL.count()).from(author).join(authorBook).on(author.ID.equal(authorBook.AUTHOR_ID)).join(book).on(authorBook.BOOK_ID.equal(book.ID))
|
||||
.groupBy(author.LAST_NAME).fetch();
|
||||
dsl.insertInto(AUTHOR)
|
||||
.set(AUTHOR.ID, 4)
|
||||
.set(AUTHOR.FIRST_NAME, "Herbert")
|
||||
.set(AUTHOR.LAST_NAME, "Schildt")
|
||||
.execute();
|
||||
|
||||
dsl.insertInto(BOOK)
|
||||
.set(BOOK.ID, 4)
|
||||
.set(BOOK.TITLE, "A Beginner's Guide")
|
||||
.execute();
|
||||
|
||||
dsl.insertInto(AUTHOR_BOOK)
|
||||
.set(AUTHOR_BOOK.AUTHOR_ID, 4)
|
||||
.set(AUTHOR_BOOK.BOOK_ID, 4)
|
||||
.execute();
|
||||
|
||||
final Result<Record3<Integer, String, Integer>> result = dsl.select(AUTHOR.ID, AUTHOR.LAST_NAME, DSL.count())
|
||||
.from(AUTHOR)
|
||||
.join(AUTHOR_BOOK).on(AUTHOR.ID.equal(AUTHOR_BOOK.AUTHOR_ID))
|
||||
.join(BOOK).on(AUTHOR_BOOK.BOOK_ID.equal(BOOK.ID))
|
||||
.groupBy(AUTHOR.LAST_NAME).fetch();
|
||||
|
||||
assertEquals(3, result.size());
|
||||
assertEquals("Sierra", result.getValue(0, author.LAST_NAME));
|
||||
assertEquals("Sierra", result.getValue(0, AUTHOR.LAST_NAME));
|
||||
assertEquals(Integer.valueOf(2), result.getValue(0, DSL.count()));
|
||||
assertEquals("Schildt", result.getValue(2, author.LAST_NAME));
|
||||
assertEquals("Schildt", result.getValue(2, AUTHOR.LAST_NAME));
|
||||
assertEquals(Integer.valueOf(1), result.getValue(2, DSL.count()));
|
||||
}
|
||||
|
||||
@Test(expected = DataAccessException.class)
|
||||
public void givenInvalidData_whenInserting_thenFail() {
|
||||
dsl.insertInto(authorBook).set(authorBook.AUTHOR_ID, 4).set(authorBook.BOOK_ID, 5).execute();
|
||||
dsl.insertInto(AUTHOR_BOOK).set(AUTHOR_BOOK.AUTHOR_ID, 4).set(AUTHOR_BOOK.BOOK_ID, 5).execute();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenValidData_whenUpdating_thenSucceed() {
|
||||
dsl.update(author).set(author.LAST_NAME, "Baeldung").where(author.ID.equal(3)).execute();
|
||||
dsl.update(book).set(book.TITLE, "Building your REST API with Spring").where(book.ID.equal(3)).execute();
|
||||
dsl.insertInto(authorBook).set(authorBook.AUTHOR_ID, 3).set(authorBook.BOOK_ID, 3).execute();
|
||||
Result<Record3<Integer, String, String>> result = dsl.select(author.ID, author.LAST_NAME, book.TITLE).from(author).join(authorBook).on(author.ID.equal(authorBook.AUTHOR_ID)).join(book).on(authorBook.BOOK_ID.equal(book.ID)).where(author.ID.equal(3))
|
||||
dsl.update(AUTHOR)
|
||||
.set(AUTHOR.LAST_NAME, "Baeldung")
|
||||
.where(AUTHOR.ID.equal(3))
|
||||
.execute();
|
||||
|
||||
dsl.update(BOOK)
|
||||
.set(BOOK.TITLE, "Building your REST API with Spring")
|
||||
.where(BOOK.ID.equal(3)).execute();
|
||||
|
||||
dsl.insertInto(AUTHOR_BOOK)
|
||||
.set(AUTHOR_BOOK.AUTHOR_ID, 3)
|
||||
.set(AUTHOR_BOOK.BOOK_ID, 3)
|
||||
.execute();
|
||||
|
||||
final Result<Record3<Integer, String, String>> result = dsl.select(AUTHOR.ID, AUTHOR.LAST_NAME, BOOK.TITLE)
|
||||
.from(AUTHOR)
|
||||
.join(AUTHOR_BOOK).on(AUTHOR.ID.equal(AUTHOR_BOOK.AUTHOR_ID))
|
||||
.join(BOOK).on(AUTHOR_BOOK.BOOK_ID.equal(BOOK.ID))
|
||||
.where(AUTHOR.ID.equal(3))
|
||||
.fetch();
|
||||
|
||||
assertEquals(1, result.size());
|
||||
assertEquals(Integer.valueOf(3), result.getValue(0, author.ID));
|
||||
assertEquals("Baeldung", result.getValue(0, author.LAST_NAME));
|
||||
assertEquals("Building your REST API with Spring", result.getValue(0, book.TITLE));
|
||||
assertEquals(Integer.valueOf(3), result.getValue(0, AUTHOR.ID));
|
||||
assertEquals("Baeldung", result.getValue(0, AUTHOR.LAST_NAME));
|
||||
assertEquals("Building your REST API with Spring", result.getValue(0, BOOK.TITLE));
|
||||
}
|
||||
|
||||
@Test(expected = DataAccessException.class)
|
||||
public void givenInvalidData_whenUpdating_thenFail() {
|
||||
dsl.update(authorBook).set(authorBook.AUTHOR_ID, 4).set(authorBook.BOOK_ID, 5).execute();
|
||||
dsl.update(AUTHOR_BOOK)
|
||||
.set(AUTHOR_BOOK.AUTHOR_ID, 4)
|
||||
.set(AUTHOR_BOOK.BOOK_ID, 5)
|
||||
.execute();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenValidData_whenDeleting_thenSucceed() {
|
||||
dsl.delete(author).where(author.ID.lt(3)).execute();
|
||||
Result<Record3<Integer, String, String>> result = dsl.select(author.ID, author.FIRST_NAME, author.LAST_NAME).from(author).fetch();
|
||||
dsl.delete(AUTHOR)
|
||||
.where(AUTHOR.ID.lt(3))
|
||||
.execute();
|
||||
|
||||
final Result<Record3<Integer, String, String>> result = dsl.select(AUTHOR.ID, AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME)
|
||||
.from(AUTHOR)
|
||||
.fetch();
|
||||
|
||||
assertEquals(1, result.size());
|
||||
assertEquals("Bryan", result.getValue(0, author.FIRST_NAME));
|
||||
assertEquals("Basham", result.getValue(0, author.LAST_NAME));
|
||||
assertEquals("Bryan", result.getValue(0, AUTHOR.FIRST_NAME));
|
||||
assertEquals("Basham", result.getValue(0, AUTHOR.LAST_NAME));
|
||||
}
|
||||
|
||||
@Test(expected = DataAccessException.class)
|
||||
public void givenInvalidData_whenDeleting_thenFail() {
|
||||
dsl.delete(book).where(book.ID.equal(1)).execute();
|
||||
dsl.delete(BOOK)
|
||||
.where(BOOK.ID.equal(1))
|
||||
.execute();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
package com.baeldung.jooq.springboot;
|
||||
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||
|
||||
@SpringBootApplication
|
||||
@EnableTransactionManagement
|
||||
public class Application {
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package com.baeldung.jooq.springboot;
|
||||
|
||||
import com.baeldung.jooq.introduction.ExceptionTranslator;
|
||||
import org.jooq.impl.DataSourceConnectionProvider;
|
||||
import org.jooq.impl.DefaultConfiguration;
|
||||
import org.jooq.impl.DefaultDSLContext;
|
||||
import org.jooq.impl.DefaultExecuteListenerProvider;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
@Configuration
|
||||
public class InitialConfiguration {
|
||||
|
||||
@Autowired
|
||||
private DataSource dataSource;
|
||||
|
||||
@Bean
|
||||
public DataSourceConnectionProvider connectionProvider() {
|
||||
return new DataSourceConnectionProvider(new TransactionAwareDataSourceProxy(dataSource));
|
||||
}
|
||||
|
||||
@Bean
|
||||
public DefaultDSLContext dsl() {
|
||||
return new DefaultDSLContext(configuration());
|
||||
}
|
||||
|
||||
public DefaultConfiguration configuration() {
|
||||
DefaultConfiguration jooqConfiguration = new DefaultConfiguration();
|
||||
|
||||
jooqConfiguration.set(connectionProvider());
|
||||
jooqConfiguration.set(new DefaultExecuteListenerProvider(new ExceptionTranslator()));
|
||||
|
||||
return jooqConfiguration;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,124 @@
|
|||
package com.baeldung.jooq.springboot;
|
||||
|
||||
import org.jooq.DSLContext;
|
||||
import org.jooq.Record3;
|
||||
import org.jooq.Result;
|
||||
import org.jooq.impl.DSL;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.SpringApplicationConfiguration;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import static com.baeldung.jooq.introduction.db.public_.tables.Author.AUTHOR;
|
||||
import static com.baeldung.jooq.introduction.db.public_.tables.AuthorBook.AUTHOR_BOOK;
|
||||
import static com.baeldung.jooq.introduction.db.public_.tables.Book.BOOK;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
@SpringApplicationConfiguration(Application.class)
|
||||
@Transactional("transactionManager")
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
public class SpringBootTest {
|
||||
|
||||
@Autowired
|
||||
private DSLContext dsl;
|
||||
|
||||
@Test
|
||||
public void givenValidData_whenInserting_thenSucceed() {
|
||||
dsl.insertInto(AUTHOR)
|
||||
.set(AUTHOR.ID, 4)
|
||||
.set(AUTHOR.FIRST_NAME, "Herbert")
|
||||
.set(AUTHOR.LAST_NAME, "Schildt")
|
||||
.execute();
|
||||
|
||||
dsl.insertInto(BOOK)
|
||||
.set(BOOK.ID, 4)
|
||||
.set(BOOK.TITLE, "A Beginner's Guide")
|
||||
.execute();
|
||||
|
||||
dsl.insertInto(AUTHOR_BOOK)
|
||||
.set(AUTHOR_BOOK.AUTHOR_ID, 4)
|
||||
.set(AUTHOR_BOOK.BOOK_ID, 4)
|
||||
.execute();
|
||||
|
||||
final Result<Record3<Integer, String, Integer>> result = dsl.select(AUTHOR.ID, AUTHOR.LAST_NAME, DSL.count())
|
||||
.from(AUTHOR).join(AUTHOR_BOOK).on(AUTHOR.ID.equal(AUTHOR_BOOK.AUTHOR_ID))
|
||||
.join(BOOK).on(AUTHOR_BOOK.BOOK_ID.equal(BOOK.ID))
|
||||
.groupBy(AUTHOR.LAST_NAME)
|
||||
.fetch();
|
||||
|
||||
assertEquals(3, result.size());
|
||||
assertEquals("Sierra", result.getValue(0, AUTHOR.LAST_NAME));
|
||||
assertEquals(Integer.valueOf(2), result.getValue(0, DSL.count()));
|
||||
assertEquals("Schildt", result.getValue(2, AUTHOR.LAST_NAME));
|
||||
assertEquals(Integer.valueOf(1), result.getValue(2, DSL.count()));
|
||||
}
|
||||
|
||||
@Test(expected = DataAccessException.class)
|
||||
public void givenInvalidData_whenInserting_thenFail() {
|
||||
dsl.insertInto(AUTHOR_BOOK)
|
||||
.set(AUTHOR_BOOK.AUTHOR_ID, 4)
|
||||
.set(AUTHOR_BOOK.BOOK_ID, 5)
|
||||
.execute();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenValidData_whenUpdating_thenSucceed() {
|
||||
dsl.update(AUTHOR)
|
||||
.set(AUTHOR.LAST_NAME, "Baeldung")
|
||||
.where(AUTHOR.ID.equal(3))
|
||||
.execute();
|
||||
|
||||
dsl.update(BOOK)
|
||||
.set(BOOK.TITLE, "Building your REST API with Spring")
|
||||
.where(BOOK.ID.equal(3))
|
||||
.execute();
|
||||
|
||||
dsl.insertInto(AUTHOR_BOOK)
|
||||
.set(AUTHOR_BOOK.AUTHOR_ID, 3)
|
||||
.set(AUTHOR_BOOK.BOOK_ID, 3)
|
||||
.execute();
|
||||
|
||||
final Result<Record3<Integer, String, String>> result = dsl.select(AUTHOR.ID, AUTHOR.LAST_NAME, BOOK.TITLE)
|
||||
.from(AUTHOR).join(AUTHOR_BOOK).on(AUTHOR.ID.equal(AUTHOR_BOOK.AUTHOR_ID))
|
||||
.join(BOOK).on(AUTHOR_BOOK.BOOK_ID.equal(BOOK.ID))
|
||||
.where(AUTHOR.ID.equal(3))
|
||||
.fetch();
|
||||
|
||||
assertEquals(1, result.size());
|
||||
assertEquals(Integer.valueOf(3), result.getValue(0, AUTHOR.ID));
|
||||
assertEquals("Baeldung", result.getValue(0, AUTHOR.LAST_NAME));
|
||||
assertEquals("Building your REST API with Spring", result.getValue(0, BOOK.TITLE));
|
||||
}
|
||||
|
||||
@Test(expected = DataAccessException.class)
|
||||
public void givenInvalidData_whenUpdating_thenFail() {
|
||||
dsl.update(AUTHOR_BOOK)
|
||||
.set(AUTHOR_BOOK.AUTHOR_ID, 4)
|
||||
.set(AUTHOR_BOOK.BOOK_ID, 5)
|
||||
.execute();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenValidData_whenDeleting_thenSucceed() {
|
||||
dsl.delete(AUTHOR)
|
||||
.where(AUTHOR.ID.lt(3))
|
||||
.execute();
|
||||
|
||||
final Result<Record3<Integer, String, String>> result = dsl.select(AUTHOR.ID, AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME)
|
||||
.from(AUTHOR).fetch();
|
||||
|
||||
assertEquals(1, result.size());
|
||||
assertEquals("Bryan", result.getValue(0, AUTHOR.FIRST_NAME));
|
||||
assertEquals("Basham", result.getValue(0, AUTHOR.LAST_NAME));
|
||||
}
|
||||
|
||||
@Test(expected = DataAccessException.class)
|
||||
public void givenInvalidData_whenDeleting_thenFail() {
|
||||
dsl.delete(BOOK)
|
||||
.where(BOOK.ID.equal(1))
|
||||
.execute();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,151 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<name>lombok</name>
|
||||
|
||||
<groupId>com.baeldung</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>0.1-SNAPSHOT</version>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<!-- Check for the most recent available version:
|
||||
https://projectlombok.org/changelog.html -->
|
||||
<version>${lombok.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.hibernate.javax.persistence</groupId>
|
||||
<artifactId>hibernate-jpa-2.1-api</artifactId>
|
||||
<version>${hibernate-jpa-2.1-api.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- logging -->
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
<version>${org.slf4j.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-core</artifactId>
|
||||
<version>${logback.version}</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- test scoped -->
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>${junit.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
<finalName>lombok</finalName>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<filtering>true</filtering>
|
||||
</resource>
|
||||
</resources>
|
||||
|
||||
<plugins>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>${maven-compiler-plugin.version}</version>
|
||||
<configuration>
|
||||
<source>${maven.compiler.source}</source>
|
||||
<target>${maven.compiler.target}</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>${maven-surefire-plugin.version}</version>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok-maven-plugin</artifactId>
|
||||
<version>${delombok-maven-plugin.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>delombok</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals>
|
||||
<goal>delombok</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
|
||||
<addOutputDirectory>false</addOutputDirectory>
|
||||
<formatPreferences>
|
||||
<javaLangAsFQN>skip</javaLangAsFQN>
|
||||
</formatPreferences>
|
||||
<verbose>false</verbose>
|
||||
</configuration>
|
||||
</execution>
|
||||
<!-- This is for delomboking also your tests sources.
|
||||
<execution>
|
||||
<id>test-delombok</id>
|
||||
<phase>generate-test-sources</phase>
|
||||
<goals>
|
||||
<goal>testDelombok</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<verbose>false</verbose>
|
||||
</configuration>
|
||||
</execution>
|
||||
-->
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
|
||||
</build>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
|
||||
<!-- lombok: https://projectlombok.org/changelog.html -->
|
||||
<lombok.version>1.16.8</lombok.version>
|
||||
|
||||
<!-- various -->
|
||||
<hibernate-jpa-2.1-api.version>1.0.0.Final</hibernate-jpa-2.1-api.version>
|
||||
|
||||
<!-- logging -->
|
||||
<org.slf4j.version>1.7.13</org.slf4j.version>
|
||||
<logback.version>1.1.3</logback.version>
|
||||
|
||||
<!-- testing -->
|
||||
<junit.version>4.12</junit.version>
|
||||
|
||||
<!-- maven plugins -->
|
||||
<maven-compiler-plugin.version>3.5.1</maven-compiler-plugin.version>
|
||||
<maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
|
||||
|
||||
<!-- delombok maven plugin -->
|
||||
<delombok-maven-plugin.version>${lombok.version}.0</delombok-maven-plugin.version>
|
||||
</properties>
|
||||
|
||||
</project>
|
|
@ -0,0 +1,22 @@
|
|||
package com.baeldung.lombok.intro;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Builder
|
||||
@Slf4j
|
||||
@Getter
|
||||
public class ApiClientConfiguration {
|
||||
|
||||
private String host;
|
||||
private int port;
|
||||
private boolean useHttps;
|
||||
|
||||
private long connectTimeout;
|
||||
private long readTimeout;
|
||||
|
||||
private String username;
|
||||
private String password;
|
||||
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package com.baeldung.lombok.intro;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ContactInformationSupport implements HasContactInformation {
|
||||
|
||||
private String firstName;
|
||||
private String lastName;
|
||||
private String phoneNr;
|
||||
|
||||
@Override
|
||||
public String getFullName() {
|
||||
return getFirstName() + " " + getLastName();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
package com.baeldung.lombok.intro;
|
||||
|
||||
public interface HasContactInformation {
|
||||
|
||||
String getFirstName();
|
||||
void setFirstName(String firstName);
|
||||
|
||||
String getFullName();
|
||||
|
||||
String getLastName();
|
||||
void setLastName(String lastName);
|
||||
|
||||
String getPhoneNr();
|
||||
void setPhoneNr(String phoneNr);
|
||||
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package com.baeldung.lombok.intro;
|
||||
|
||||
import java.net.URL;
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.NonNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@Accessors(fluent = true) @Getter
|
||||
@EqualsAndHashCode(of = {"authToken"})
|
||||
public class LoginResult {
|
||||
|
||||
private final @NonNull Instant loginTs;
|
||||
|
||||
private final @NonNull String authToken;
|
||||
private final @NonNull Duration tokenValidity;
|
||||
|
||||
private final @NonNull URL tokenRefreshUrl;
|
||||
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package com.baeldung.lombok.intro;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.OneToMany;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
import lombok.experimental.Delegate;
|
||||
|
||||
@Entity
|
||||
@Getter @Setter @NoArgsConstructor // <--- THIS is it
|
||||
@ToString(exclude = {"events"})
|
||||
public class User implements Serializable, HasContactInformation {
|
||||
|
||||
private @Id @Setter(AccessLevel.PROTECTED) Long id; // will be set when persisting
|
||||
|
||||
private String nickname;
|
||||
|
||||
// Whichever other User-specific attributes
|
||||
|
||||
@Delegate(types = {HasContactInformation.class})
|
||||
private final ContactInformationSupport contactInformation = new ContactInformationSupport();
|
||||
|
||||
// User itelf will implement all contact information by delegation
|
||||
|
||||
@OneToMany(mappedBy = "user")
|
||||
private List<UserEvent> events;
|
||||
|
||||
public User(String nickname, String firstName, String lastName, String phoneNr) {
|
||||
this.nickname = nickname;
|
||||
contactInformation.setFirstName(firstName);
|
||||
contactInformation.setLastName(lastName);
|
||||
contactInformation.setPhoneNr(phoneNr);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
package com.baeldung.lombok.intro;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.ManyToOne;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Entity
|
||||
@NoArgsConstructor @Getter @Setter
|
||||
public class UserEvent implements Serializable {
|
||||
|
||||
// This class is just for sample purposes.
|
||||
|
||||
private @Id @Setter(AccessLevel.PROTECTED) Long id;
|
||||
|
||||
@ManyToOne
|
||||
private User user;
|
||||
|
||||
public UserEvent(User user) {
|
||||
this.user = user;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package com.baeldung.lombok.intro;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
|
||||
import com.baeldung.lombok.intro.ApiClientConfiguration.ApiClientConfigurationBuilder;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class ApiClientConfigurationTest {
|
||||
|
||||
@Test
|
||||
public void givenAnnotatedConfiguration_thenCanBeBuiltViaBuilder() {
|
||||
ApiClientConfiguration config =
|
||||
new ApiClientConfigurationBuilder()
|
||||
.host("api.server.com")
|
||||
.port(443)
|
||||
.useHttps(true)
|
||||
.connectTimeout(15_000L)
|
||||
.readTimeout(5_000L)
|
||||
.username("myusername")
|
||||
.password("secret")
|
||||
.build();
|
||||
|
||||
Assert.assertEquals(config.getHost(), "api.server.com");
|
||||
Assert.assertEquals(config.getPort(), 443);
|
||||
Assert.assertEquals(config.isUseHttps(), true);
|
||||
Assert.assertEquals(config.getConnectTimeout(), 15_000L);
|
||||
Assert.assertEquals(config.getReadTimeout(), 5_000L);
|
||||
Assert.assertEquals(config.getUsername(), "myusername");
|
||||
Assert.assertEquals(config.getPassword(), "secret");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenAnnotatedConfiguration_thenHasLoggerInstance() throws NoSuchFieldException {
|
||||
Field loggerInstance = ApiClientConfiguration.class.getDeclaredField("log");
|
||||
int modifiers = loggerInstance.getModifiers();
|
||||
Assert.assertTrue(Modifier.isPrivate(modifiers));
|
||||
Assert.assertTrue(Modifier.isStatic(modifiers));
|
||||
Assert.assertTrue(Modifier.isFinal(modifiers));
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
package com.baeldung.lombok.intro;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class LoginResultTest {
|
||||
|
||||
@Test
|
||||
public void givenAnnotatedLoginResult_thenHasConstructorForAllFinalFields()
|
||||
throws MalformedURLException {
|
||||
/* LoginResult loginResult = */ new LoginResult(
|
||||
Instant.now(),
|
||||
"apitoken",
|
||||
Duration.ofHours(1),
|
||||
new URL("https://api.product.com/token-refresh"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenAnnotatedLoginResult_thenHasFluentGetters()
|
||||
throws MalformedURLException {
|
||||
Instant loginTs = Instant.now();
|
||||
LoginResult loginResult = new LoginResult(
|
||||
loginTs,
|
||||
"apitoken",
|
||||
Duration.ofHours(1),
|
||||
new URL("https://api.product.com/token-refresh"));
|
||||
|
||||
Assert.assertEquals(loginResult.loginTs(), loginTs);
|
||||
Assert.assertEquals(loginResult.authToken(), "apitoken");
|
||||
Assert.assertEquals(loginResult.tokenValidity(), Duration.ofHours(1));
|
||||
Assert.assertEquals(loginResult.tokenRefreshUrl(), new URL("https://api.product.com/token-refresh"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenAnnotatedLoginResult_whenSameApiToken_thenEqualInstances()
|
||||
throws MalformedURLException {
|
||||
String theSameApiToken = "testapitoken";
|
||||
|
||||
LoginResult loginResult1 = new LoginResult(
|
||||
Instant.now(),
|
||||
theSameApiToken,
|
||||
Duration.ofHours(1),
|
||||
new URL("https://api.product.com/token-refresh"));
|
||||
|
||||
LoginResult loginResult2 = new LoginResult(
|
||||
Instant.now(),
|
||||
theSameApiToken,
|
||||
Duration.ofHours(2),
|
||||
new URL("https://api.product.com/token-refresh-alt"));
|
||||
|
||||
Assert.assertEquals(loginResult1, loginResult2);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
package com.baeldung.lombok.intro;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class UserTest {
|
||||
|
||||
@Test
|
||||
public void givenAnnotatedUser_thenHasEmptyConstructor() {
|
||||
/* User user = */ new User();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenAnnotatedUser_thenHasGettersAndSetters() {
|
||||
User user = new User("testnickname", "Test", "JUnit", "123456");
|
||||
|
||||
Assert.assertEquals("testnickname", user.getNickname());
|
||||
Assert.assertEquals("Test", user.getFirstName());
|
||||
Assert.assertEquals("JUnit", user.getLastName());
|
||||
Assert.assertEquals("123456", user.getPhoneNr());
|
||||
|
||||
user.setNickname("testnickname2");
|
||||
user.setFirstName("Test2");
|
||||
user.setLastName("JUnit2");
|
||||
user.setPhoneNr("654321");
|
||||
|
||||
Assert.assertEquals("testnickname2", user.getNickname());
|
||||
Assert.assertEquals("Test2", user.getFirstName());
|
||||
Assert.assertEquals("JUnit2", user.getLastName());
|
||||
Assert.assertEquals("654321", user.getPhoneNr());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenAnnotatedUser_thenHasProtectedSetId() throws NoSuchMethodException {
|
||||
Method setIdMethod = User.class.getDeclaredMethod("setId", Long.class);
|
||||
int modifiers = setIdMethod.getModifiers();
|
||||
Assert.assertTrue(Modifier.isProtected(modifiers));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenAnnotatedUser_thenImplementsHasContactInformation() {
|
||||
User user = new User("testnickname3", "Test3", "JUnit3", "987654");
|
||||
Assert.assertTrue(user instanceof HasContactInformation);
|
||||
|
||||
Assert.assertEquals("Test3", user.getFirstName());
|
||||
Assert.assertEquals("JUnit3", user.getLastName());
|
||||
Assert.assertEquals("987654", user.getPhoneNr());
|
||||
Assert.assertEquals("Test3 JUnit3", user.getFullName());
|
||||
|
||||
user.setFirstName("Test4");
|
||||
user.setLastName("JUnit4");
|
||||
user.setPhoneNr("456789");
|
||||
|
||||
Assert.assertEquals("Test4", user.getFirstName());
|
||||
Assert.assertEquals("JUnit4", user.getLastName());
|
||||
Assert.assertEquals("456789", user.getPhoneNr());
|
||||
Assert.assertEquals("Test4 JUnit4", user.getFullName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenAnnotatedUser_whenHasEvents_thenToStringDumpsNoEvents() {
|
||||
User user = new User("testnickname", "Test", "JUnit", "123456");
|
||||
List<UserEvent> events = Arrays.asList(new UserEvent(user), new UserEvent(user));
|
||||
user.setEvents(events);
|
||||
Assert.assertFalse(user.toString().contains("events"));
|
||||
}
|
||||
|
||||
}
|
4
pom.xml
|
@ -20,8 +20,10 @@
|
|||
<module>httpclient</module>
|
||||
<module>jackson</module>
|
||||
<module>javaxval</module>
|
||||
<module>jooq-spring</module>
|
||||
<module>json-path</module>
|
||||
<module>mockito</module>
|
||||
<module>jee7schedule</module>
|
||||
<!-- <module>jpa-storedprocedure</module> -->
|
||||
<module>querydsl</module>
|
||||
<!-- <module>raml</module> -->
|
||||
|
@ -65,7 +67,9 @@
|
|||
<module>spring-thymeleaf</module>
|
||||
<module>spring-zuul</module>
|
||||
<module>jsf</module>
|
||||
<module>xml</module>
|
||||
|
||||
<module>lombok</module>
|
||||
</modules>
|
||||
|
||||
</project>
|
||||
|
|
|
@ -1,36 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" output="target/classes" path="src/main/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
|
||||
<attributes>
|
||||
<attribute name="owner.project.facets" value="java"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="target/classes"/>
|
||||
</classpath>
|
|
@ -1,7 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType">
|
||||
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_BUILDER_ENABLED" value="false"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_DISABLED_BUILDER" value="org.eclipse.wst.jsdt.core.javascriptValidator"/>
|
||||
<mapAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS"/>
|
||||
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
|
||||
</launchConfiguration>
|
|
@ -10,4 +10,8 @@
|
|||
# Packaged files #
|
||||
*.jar
|
||||
*.war
|
||||
*.ear
|
||||
*.ear
|
||||
|
||||
.externalToolBuilders
|
||||
.settings
|
||||
.springBeans
|
|
@ -1,36 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>rest-testing</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.wst.common.project.facet.core.builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.wst.validation.validationbuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
|
||||
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
|
@ -1,5 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src/main/webapp"/>
|
||||
<classpathentry kind="output" path=""/>
|
||||
</classpath>
|
|
@ -1,95 +0,0 @@
|
|||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
|
||||
org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
|
||||
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
|
||||
org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
|
||||
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
|
||||
org.eclipse.jdt.core.compiler.problem.deadCode=warning
|
||||
org.eclipse.jdt.core.compiler.problem.deprecation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.fieldHiding=error
|
||||
org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
|
||||
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
|
||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
|
||||
org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
|
||||
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.localVariableHiding=error
|
||||
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
|
||||
org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
|
||||
org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
|
||||
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
|
||||
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
|
||||
org.eclipse.jdt.core.compiler.problem.nullReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
|
||||
org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
|
||||
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
|
||||
org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
|
||||
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
|
||||
org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
|
||||
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedImport=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
|
||||
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
|
||||
org.eclipse.jdt.core.compiler.source=1.8
|
|
@ -1,55 +0,0 @@
|
|||
#Sat Jan 21 23:04:06 EET 2012
|
||||
eclipse.preferences.version=1
|
||||
editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
|
||||
sp_cleanup.add_default_serial_version_id=true
|
||||
sp_cleanup.add_generated_serial_version_id=false
|
||||
sp_cleanup.add_missing_annotations=true
|
||||
sp_cleanup.add_missing_deprecated_annotations=true
|
||||
sp_cleanup.add_missing_methods=false
|
||||
sp_cleanup.add_missing_nls_tags=false
|
||||
sp_cleanup.add_missing_override_annotations=true
|
||||
sp_cleanup.add_missing_override_annotations_interface_methods=true
|
||||
sp_cleanup.add_serial_version_id=false
|
||||
sp_cleanup.always_use_blocks=true
|
||||
sp_cleanup.always_use_parentheses_in_expressions=true
|
||||
sp_cleanup.always_use_this_for_non_static_field_access=false
|
||||
sp_cleanup.always_use_this_for_non_static_method_access=false
|
||||
sp_cleanup.convert_to_enhanced_for_loop=true
|
||||
sp_cleanup.correct_indentation=true
|
||||
sp_cleanup.format_source_code=true
|
||||
sp_cleanup.format_source_code_changes_only=true
|
||||
sp_cleanup.make_local_variable_final=true
|
||||
sp_cleanup.make_parameters_final=true
|
||||
sp_cleanup.make_private_fields_final=false
|
||||
sp_cleanup.make_type_abstract_if_missing_method=false
|
||||
sp_cleanup.make_variable_declarations_final=true
|
||||
sp_cleanup.never_use_blocks=false
|
||||
sp_cleanup.never_use_parentheses_in_expressions=false
|
||||
sp_cleanup.on_save_use_additional_actions=true
|
||||
sp_cleanup.organize_imports=true
|
||||
sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
|
||||
sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
|
||||
sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
|
||||
sp_cleanup.qualify_static_member_accesses_with_declaring_class=true
|
||||
sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
|
||||
sp_cleanup.remove_private_constructors=true
|
||||
sp_cleanup.remove_trailing_whitespaces=true
|
||||
sp_cleanup.remove_trailing_whitespaces_all=true
|
||||
sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
|
||||
sp_cleanup.remove_unnecessary_casts=true
|
||||
sp_cleanup.remove_unnecessary_nls_tags=false
|
||||
sp_cleanup.remove_unused_imports=true
|
||||
sp_cleanup.remove_unused_local_variables=false
|
||||
sp_cleanup.remove_unused_private_fields=true
|
||||
sp_cleanup.remove_unused_private_members=false
|
||||
sp_cleanup.remove_unused_private_methods=true
|
||||
sp_cleanup.remove_unused_private_types=true
|
||||
sp_cleanup.sort_members=false
|
||||
sp_cleanup.sort_members_all=false
|
||||
sp_cleanup.use_blocks=false
|
||||
sp_cleanup.use_blocks_only_for_return_and_throw=false
|
||||
sp_cleanup.use_parentheses_in_expressions=false
|
||||
sp_cleanup.use_this_for_non_static_field_access=true
|
||||
sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
|
||||
sp_cleanup.use_this_for_non_static_method_access=true
|
||||
sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
|