diff --git a/.gitignore b/.gitignore index 99c2a80..1714682 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +build + .gradle gradlew* gradle/ diff --git a/.gradle/2.2/taskArtifacts/cache.properties.lock b/.gradle/2.2/taskArtifacts/cache.properties.lock index e244035..32044f7 100644 Binary files a/.gradle/2.2/taskArtifacts/cache.properties.lock and b/.gradle/2.2/taskArtifacts/cache.properties.lock differ diff --git a/.gradle/2.2/taskArtifacts/fileHashes.bin b/.gradle/2.2/taskArtifacts/fileHashes.bin index 402cf5c..0f7e9d1 100644 Binary files a/.gradle/2.2/taskArtifacts/fileHashes.bin and b/.gradle/2.2/taskArtifacts/fileHashes.bin differ diff --git a/.gradle/2.2/taskArtifacts/fileSnapshots.bin b/.gradle/2.2/taskArtifacts/fileSnapshots.bin index 892b3d1..9f9d8c4 100644 Binary files a/.gradle/2.2/taskArtifacts/fileSnapshots.bin and b/.gradle/2.2/taskArtifacts/fileSnapshots.bin differ diff --git a/.gradle/2.2/taskArtifacts/outputFileStates.bin b/.gradle/2.2/taskArtifacts/outputFileStates.bin index 3db93da..4e5da54 100644 Binary files a/.gradle/2.2/taskArtifacts/outputFileStates.bin and b/.gradle/2.2/taskArtifacts/outputFileStates.bin differ diff --git a/.gradle/2.2/taskArtifacts/taskArtifacts.bin b/.gradle/2.2/taskArtifacts/taskArtifacts.bin index de9a084..045fb26 100644 Binary files a/.gradle/2.2/taskArtifacts/taskArtifacts.bin and b/.gradle/2.2/taskArtifacts/taskArtifacts.bin differ diff --git a/.idea/modules/farsite_main.iml b/.idea/modules/farsite_main.iml index bc58c18..37c6e62 100644 --- a/.idea/modules/farsite_main.iml +++ b/.idea/modules/farsite_main.iml @@ -39,6 +39,16 @@ + + + + + + + + + + @@ -50,8 +60,10 @@ + + diff --git a/.idea/modules/farsite_test.iml b/.idea/modules/farsite_test.iml index 85b0f87..d09bb0b 100644 --- a/.idea/modules/farsite_test.iml +++ b/.idea/modules/farsite_test.iml @@ -51,8 +51,10 @@ + + @@ -68,6 +70,12 @@ + + + + + + @@ -84,7 +92,6 @@ - diff --git a/NOTES b/NOTES new file mode 100644 index 0000000..4cbded8 --- /dev/null +++ b/NOTES @@ -0,0 +1,50 @@ +http://wiki.eclipse.org/EclipseLink/Examples/JPA/Employee +http://java-persistence-performance.blogspot.com/2013/06/cool-performance-features-of.html + +pkill -9 crdb && rm -rf /tmp/far/* && (cd /tmp/far; crdb start --background --http-port=9090 --vmodule=executor=2; sleep 1) && echo "create database farsite;" | crdb sql && tail -f /tmp/far/cockroach-data/logs/crdb.log + + +// jpa weaving +def entitiesBasePackage = 'com.example.farsite.model' + +compileJava { + destinationDir file("$buildDir/compiled-classes") +} + +task copyNonPersistentClasses(type: Copy, dependsOn: compileJava) { + from "$buildDir/compiled-classes" + into sourceSets.main.output.classesDir + exclude '**/' + entitiesBasePackage.replaceAll('\\.','/') + '/**' + includeEmptyDirs = false +} +task copyPersistentClasses(type: Copy, dependsOn: compileJava) { + from "$buildDir/compiled-classes" + into "$buildDir/unwoven-persistent-classes" + include '**/' + entitiesBasePackage.replaceAll('\\.','/') + '/**' + includeEmptyDirs = false +} +task weaveJpaEntities(type: JavaExec, dependsOn: [copyPersistentClasses,processResources]) { + main = 'org.eclipse.persistence.tools.weaving.jpa.StaticWeave' + classpath configurations.weave.incoming.files + args '-persistenceinfo' + args processResources.destinationDir.absolutePath + args '-classpath' + args configurations.compile.incoming.files.asPath + args '-loglevel' + args 'INFO' + args copyPersistentClasses.destinationDir.absolutePath + args sourceSets.main.output.classesDir.absolutePath + + inputs.files fileTree(copyPersistentClasses.destinationDir),fileTree(processResources.destinationDir).matching({pattern -> pattern.include('**/META-INF/persistence.xml')}) + outputs.dir sourceSets.main.output.classesDir +} +//classes.dependsOn copyNonPersistentClasses,weaveJpaEntities + +dependencies + weave group: 'org.eclipse.persistence', name: 'javax.persistence', version: '2.+' + weave group: 'org.eclipse.persistence', name: 'org.eclipse.persistence.jpa', version: '2.+' + +configurations + weave + +mainClassName = "com.example.farsite.Main" diff --git a/build.gradle b/build.gradle index 07cdd16..63c5119 100644 --- a/build.gradle +++ b/build.gradle @@ -24,20 +24,19 @@ apply plugin: 'com.uber.okbuck' apply plugin: 'nebula.dependency-lock' apply plugin: 'application' -mainClassName = "com.example.farsite.Main" applicationDefaultJvmArgs = ["-Dgreeting.language=en"] +task wrapper(type: Wrapper) { + gradleVersion = '2.2' +} + task execute(type:JavaExec) { classpath = sourceSets.main.runtimeClasspath - main = project.hasProperty("mainClass") ? project.getProperty("mainClass") : "com.example.farsite.Main" -} - -dependencies { - testCompile 'junit:junit:4.12' + main = project.hasProperty("mainClass") ? project.getProperty("mainClass") : "com.example.farsite.test.Main" } jar { - baseName = '' + baseName = 'farsite' version = '0.0.1-SNAPSHOT' } @@ -65,12 +64,18 @@ dependencies { // Some Java Extras compile group: 'javax.inject', name: 'javax.inject', version: '1' + // Apache Commons + compile group: 'commons-codec', name: 'commons-codec', version: '1.+' + // Google Guava, "For all the Goodness(TM)" compile group: 'com.google.guava', name: 'guava', version: '21.+' // Joda Time, "Because time is hard(TM)" compile group: 'joda-time', name: 'joda-time', version: '2.+' + // Flake ID generation + compile group: 'com.github.rholder.fauxflake', name: 'fauxflake-core', version: '1.+' + // Lombok, "Where less is more(TM)" compile group: 'org.projectlombok', name: 'lombok', version: '1.+' @@ -83,7 +88,6 @@ dependencies { compile group: 'org.eclipse.persistence', name: 'javax.persistence', version: '2.+' compile group: 'org.eclipse.persistence', name: 'org.eclipse.persistence.jpa', version: '2.+' - // Dropwizard (aka. CodaHale) Metrics, "Measure all the things!(TM)" compile group: 'io.dropwizard.metrics', name: 'metrics-core', version: '3.+' compile group: 'io.dropwizard.metrics', name: 'metrics-jvm', version: '3.+' @@ -96,11 +100,31 @@ dependencies { compile group: 'org.slf4j', name: 'log4j-over-slf4j', version: '1.+' compile group: 'org.zalando', name: 'logbook-core', version: '1.+' - // Fake data generator compile group: 'com.github.javafaker', name: 'javafaker', version: '0.+' + // Testing + testCompile group: 'junit', name: 'junit', version: '4.+' + testCompile group: 'org.mockito', name: 'mockito-all', version: '1.+' + testCompile group: 'org.assertj', name: 'assertj-core', version: '2.+' + testCompile group: 'com.github.stefanbirkner', name: 'system-rules', version: '1.+' + testCompile group: 'nl.jqno.equalsverifier', name: 'equalsverifier', version: '1.+' + testCompile group: 'org.hamcrest', name: 'hamcrest-core', version: '1.3' + testCompile group: 'org.quicktheories', name: 'quicktheories', version: '0.+' } -task wrapper(type: Wrapper) { - gradleVersion = '2.2' +task performJPAWeaving(type: JavaExec, dependsOn: "compileJava"){ + inputs.dir compileJava.destinationDir + outputs.dir compileJava.destinationDir + main "org.eclipse.persistence.tools.weaving.jpa.StaticWeave" + args "-persistenceinfo", + "src/main/resources", + compileJava.destinationDir.getAbsolutePath(), + compileJava.destinationDir.getAbsolutePath() + classpath = configurations.compile +} + +tasks.withType(JavaCompile){ + doLast{ + tasks.performJPAWeaving.execute() + } } diff --git a/dependencies.lock b/dependencies.lock index f01cd66..4abc3d8 100644 --- a/dependencies.lock +++ b/dependencies.lock @@ -12,6 +12,10 @@ "locked": "21.0", "requested": "21.+" }, + "commons-codec:commons-codec": { + "locked": "1.10", + "requested": "1.+" + }, "io.dropwizard.metrics:metrics-core": { "locked": "3.2.2", "requested": "3.+" @@ -82,6 +86,10 @@ "locked": "21.0", "requested": "21.+" }, + "commons-codec:commons-codec": { + "locked": "1.10", + "requested": "1.+" + }, "io.dropwizard.metrics:metrics-core": { "locked": "3.2.2", "requested": "3.+" @@ -152,6 +160,10 @@ "locked": "21.0", "requested": "21.+" }, + "commons-codec:commons-codec": { + "locked": "1.10", + "requested": "1.+" + }, "io.dropwizard.metrics:metrics-core": { "locked": "3.2.2", "requested": "3.+" @@ -218,10 +230,18 @@ "locked": "0.13", "requested": "0.+" }, + "com.github.stefanbirkner:system-rules": { + "locked": "1.16.1", + "requested": "1.+" + }, "com.google.guava:guava": { "locked": "21.0", "requested": "21.+" }, + "commons-codec:commons-codec": { + "locked": "1.10", + "requested": "1.+" + }, "io.dropwizard.metrics:metrics-core": { "locked": "3.2.2", "requested": "3.+" @@ -252,7 +272,15 @@ }, "junit:junit": { "locked": "4.12", - "requested": "4.12" + "requested": "4.+" + }, + "nl.jqno.equalsverifier:equalsverifier": { + "locked": "1.7.8", + "requested": "1.+" + }, + "org.assertj:assertj-core": { + "locked": "2.6.0", + "requested": "2.+" }, "org.eclipse.persistence:eclipselink": { "locked": "2.6.4", @@ -266,6 +294,14 @@ "locked": "2.6.4", "requested": "2.+" }, + "org.hamcrest:hamcrest-core": { + "locked": "1.3", + "requested": "1.3" + }, + "org.mockito:mockito-all": { + "locked": "1.10.19", + "requested": "1.+" + }, "org.postgresql:postgresql": { "locked": "42.0.0", "requested": "42.+" @@ -274,6 +310,10 @@ "locked": "1.16.16", "requested": "1.+" }, + "org.quicktheories:quicktheories": { + "locked": "0.13", + "requested": "0.+" + }, "org.slf4j:log4j-over-slf4j": { "locked": "1.7.25", "requested": "1.+" @@ -292,10 +332,18 @@ "locked": "0.13", "requested": "0.+" }, + "com.github.stefanbirkner:system-rules": { + "locked": "1.16.1", + "requested": "1.+" + }, "com.google.guava:guava": { "locked": "21.0", "requested": "21.+" }, + "commons-codec:commons-codec": { + "locked": "1.10", + "requested": "1.+" + }, "io.dropwizard.metrics:metrics-core": { "locked": "3.2.2", "requested": "3.+" @@ -326,7 +374,15 @@ }, "junit:junit": { "locked": "4.12", - "requested": "4.12" + "requested": "4.+" + }, + "nl.jqno.equalsverifier:equalsverifier": { + "locked": "1.7.8", + "requested": "1.+" + }, + "org.assertj:assertj-core": { + "locked": "2.6.0", + "requested": "2.+" }, "org.eclipse.persistence:eclipselink": { "locked": "2.6.4", @@ -340,6 +396,14 @@ "locked": "2.6.4", "requested": "2.+" }, + "org.hamcrest:hamcrest-core": { + "locked": "1.3", + "requested": "1.3" + }, + "org.mockito:mockito-all": { + "locked": "1.10.19", + "requested": "1.+" + }, "org.postgresql:postgresql": { "locked": "42.0.0", "requested": "42.+" @@ -348,6 +412,10 @@ "locked": "1.16.16", "requested": "1.+" }, + "org.quicktheories:quicktheories": { + "locked": "0.13", + "requested": "0.+" + }, "org.slf4j:log4j-over-slf4j": { "locked": "1.7.25", "requested": "1.+" diff --git a/farsite.ipr b/farsite.ipr index dd3b202..f034afb 100644 --- a/farsite.ipr +++ b/farsite.ipr @@ -71,6 +71,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -133,6 +254,24 @@ + + + + + + + + + + + + + + + + + + @@ -178,6 +317,15 @@ + + + + + + + + + @@ -286,6 +434,15 @@ + + + + + + + + + @@ -295,6 +452,15 @@ + + + + + + + + + @@ -385,6 +551,15 @@ + + + + + + + + + @@ -403,6 +578,15 @@ + + + + + + + + + diff --git a/farsite.iws b/farsite.iws index b3b71b8..7702e6a 100644 --- a/farsite.iws +++ b/farsite.iws @@ -2,6 +2,22 @@ + + + + + + + + + + + + + + + + @@ -86,67 +102,700 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -154,6 +803,45 @@ + + + + + + eclipselink.example.jpa.employee + platform + native + shouldnati + shouldprintfield + isidentity + returning + lastval + should + shouldacquire + insert + select + generated + buildselectqueryforiden + compileJava + override + addphon + weave + BT + id + modifyEm + tostring + coordination + salary + + + com.example.jpa + + @@ -176,6 +864,7 @@ Assembles classes 'main'.<p><i>Task group: build<i> Delete stale configuration files generated by OkBuck<p><i>Task group: okbuck<i> Setup okbuck cache and dependencies<p><i>Task group: okbuck<i> + <i>Task group: other<i> Move the generated lock file into the project directory<p><i>Task group: Locking<i> Runs this project as a JVM application<p><i>Task group: application<i> <i>Task group: other<i> @@ -231,7 +920,7 @@ @@ -786,7 +1563,7 @@ - + - @@ -937,6 +1713,26 @@ + + + + + + @@ -1351,9 +2149,15 @@ + + + + + + - @@ -1361,38 +2165,39 @@ - - + + + - - - + + + - + - - - + + + - + + - + - + - - + @@ -1407,7 +2212,81 @@ - @@ -1416,56 +2295,522 @@